스프링 웹플럭스 프로젝트 만들기 넌리액티브 마이크로서비스를 마이그레이션하기 스프링 웹플럭스란? Netty라는 새 애플리케이션 서버를 사용해 리액티브 마이크로서비스를 만들 수 있는 컴포넌트입니다. 리액티브 스트림 패턴을 구현하기 위해 리액터 프레임 워크를 광범위하게 사용합니다. 스프링 웹플럭스 프로젝트 생성하기 https://start.spring.io/ 위와 같이 세팅을 하고 애플리케이션을 다운로드합니다. 이제 상단의 실행을 클릭하거나 Terminal에서 아래 작업을 실행합니다. mvnw spring-boot:run 그러면 실행이 되고 로그에 아래와 같이 표시되는 것을 확인하여 네티를 이용해 요청을 처리할 준비를 합니다. 네티 Netty는 넌블로킹 I/O 작업을 수행할 수 있게 하는 Client-Serv..
고객 정보를 찾을 수 없어서 {"error": "404 NOT FOUND"} 형태로 반환하는 예제입니다. JSON 없이 예외처리 { "id": 4, "name": "test", } 위와 같이 POST에 이상한 데이터를 넣거나 형식을 지키지 않으면 아래와 같이 스프링이 자동으로 예외 처리를 해줍니다. { "timestamp": "2020-09-08T03:12:11.418+00:00", "status": 400, "error": "Bad Request", "message": "", "path": "/customer" } 이때 @ControllerAdvice와 @ExceptionHandler 어노테이션을 사용해 예외 처리를 해줄 수 있습니다. @ControllerAdvice class ErrorHandler ..
data class에서 데이터의 기본 값을 null로 주면 val telephone: Telephone? = null 아래와 같이 데이터가 없을 땐 null값을 받게 됩니다. [ { "id": 1, "name": "im", "telephone" : null }, { "id": 2, "name": "leaf", "telephone": { "countryCode": "+82", "telephoneNumber": "56453423" } }, { "id": 3, "name": "imleaf", "telephone" : null } ] 이때 null이면 데이터를 표시하지 않으려면 아래와 같이 하면 됩니다. 1. Jackson 어노테이션 사용 @JsonInclude(JsonInclude.Include.NON_NUL..
200 OK 응답뿐만 아니라 404 NOT FOUND 등 다양한 상태 코드를 제공하도록 하기 위해 사용합니다. 예를 들어 아래 코드를 보면 됩니다. @GetMapping(value = ["/customer/{id}"]) fun getCustomer(@PathVariable id: Int) = ResponseEntity(customerService.getCustomer(id), HttpStatus.OK) GetMapping이 기본적으로 HttpStatus.OK를 수행합니다. 이것을 적절하게 바꿔보겠습니다. GET @GetMapping(value = ["/customer/{id}"]) fun getCustomer(@PathVariable id: Int) : ResponseEntity { val custome..
중복 코드를 제거하고 API 처리와 컨트롤러의 결합을 제거하기 위해 사용합니다. Interface인 Service를 만들고 Service를 상속받는 Component를 만들고 사용하면 됩니다. 서비스 인터페이스 interface CustomerService { fun getCustomer(id: Int): Customer? fun createCustomer(customer: Customer) fun deleteCustomer(id: Int) fun updateCustomer(id: Int, customer: Customer) fun searchCustomer(nameFilter: String): List } RESTful API에서 동작할 작업들을 담은 interface를 만들었습니다. 구현 생성 @Co..
@PathVariable URL로 들어오는 값을 얻을 때 사용합니다. @GetMapping(value = ["/customer/{id}"]) fun getCustomer(@PathVariable id: Int) : ResponseEntity { ... } 위와 같이 value 값으로 {id}를 얻어오고자 할 때 PathVariable을 사용합니다. 스프링이 컨트롤러를 자동 설정할 때 어노테이션을 인식해서 URL로 전달되는 값을 함수에 필요한 값으로 매핑하고 지정된 데이터 타입으로 변환합니다. 추가 설정 없이도 경로 변수를 함수 안으로 쉽게 매핑할 수 있는 강력한 기능입니다. @RequestParam 꼭 명시해야 되는지와 기본 값을 설정할 수 있습니다. @GetMapping(value = ["/custom..
Spring Boot에서 RESTful API를 하기 위해서 RestController가 필요합니다. Controller RESTful API로 오는 각각의 요청은 주로 무상태 메시지입니다. 리소스 요청 리소스 업데이트 리소스 생성 리소스 삭제 Spring에서 웹 요청은 컨트롤러가 처리합니다. 컨트롤러는 클라이언트의 요청을 처리하고 응답을 보내는 역할을 하는 특수 컴포넌트입니다. 컨트롤러는 다양한 통신 프로토콜에 사용할 수 있지만 RestController는 RESTful API 통신을 위한 것입니다. RestController는 컨트롤러가 요청을 처리하고 body를 출력하도록 지정합니다.