본문 바로가기

Web App/Spring REST API10

Spring REST API - 인증 Spring REST API - 인증 인증 엔터티를 하나 만들어보자. @Entity @Getter @Setter @EqualsAndHashCode(of = "id") @Builder @AllArgsConstructor @NoArgsConstructor public class Account { @Id @GeneratedValue private Integer id; private String email; private String password; @ElementCollection(fetch = FetchType.EAGER) @Enumerated(EnumType.STRING) private Set roles; } roles 필드는 권한 정보를 담고 있는 enum 타입의 필드이다. 여러 값을 가지는데, @El.. 2021. 1. 29.
Spring REST API - 조회 테스트 Spring REST API - 조회 이벤트 목록 조회 이벤트 목록은 조회하는 API를 만들어보자 우선 만들 요건은 Event 30개가 담긴 목록이다. 각 이벤트는 Page 정보를 담고 있다. TDD 방식으로 먼저 테스트 작성 후 그에 맞는 소스코드를 만든다. @Test @DisplayName("30개의 이벤트를 10개씩 묶어서 두번재 페이지 조회") public void queryEvents() throws Exception { // Given IntStream.range(0, 30).forEach(this::generateEvent); // When this.mockMvc.perform(get("/api/events") .param("page", "1") .param("size", "10") .par.. 2021. 1. 28.
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.