/* 1. @Entity - 테이블과 링크될 클래스 - 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭한다. - ex) SalesManager.java -> sales_manager table 아래 3개는 lombok 어노테이션 2. @NoArgsConstructor - 기본생성자 자동추가 - public Posts() {} 와 같음 3. @Getter - 클래스 내 모든 필드의 Getter 메소드 자동생성 4. @Builder - 해당 클래스의 빌더 패턴 클래스를 생성 - 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함 */
/* 별다른 설정없이 @SpringBootTest를 사용할 경우 H2 데이터베이스를 자동으로 실행한다. */ @ExtendWith(SpringExtension.class) @SpringBootTest publicclassPostsRepositoryTest { @Autowired PostsRepository postsRepository; /* 1. @AfterEach - Junit에서 단위테스트가 끝날 때마다 수행되는 메소드를 지정한다. - 보통은 배포 전 전체 테스트를 수행할 때 테스트간 데이터 침범을 막기 위해 사용된다. - Junit4 -> 5로 넘어가면서 After -> AfterEach 로 변경되었다. */ @AfterEach publicvoidcleanup() { postsRepository.deleteAll(); } @Test publicvoid 게시글저장_불러오기() { //given Stringtitle="테스트 게시글"; Stringcontent="테스트 본문"; /* 2. postsRepository.save - 테이블 posts에 insert/update 쿼리를 실행한다. - id값이 있으면 update, 없다면 insert 쿼리가 실행된다. */ postsRepository.save(Posts.builder() .title(title) .content(content) .author("jojoldu@gmail.com") .build()); /* 3. postsRepository.findAll - 테이블 posts에 있는 모든 데이터를 조회해오는 메소드 */ //when List<Posts> postsList = postsRepository.findAll(); //then Postsposts= postsList.get(0); assertThat(posts.getTitle()).isEqualTo(title); assertThat(posts.getContent()).isEqualTo(content); } }
3.4 등록/수정/조회 API 만들기
API를 만들기 위해 총 3개의 클래스가 필요하다.
Request 데이터를 받을 Dto
API 요청을 받을 Controller
트랜잭션, 도메인 기능 간의 순서를 보장하는 Service
여기서 Service는 비지니스 로직을 처리하는 것이 아니라 트랜잭션, 도메인 간 순서 보장의 역할만 한다.
Web, Service, Repository, Dto, Domain 이 5가지 레이어에서 비지니스 처리를 담당해야 할 곳은 **Domain**이다.
/* 1. @ExtendWith(SpringExtension.class) - 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다. - 여기서는 SpringExtension 이라는 스프링 실행자를 사용한다. - 스프링 부트 테스트와 JUnit 사이에 연결자 역할 - JUnit4 -> 5로 넘어오면서 사용하는 어노테이션과 클래스가 각각 @RunWith -> @ExtendWith 로 SpringRunner -> SpringExtension 으로 변경되었다. 2. @WebMvcTest - 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션 - 선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있다. - 단, @Service, @Component, @Repository 등은 사용할 수 없다. */
/* 3. AutoWired - 스프링이 관리하는 빈(Bean)을 주입 받는다. 4. private MockMvc mvc - 웹 API를 테스트할 때 사용한다. - 스프링 MVC 테스트의 시작점 - 이 클래스를 통해 HTTP GET, POST 등에 대한 API 테스트를 할 수 있다. */ @Autowired//3 private MockMvc mvc;//4
/* 5. mvc.perform(get("/hello")) - MockMvc를 통해 /hello 주소로 HTTP GET 요청을 한다. - 체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언할 수 있다. 6. .andExpect(status().isOk()) - mvc.perform의 결과를 검증한다. - HTTP Header의 Status를 검증한다. - 우리가 흔히 알고 있는 200, 404, 500 emddml 상태를 검증한다. - 여기선 OK 즉, 200인지 아닌지를 검증한다. 7. .andExpect(content().string(hello)) - mvc.perform의 결과를 검증한다. - 응답 본문의 내용을 검증한다. - Controller에서 "hello"를 리턴하기 때문에 이 값이 맞는지 검증한다. */ mvc.perform(get("/hello"))//5 .andExpect(status().isOk())//6 .andExpect(content().string(hello));//7 } }
2.3 롬북(Lombok)
자바 개발 시 자주 사용하는 코드 Getteer, Setter, 기본생성자, toString 등을 어노테이션으로 자동 생성해준다.