- 룸복(Lombok) 소개 및 설치하기(자바 개발자들의 필수 라이브러리)
룸복은 자바 개발할 때 자주 사용하는 코드 Getter, Setter, 기본생성자, toString 등을 어노테이션으로 자동 생성해 줍니다. 이클립스의 경우 롬복 설치가 번거롭지만, 인텔리제이에선 플러그인 덕분에 쉽게 설정이 가능합니다.
※ IntelliJ 2020.2 버전과 Lombok은 호환이 안된다고합니다. 다른버전으로 진행해야한다고 하네요;
github.com/mplushnikov/lombok-intellij-plugin/issues/829#issuecomment-660442053
1) 라이브러리 다운로드
compile('org.projectlombok:lombok')
build.gradle 의존성 추가 후 Reload All Gradle Projects(Gradle Sync)
2) 플러그 인 설치
검색 Ctrl + Shift + A(윈도우)에서 Plugins Action을 실행 시킨 후 Lombok 설치
3) Lombok 설정
룸복은 프로젝트마다 설정해야 합니다. 플러그인 설치는 한 번만 하면 되지만, build.gradle에 라이브러리를 추가하는 것과 Enable Annotation Processing를 체크하는 것은 프로젝트마다 진행해야 합니다.
- Hello Controller 코드를 롬복으로 전환하기
큰 규모의 프로젝트의 경우 롬복으로 전환하기 쉽지 않습니다. 왜냐하면 어떤 기능이 제대로 작동될지 안 될지 예측할 수 없기 때문입니다. 하지만, 테스트 코드를 작성했다면 문제를 예측하고 해결할 수 있습니다.
package com.jordy.books.springboot.web.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter //1)
@RequiredArgsConstructor // 2)
public class HelloResponseDTO {
private final String name;
private final int amount;
}
1) @Getter
- 선언된 모든 필드의 get 메소드를 생성해 줍니다.
2) @RequiredArgsConstructor
- 선언된 모든 final 필드가 포함된 생성자를 생성해 줍니다.
- Dto에 롬복이 잘 작동하는 지 테스트 코드 작성
package com.jordy.books.springboot.dto;
import com.jordy.books.springboot.web.dto.HelloResponseDTO;
import org.assertj.core.api.Assertions;
import org.junit.Test;
public class HelloResponseDTOTest {
@Test
public void 룸복_기능_테스트(){
//given
String name = "test";
int amount = 1000;
//when
HelloResponseDTO dto = new HelloResponseDTO(name, amount);
//then
Assertions.assertThat(dto.getName()).isEqualTo(name); // 1), 2)
Assertions.assertThat(dto.getAmount()).isEqualTo(amount);
}
}
1) assertThat
- assertj라는 테스트 검증 라이브러리의 검증 메소드 입니다.
- 검증하고 싶은 대상을 메소드 인자로 받습니다.
- 메소드 체이닝이 지원되어 isEqualTo와 같이 메소드를 이어서 사용할 수 있습니다.
2) isEqualTo
- assertj의 동등 비교 메소드 입니다.
- assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공입니다.
작성된 테스트 메소드 실행 시 에러가 발생할 경우 아래의 블로그를 확인해야 합니다.
책 제공 이슈 블로그
github.com/jojoldu/freelec-springboot2-webservice/issues/2
저의 경우 IntelliJ 2020.2(현재는 Lombok 플러그인 이슈로 인한 2020.3으로 업그레이드함)에서 자동 세팅된 Gradle 버전 6를 사용하고 있어서 테스트코드에서 에러가 발생했었습니다. 그래서 Gradle 4.10.2로 다운 그레이드를 진행했습니다.
gradlew wrapper --gradle-version 4.10.2
위처럼 에러 해결 후 다시 테스트 메소드를 실행하면 정상적으로 되는 것을 확인 할 수 있습니다.
- HelloController(Test 포함)에서 ResponseDto를 사용하도록 코드 추가
1. HelloController
@GetMapping("hello/dto")
public HelloResponseDTO helloDto(@RequestParam("name") String name, @RequestParam("amount") int amount){// 1)
return new HelloResponseDTO(name, amount);
}
1) @RequestParam
- 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션입니다.
- 여기서는 외부에서 name (@RequestParam("name"))이란 이름으로 넘긴 파라미터를 메소드 파라미터 name(String name)에 저장하게 됩니다.
2. HelloControllerTest
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.hamcrest.Matchers.is;
...
@Test
public void helloDto가_리턴된다() throws Exception{
String name = "hello";
int amount = 1000;
mvc.perform(
get("/hello/dto")
.param("name", name) // 1)
.param("amount", String.valueOf(amount)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name))) // 2)
.andExpect(jsonPath("$.amount", is(amount)));
}
1) param
- API 테스트할 때 사용된 요청 파라미터를 설정합니다.
- 단, 값은 String만 허용됩니다.
- 그래서 숫자/날짜 등의 데이터도 등록할 때는 문자열로 변경해야만 가능합니다.
2) jsonPath
- JSON 응답값을 필드별로 검증할 수 있는 메소드입니다.
- $를 기준으로 필드명을 명시합니다.
- 여기서는 name과 amount를 검증하니 $.name, $.amount로 검증합니다.
3. API 테스트
JSON이 리턴되는 API역시 정상적으로 테스트가 통과하는 것을 확인 할 수 있습니다.
출처 :
'스프링부트와 AWS로 구현하는 웹서비스' 카테고리의 다른 글
[스프링부트/AWS] 3장 스프링 부트에서 JPA로 데이터베이스 다뤄보자(2/2) - Spring 웹계층, CRUD API, Auditing (0) | 2021.02.25 |
---|---|
[스프링부트/AWS] 3장 스프링 부트에서 JPA로 데이터베이스 다뤄보자(1/3) - JPA (0) | 2021.02.23 |
[스프링부트/AWS] 2장 스프링 부트에서 테스트 코드를 작성하자(1/2) - JUnit4 (0) | 2021.02.20 |
[스프링부트/AWS] 1장 인텔리제이로 스프링부트 시작하기(3/3) - 인텔리제이에서 깃과 깃허브 사용 (0) | 2021.02.16 |
[스프링부트/AWS] 1장 인텔리제이로 스프링부트 시작하기(2/3) - 그래들(Gradle) 생성 (0) | 2021.02.15 |