1. Dependency 추가 io.springfox springfox-boot-starter 3.0.0 2. SwaggerConfig package com.kyhslam.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @..
| Spring REST Docs Spring REST Docs는 REST API 에 대한 정보를 제공하는 Docs를 생성할 수 있는 Spring에서 제공하는 툴 이다. Spring MVC Test 코드 작성 시 추가적으로 Docs를 생성하는 코드를 첨가하여 생성할 수 있다. REST Docs 는 REST 아키텍처의 self-descriptive 규약을 지키기 위해 REST API의 리소스 및 API 명세 그리고 요청과 응답 데이터의 설명까지 포함된 문서를 만들 수 있게 해준다. 참고 URL : https://docs.spring.io/spring-restdocs/docs/2.0.4.RELEASE/reference/html5/ Spring REST Docs Document RESTful services ..
| Spring HATEOAS HATEOAS 는 Hypermedia As The Engine Of Application State 의 약자로 REST 아키텍처의 한 구성요소이다. 이 HATEOAS를 통해서 어플리케이션의 상태를 전이할 수 있는 매커니즘을 제공할 수 있다. 참고 URL : https://docs.spring.io/spring-hateoas/docs/current/reference/html/ Spring HATEOAS - Reference Documentation Example 47. Configuring WebTestClient when using Spring Boot @SpringBootTest @AutoConfigureWebTestClient (1) class WebClientBased..
| Spring REST API 비즈니스 로직 적용 및 JUnitParam을 이용한 테스트 JUnitParam 테스트 라이브러리는 JUnit의 각 Test 메서드에 파라미터를 쓸 수 있게 함으로써 테스트 코드량을 줄이고 유지보수를 쉽게 해주는 유용한 라이브러리 이다. 테스트 할 전제조건 1. basePrice와 maxPrice 가 모두 0이면 free=true 그 이외에는 free=false 2. location 이 null 이거나 문자열의 길이가 0일 때 offline = false 그 외에는 offline = true 참고 URL : https://github.com/Pragmatists/JUnitParams Pragmatists/JUnitParams Parameterised tests that do..
| Bad Request 응답 본문 만들기 의존성 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-hateoas org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.modelmapper modelmapper 2.3.1 org.springframework.boot spring-boot-starter-test test com.h2database h2 org.springframework.restdocs spring-restdocs-mockmvc test 설정 application.yml ..
| 도메인 Validator를 통한 처리 검증할 EventValidator 클래스를 생성한다 package org.kyhslam.rest; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import java.time.LocalDateTime; @Component public class EventValidator { public void validate(EventDto eventDto, Errors errors){ //금액 검증 if(eventDto.getBasePrice() > eventDto.getMaxPrice() && eventDto.getMaxPrice() != 0){ err..
입력값이 이상한 경우 테스트 방법 즉, Dto의 값이 비어있을 경우 Bad Request 처리 @Valid : Request에 들어있느 값들을 Dto에 바인딩할 때 검증을 수행할 수 있다. package org.kyhslam.rest; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Builder @NoArgsConstructor @AllArgsConstructor @Data public class EventDto { private String name; private String descriptio..
Spring REST API Bad Request 처리 HTTP 요청에 대해 잘못된 입력값이 보내진 경우, 어떻게 처리를 해야 되는지 두 가지의 테스트 케이스로 확인해보자. 첫번째 : 입력값이 없는 상태 두번째 : 비즈니스로직에 위배되는 값이 왔을 경우 json문자열을 object로 변환하는 과정을 deserialization 이라고한다. 객체(object)를 json문자열로 변환하는 과정을 Serialization이라고 한다.
REST API를 설계할 시 Client 측에서 잘못된 데이터를 요청하거나 전송할 시 그것을 처리하는 로직을 만들어야 합니다. 여기서는 DTO(Data Transfer Object)와 스프링 부트에서 제공하는 설정 정보를 이용해 손쉽게 해당 로직을 적용할 것입니다. package org.kyhslam.rest; import org.modelmapper.ModelMapper; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootAppl..
Spring REST API 테스트 클래스 생성 및 201 응답 의존성 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-hateoas org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.modelmapper modelmapper 2.3.1 org.springframework.boot spring-boot-starter-test test com.h2database h2 org.springframework.restdocs spring-restdocs-mockmvc test 소스 코드 p..
API Application Programming Interface Rest REpresentational State Transfer 인터넷상의 시스템간의 상호 운용성(interoperability)을 제공하는 방법 중 하나 시스템 제각각의 독립적인 진화를 보장하기위한 방법 Rest API : REST 아키텍처 스타일을 따르는 API Self-descriptive message 메세지 스스로 메시지에 대한 설명이 가능해야 한다. 서버가 변해서 메시지가 변해도 클라이언트는 그 메시지를보고 해석이 가능하다. 확장 가능한 커뮤니케이션 HATEOAS 하이퍼미디어(링크)를 통해 애플리케이션 상태 변화가 가능해야 한다. 링크 정보를 동적으로 바꿀 수 있다.(Versioning 필요없이) HAL - Hypertext..