본문 바로가기

Java, Kotlin, Spring111

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.
Springboot - Security Springboot - Spring Strarter Security Spring Security 스프링 시큐리티는 웹 시큐리티, 메소드 시큐리티와 다양한 인증 방법(LDAP, 폼 인증, Basic 인증, Auth)을 지원한다. 3개의 페이지를 만들어 security 를 알아보자. index, home 페이지는 모든 사용자가 접속하고, my 페이지는 본인만(인가된 사람만) 접근하는 것을 만들것이다. 스타터 웹과 타임리프를 의존성에 추가한다. org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf 컨트롤러를 등록하자. @Controller public class HomeContr.. 2021. 1. 21.
Spring Data - MongoDB Springboot - Spring Data - MongoDB MongoDB 는 json 기반의 다큐먼트 데이터베이스이다. 스프링부트와 연동하여 사용하는 방법을 알아보자. 의존성을 추가한다. pom.xml org.springframework.boot spring-boot-starter-data-mongodb MongoDB 설치, 실행 docker 를 통해 mongodb를 설치하고 실행한다. $ docker run -p 27017:27017 --name springboot-mongodb -d mongo 스프링부트가 localhost:27017 에 기본으로 mongodb 서버를 연동한다. 따라서 로컬 db 27017:도커 db 27017 를 연결해준다. mongo 데몬을 실행시킨다. 몽고 도커 컨테이너를 실.. 2021. 1. 21.
728x90