본문 바로가기

Spring Boot/스프링 부트 핵심 가이드

(12)
[SpringBoot] H2를 테스트용 DB로 사용하기 📌 테스트용 DB로서의 H2 DB관련 테스트에는 인메모리 방식의 DB인 H2가 많이 사용됨 1. 테스트 과정에서 데이터가 영향을 받을수 있으며 2. H2를 이용하면 더 빨리 테스트할 수 있기 때문 임베디드 H2를 사용하려면 의존성을 추가해줘야 함 # gradle dependencies { testRuntimeOnly 'com.h2database:h2' } 🤔 테스트 데이터를 롤백하면 굳이 H2를 쓸 이유가 없지 않나? 테스트 데이터가 롤백되어 DB에 남아있지 않더라도, auto increment로 지정한 ID가 증가되는 등의 문제가 발생할 수 있음 => 테스트용 DB 필요 참고 : https://jungguji.github.io/2020/07/05/H2-DB%EB%A5%BC-%EC%9D%B4%EC%9A%..
[SpringBoot] 7.4.7 서비스 테스트 Summary : 서비스 테스트는 given - 레포지토리의 메소드가 특정 값을 리턴한다고 가정 (given / willReturn) when - 서비스의 특정 함수가 호출되었을 때 then - 해당하는 형식을 리턴하는지 (assertThat) 해당하는 레포지토리의 함수가 호출되었는지 (then(class).should(method)) 를 체크한다. 📌 서비스 레이어에 적합한 테스트 서비스는 외부 요인(서블렛, DB)을 배제하고 테스트할 수 있는 레이어 => 스프링 컨테이너를 제외하고 테스트하도록 서비스 레이어에 적합한 테스트 필요 => 유닛 테스트 📌 @ExtendWith 단위 테스트에 공통적으로 사용할 '확장 기능을 선언'해주는 역할 인자로 확장할 Extension을 지정 -> 주로 SpringExt..
[SpringBoot] 7.4.5-6 컨트롤러 테스트 Summary : 컨트롤러 테스트는 given - 서비스의 메소드가 특정 값을 리턴한다고 가정 (given / willReturn) when - 특정 요청이 왔을 때 (mockMvc.perform) then - 해당하는 형식의 응답인지 (andExpect / andDo) 해당하는 서비스의 메소드가 호출되었는지 (verify) 를 체크한다. 🔍 목차 7.4.5 스프링 부트에서의 테스트 7.4.6 컨트롤러 객체의 테스트 7.4.6.1 컨트롤러 테스트 코드의 요소 1 - MockMvc 7.4.6.2 컨트롤러 테스트 코드의 요소 2 - 어노테이션 7.4.6.3 컨트롤러 테스트 코드의 요소 3 - verify 7.4.6.4 컨트롤러 테스트 코드 예시 7.4.6.5 스프링 시큐리티 인증이 포함된 컨트롤러 테스트 📌..
[SpringBoot] 7.1-4 테스트 코드 📌 7.1 테스트코드를 작성하는 이유 개발 과정에서 문제를 미리 발견할 수 있음 사이드 이펙트를 테스트할 수 있음 (내가 코드를 수정함으로써 다른 코드에 영향이 가는지) 애플리케이션을 가동해서 하는 테스트보다 빠른 테스트를 할 수 있음 협업을 할 때 명세 문서로서의 기능을 수행함 코드가 작성된 목적을 명확하게 표현할 수 있으며, 불필요한 내용이 추가되는 것을 방지할 수 있음 오류가 발생할 수 있는 상황을 만들어서 오류를 테스트할 수 있음 cf. 테스트 코드를 작성하는 것과 TDD는 엄연히 다르다. TDD는 테스트코드를 먼저 짜고 그것을 명세서 삼아 코드를 작성하는 것 📌 7.2 단위 테스트와 통합 테스트 단위 테스트(Unit Test) 개별 모듈을 독립적으로 테스트하는 것 일반적으로 메서드 단위로 테스트..
[SpringBoot] 6.2-5 ORM, JPA, Hibernate, 영속성 컨텍스트 Summary : ORM(JPA)를 통해서 데이터베이스를 객체 접근하듯 할 수 있음 / Hibernate는 JPA의 구현체 JPA의 원리 : EntityManagerFactory가 EntityManager를 생성하면, 이 EntityManager가 엔티티를 영속성 컨택스트에 올리고, 영속성 컨택스트와 DB를 비교하며 DB를 조작함 💡 6.2 ORM Object Relational Mapping의 약자 직역하자면 '객체 관계 매핑' java의 객체(entity)와 table을 자동으로 매핑하는 방법 쿼리문이 아니라 메서드로 데이터를 조작할 수 있음 우리는 자바의 ORM인 JPA를 사용할 것이므로 이후의 내용이 모두 JPA에도 적용된다고 생각하면 됨 📌 ORM의 장점 쿼리를 작성하는 양이 현저히 줄어 개발 ..
[SpringBoot] 5.6-7 Swagger와 Logback Summary : Swagger은 xxxx인 API 문서 작성툴 Logback은 xxxx 하게 하는 로그 출력 형식 🔍 목차 5.6 REST API 명세를 문서화하는 방법 : Swagger 5.7 로깅 라이브러리 : Logback 📌 5.6 REST API 명세를 문서화하는 방법 : Swagger API 명세란? API를 개발하면 명세를 관리해야 함 명세란 해당 API가 1) 어떤 로직을 수행하는지 2) 이 로직을 수행하기 위해 어떤 값을 요청하는지 3) 이에 따른 응답값으로는 무엇을 받을 수 있는지 를 정리한 자료 API는 개발 과정에서 계속 변경되므로 작성한 명세 문서도 주기적인 업데이트가 필요함 하지만 명세 작업은 번거롭고, 어플리케이션과 명세가 일치하지 않는 문제가 발생할 수도 있음 이 같은 문제..
[SpringBoot] 5.3-5 POST, PUT, DELETE API 만들기 Summary : POST API는 DB에 값을 저장하기 위해, PUT API는 DB에 있는 값을 수정하기 위해 사용함 두 API 모두 Http body에 json을 넣어 값을 전달함 DELETE API는 DB에 있는 값을 삭제하기 위해 사용함 리소스를 식별할 수 있는 간단한 정보만 있어도 되므로 URI로 값을 전달함 🔍 목차 5.3 POST API 만들기 5.3.1 @RequestMapping으로 구현하기 5.3.2 @RequestBody를 활용한 POST 메서드 구현 5.4 PUT API 만들기 5.4.1 @RequestBody를 활용한 PUT 메서드 구현 5.4.2 ResponseEntity를 활용한 PUT 메서드 구현 5.5 DELETE API 만들기 5.5.1 @PathVariable과 @Req..
[SpringBoot] 5.2 GET API 만들기 Summary : GET API는 서버에서 값을 가져올 때 사용하고, PathVariable과 ReqestParam을 이용해서 값을 넘겨줄 수 있다. 🔍 목차 5.2 GET API 만들기 5.2.1 @RequestMapping 5.2.2 매개변수가 없는 GET 메서드 5.2.3 @PathVariable을 이용하는 GET 메서드 5.2.4 @RequestParam을 이용하는 GET 메서드 5.2.5 DTO 객체를 이용하는 GET 메서드 📌 5.2 GET API 만들기 GET API는 서버에서 값을 가져올 때 사용하는 API GET API를 작성하는 방법은 아래와 같다. 1. 매개변수 없이 2. @PathVariable 3. @RequestParam 📌 5.2.1 @RequestMapping @Request..