본문 바로가기

전체 글311

Runtime, Test DB 설정 Test DB 설정 PostgreSQL 드라이버 의존성을 추가한다. pom.xml org.postgresql postgresql runtime 그리고 로컬(또는 DB 서버)에서 도커를 사용하여 PostgreSQL 컨테이너를 띄우고, 실행하자. $ docker run --name eventdb -p 5432:5432 -e POSTGRES_PASSWORD=1234 -d postgres $ docker exec -it eventdb bash PostgreSQL 접속 # PostgreSQL 접속 /# su - postgres # 관리자로 접속 $ psql -d postgres # 유저 + 패스워드로 접속 $ psql -U postgres -W Password: # 테이블 확인 postgres=# \dt 이제 스.. 2021. 1. 27.
Spring REST Docs Spring REST API - Spring REST Docs Spring REST Docs 는 소스에 관한 설명을 제공할 수 있는 정형화된 documents 를 만드는 기능을 제공한다. Docs 를 만들 때 swagger 를 사용할 수도 있지만, Spring REST Docs 로 만들어보자. Spring Docs 에서 문서 조각을 snippets 라 한다. 문서 조각이 모인 Docs를 Asciidoctor 조립하여 HTML 문서를 만든다. 테스트 MockMvc WebTestClinet REST Aussured 등등 REST Docs 를 사용해보자. pom.xml 에 REST Docs 의존성을 추가한다. org.springframework.restdocs spring-restdocs-mockmvc tes.. 2021. 1. 26.
Spring REST API - HATEOAS Spring REST API - HATEOAS HATEOAS 란 Hypermeida As The Engine Of Applicaton State 의 약자로, REST API 의 개념을 충족시키는 조건 중 하나이다. 서버는 리소스를 보낼 때 리소스와 연관된 링크 정보를 담아 클라이언트에게 제공해야하며, 클라이언트는 링크 정보를 바탕으로 리소스에 접근해야한다는 원칙이다. 연관된 링크 정보는 { relation : href } 쌍으로 묶어서 _links 안에 넣어주면 된다. 예를 들면 아래와 같다. self 는 자기 자신에 대한 href 정보를 제공한다. 그 외에 query-events 라는 relation 에는 해당 리소스 정보를 담고 있는 href 를 담아주면 된다. { ..., "_links":{ "se.. 2021. 1. 24.
Spring REST API - 테스트코드 파라미터사용 Spring REST API - 테스트코드 파라미터 리팩토링 JUnitParam 을 사용해서 테스트 코드에서 매개변수만 바꾸어 중복된 코드를 제거한다. 아래와 같이 3개의 테스트를 실행하는데, 값만 바꾸어 가면서 테스트하려한다. 하지만, 반복되는 코드가 길게 있으니 보기에 좋지 않다. JUnitParams 로 아래 코드를 리팩토링해보자. @Test public void testFree(int basePrice, int maxPrice, boolean isFree) { //------------------------------------------------ // Given Event event = Event.builder() .basePrice(0) .maxPrice(0) .build(); // When.. 2021. 1. 23.
Spring REST API - BadRequest Spring REST API - Bad Request 빈 입력값 처리 JSR 303 라이브러리에 있는 Bean Validation 을 사용할 수 있다. pom.xml org.springframework.boot spring-boot-starter-validation 각 필드마다 필드의 속성들을 어노테이션으로 달아준다. @Builder @AllArgsConstructor @NoArgsConstructor @Data public class EventDto { @NotEmpty private String name; @NotEmpty private String description; @NotNull private LocalDateTime beginEnrollmentDateTime; @NotNull private.. 2021. 1. 23.
Spring REST API - 입력값 처리 Spring REST API - 입력값 처리 테스트하면서 입력값을 제한해야 하는 필드가 있다. 예를 들어 자동 생성되도록 설정된 id 나 계산해야하는 값들이다. 이를 DTO 사용해서 해결해보자. jackson 라이브러리를 통해 json 어노테이션을 붙이는 방법도 있다. 에노테이션이 다닥다닥 많이 붙어서 가독성이 안좋아 질가봐 DTO를 따로 만드는 예제를 만든다. DTO (Data Transfer Object) 에 Entity 객체로부터 입력이 필요한 필드만 가지고와서 모델을 새로 정의한다. @Builder @AllArgsConstructor @NoArgsConstructor @Data public class EventDto { private String name; private String descrip.. 2021. 1. 23.
Spring REST API TEST Spring REST API - 이벤트 생성 API 테스트 @WebMvcTest @WebMvcTest 는 슬라이싱 테스트다. 웹과 관련된 빈들을 등록해준다. DispatcherServlet, EventController, 여러 Data Handler, Mapper, Converter 가 조합이 된 상태로 진행되는 테스트이므로 단위테스트는 아니다. 또한 MockMvc 빈을 자동으로 등록해주므로, 그대로 주입하여 사용하면 편리하다. MockMvc 스프링 MVC 테스트의 핵심 클래스로, 웹 서버를 띄우지 않아도 스프링 MVC (DispatcherServlet)가 요청을 처리하는 과정을 확인할 수 있다. 때문에 컨트롤러 테스트로 자주 사용된다. Test1) 201 응답 받기 1) Headers 의 locatio.. 2021. 1. 22.
Spring REST API Spring REST API - REST API, 도메인 REST API 란? API : Application Programming Interface REST : REpresentational State Transfer, 인터넷 상 시스템 간 상호 운용성(interoperability)을 제공하는 방법 중 하나다. 통신 방법으로 주로 HTTP를 사용한다. 시스템 각각의 독립적인 진화를 보장하기 위한 아키텍처이다. REST 아키텍처 스타일 클라이언트-서버 Stateless Cache Uniform Interface Layered System Code-On-Demand (선택) REST 아키텍처 스타일 중 uniform Interface 에서 self-descrive messages 와 HATEOAS 가 대.. 2021. 1. 22.
Springboot - Actuator, 운영 Springboot - Actuator Actuator 는 스프링부트 운영 중 유용한 기능을 제공한다. 엔드포인트, 메트릭스, 모니터링 기능 등을 알아보자. Endpoint 아래 ID에 해당하는 모듈들이 모두 활성화 된다.(shutdown 제외) auditevents : 인증 정보 등록 beans : 빈들 conditions : 자동 설정 여부와 이유 configprops : application.properties 에 정의 가능한 프로퍼티들 env : 스프링 environment 를 등록 flyway : 마이그레이션 정보 liquibase : 마이그레이션 정보 health : 애플리케이션의 정상 가동 유무 httptrace : 최근 100개 HTTP 요청/응답 info : application 관련 된.. 2021. 1. 21.
Springboot - Spring REST Client Springboot - Spring REST Client RestTemplate, WebClient 는 기존 spring-web 에 있던 모듈이다. 스프링부트는 이들을 Builder 로 감싸서 빈으로 등록해주고, 편안한 기능을 제공해준다. RestTemplate Blocking I/O 기반의 Synchronous API 이다. spring-boot-starter-web 의존성을 등록하면, RestTemplateAutoConfiguration 이 자동 설정된다. 또한 RestTemplateBuilder 를 빈으로 자동 등록해준다. 우선 예제를 위해 컨트롤러를 등록해주자. @RestController public class MarketController { @GetMapping("/fruit") public.. 2021. 1. 21.
728x90