Spring/Introduction to Spring 22

회원 서비스 개발

* 같은 이름이 있는 이미 존재하면 가입 불가 Optional ?? java8부터 도입된 null값을 처리하기 위한 래퍼 클래스 과거에는 != null을 통해 항상 null값을 체크해야했지만 이제는 Optional로 객체를 감싸주게되면 정적메소드를 사용할 수 있다. 그 예로 ifPresent는 객체안에 무언가 들어있는지를 판별하는 메소드이다. - findByName은 return 값이 이미 Optional이기 때문에 위의 코드를 정리하여 사용가능하다. MemberService 클래스 전체 코드 public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); /* 회원 가입 *..

회원 도메인과 리포지토리 테스트

개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다. 1. save() 메소드 테스트 1-1. 직접 출력해서 테스트하기 console창에 result = true로 뜬 것을 확인할 수 있다. ==> 테스트 성공 1-2. Assertions로 테스트하기 * junit Junit에서 제공하는 Assertions 사용 ==> 테스트 성공 테스트 실패시에는 다음과 같이 오류가 발생한다. Expected(기댓값, 우리가 찾는 값..

회원 도메인과 리포지토리 만들기

1. 회원 도메인 만들기 domain 패키지 생성하고 그 안에 Member 클래스 생성 Id는 시스템에서 저장할 때 자동으로 지정되는 id값을 의미한다. (기본키와 비슷하게 사용될 것이다.) 2. 리포지토리 만들기 * 인터페이스 이전에 말했던 것과 같이 어떤 DB를 사용할 것인지를 아직 정하지 못했으므로 차후에 DB가 정해진다면 끼워맞추기 위해 인터페이스로 구현 * 구현체 filter를 통해 루프를 돌면서 하나라도 입력받은 name과 member.getName()이 같은게 있다면 return 해준다. 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려

회원 관리 예제 - 1. 비지니스 요구사항 정리

비지니스 요구사항 정리 데이터 회원ID, 이름 기능 회원 등록, 조회 아직 DB가 선정되지 않음. (가상의 시나리오) 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비지니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비지니스 도메인 객체 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 클래스 의존관계 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용

API

들어가며 API(Application Programming Interface) “API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.” 쉽게 말해 프로그램 간의 데이터 정보를 주고받을 수 있도록 도와주는 매개체 정도로 생각을 하면 될듯하다. 이는 JSON이라는 데이터 표준 포멧을 통하여 주고받는다. @ResponseBody? 뷰 리졸버를 사용하지 않고, HTTP에 직접 return값을 보내겠다는 의미 Body는 html에서의 body를 의미하는 것이 아니라, HTTP에서의 BODY를 의미한다. HTTP = HTTP Heade..

MVC와 템플릿 엔진

MVC? Model View Controller 과거에는 jsp를 통하여 View에서 모든 것을 다 처리했었음 ==> Model 1 방식 각 기능들을 쪼개어 그 기능에만 집중시키는 방향으로 발전한 것. View는 화면을 그리는데에 모든 기능과 역량을 집중시켜야하고, Controller나 Model은 비지니스 로직이나 내부적인 것들을 처리하는 것들에 집중해야함. MVC 패턴 사용하기 Controller / Model View 저번에 model과 view를 만들어 매핑을 통해 model을 전달했던 것과 같은 형태이다. 단 이번에는 @RequestParam을 통하여 매개변수name을 입력받도록 하였다. 이것의 옵션을 살펴보면 required가 기본은 true이다.(true면 값을 넘겨줘야함. false면 넘겨..

빌드하고 실행하기

나는 윈도우 사용자이므로 intelliJ에서 기본 terminal로 cmd가 적용되어 있는데, 리눅스 명령어를 사용하기 위해 기존에 깔려있던 git bash를 기본 terminal로 바꾸어 사용했다. 1. ./gradlew build 빌드를 실행하는 명령어 2. cd build 빌드 완료후 생성된 build 폴더로 들어감 ==> 빌드 폴더 내부의 모습이다. 3. cd libs 4. ls -arlth ( -arlth는 모든 파일, 폴더를 시간 역순으로 출력) 5. java -jar hello-spring-0.0.1-SNAPSHOT.jar 빌드된 것을 실행시킴. 우리가 앞서 run as를 통해 실행시킨 결과와 동일한 결과를 얻을 수 있다. localhost:8080으로 접속했을 때 웹서버가 정상적으로 동작중..

View 환경설정

Welcome Page static/index.html 을 올려두면 Welcome Page 기능을 제공한다. 컨트롤러에서 return 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다. 스프링 부트 템플릿엔진 기본 viewName 매핑 resource:template/ + {ViewName} + .html Controller에서 model에 담은 key와 value값이 hello.html로 리턴되고 (return "hello"를 통해 hello라는 이름을 가진 view로 반환된다.) 이를 view안의 data(model의 키값에다가 value를 넣어주는 형식)

반응형