Book/Spring boot 와 AWS로 혼자 구현하는 웹서비스

[Book] 5) 롬복(Lombok) 을 사용해보자!

kkkkkkkkkkkk 2022. 3. 28. 14:35

🕶  롬복(Lombok) 의존성을 추가해보자!

  1. 롬복을 사용하기전에 의존성을 추가해야합니다. 그러므로 build.gradle 파일에 가서 compileOnly 'org.projectlombok:lombok:1.18.22' 을 추가해 줍니다,
  2. 빌드를 실행하고 플러그인에 가서 Lombok 을 설치해 줍니다.

🕶  의존성을 추가해줬다면 롬복기능을 사용해보자!

지금의 프로젝트처럼 작은 규모가 아닌 큰 규모에 프로젝트였다면 롬복으로 전환이 쉽게 됬을 까요??

쉽지 않았을 겁니다. 매번 코드에 Lombok 기능을 추가하고 코드를 수정하고 반복적인 작업이 될겁니다.

그리고 수정한기능이 제데로 작동하는지 알 수 가 없었을 겁니다.

하지만 지난 시간에 작성한 테스트 코드 로 인해 쉽게 검증을 할 수 있습니다.

이러한 이유로 테스트 코드가 아주 효율적이다라는 것을 알 수 있습니다.

앞으로는 모든 응답 Dto는 web 패키지 안에 dto 패키지를 만들어 사용하겠습니다.

간단한 HelloResponseDto 를 만들어 롬복기능을 추가하고 기능을 테스트 해보겠습니다.

🕶  HelloResponseDto.class 생성

@Getter -> 1
@RequiredArgsConstructor -> 2
public class HelloResponseDto {

    private final String name;
    private final int amount;

}
  1. @Getter 는 선언되는 모든 필드의 get 메서드를 생성해줍니다.
  2. 선언되는 필드중에 final 이 붙어져 있는 필드의 생성자를 생성해줍니다.

🕶  HelloResponseDtoTest.class 생성

class HelloResponseDtoTest {

    @Test
    @DisplayName("롬복 기능 테스트")
    void HelloResponseDtoTest() {
        // given
        String name = "스폰지밥";
        int amount = 1000;

        // when
        HelloResponseDto dto = new HelloResponseDto(name, amount);

        // then
        assertThat(dto.getName()).isEqualTo(name); -> 1
        assertThat(dto.getAmount()).isEqualTo(amount); -> 2
    }
}
  1. assertj 라는 테스트 검증 라이브러의 검증 메서드입니다. 검증하고 싶은대상을 메서드 인자로 받습니다. 메서드 체이닝이 지원되어 isEqualTo 등 과 같이 메서드를 이어서 사용할 수 있습니다.
  2. assertj 의 동등 비교 메서드입니다. 비교해서 같을 때만 테스트가 성공합니다.

다음에는 HelloController.class 를 수정해봅시다.

🕶  HelloController.class 를 수정해보자!

@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name")String name, -> 1
                              @RequestParam("amount")int amount) {
    return new HelloResponseDto(name, amount);
}
  1. @ResquestParam 은 외부에서 api로 넘긴 파라미터를 가져오는 기능입니다.

🕶  HelloControllerTest.class 를 작성해보자.

@Test
@DisplayName("HelloResponseDto 가 반환된다.")
void helloDto()throws Exception {
    // given
    String name = "스폰지밥";
    int amount = 1000;

    // when && then
    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. api 테스트할 때 사용될 요청 파라미터를 설정합니다. 설정 값은 String 문자열 만 허용됩니다.
  2. json 응답값을 필드별로 검증할 수 있는 메서드입니다. $를 기준으로 필드명을 명시하고 $.name, $.amount 로 검증합니다.