본문 바로가기

WEB/Java

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 02-2 lombok 적용

lombok 이란

롬복은 자바 개발할 때 자주 사용하는 코드 Getter, Setter, 기본생성자, toString 등을 어노테이션으로 자동 생성해 줍니다.

 

build.gradle 에 아래 항목 추가

dependencies {
    //lombok
    implementation('org.projectlombok:lombok')
    testImplementation('org.projectlombok:lombok')
    annotationProcessor('org.projectlombok:lombok')
    testAnnotationProcessor('org.projectlombok:lombok')
}

 

lombok 플러그인 설치

  • Enable Annotation processing 체크
  • 롬복은 프로젝트마다 설정해야 한다. (플러그인은 한 번만 설치하면 됨)

 

이전에 만들었던 HelloController 를 lombok으로 전환하기

1. dto 추가

(앞으로 모든 응답 dto는 dto 패키지에 담을 예정)

HelloResponseDto

package com.example.boilerplate.web.dto;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
    private final String name;
    private final int amount;
}
@Getter
• 선언된 모든 필드의 getter를 생성해줍니다.

@RequiredArgsConstructor
• 선언된 모든 final 필드가 포함된 생성자를 생성해 줍니다.
• final이 없는 필드는 생성자에 포함되지 않습니다.

1-1. dto 테스트

HelloResponseDtoTest

package com.example.boilerplate.web.dto;

import org.junit.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class HelloResponseDtoTest {

    @Test
    public void 롬복_기능_테스트() {
        //given
        String name = "test";
        int amount = 1000;

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

        //then
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAmount()).isEqualTo(amount);
    }
}
  • Junit의 기본 assertThat() 메서드 말고, assertj의 assertThat() 메서드 사용하기
  • 테스트를 통해, junit이 생성자와 getter를 잘 생성한다는 것을 확인

 

2. ResponseDto 를 사용하도록 HelloController에 추가

    @GetMapping("/hello/dto")
    public HelloResponseDto helloDto(@RequestParam("name") String name,
                                     @RequestParam("amount") int amount) {
        return new HelloResponseDto(name, amount);
    }
@RequestParam
• 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션입니다.
• 여기서는 외부에서 name (@RequestParam("name")) 이란 이름으로 넘긴 파라미터 를 메소드 파라미터 name(String name)에 저장하게 됩니다.

 

2-1. dto response 테스트

import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

//...

    @Test
    public void helloDto가_리턴된다() throws Exception {
        String name = "hello";
        int amount = 1000;

        mvc.perform(
                get("/hello/dto")
                    .param("name", name)
                    .param("amount", String.valueOf(amount)))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.name", is(name)))
            .andExpect(jsonPath("$.amount", is(amount)));

    }
  • is() : hamcrest 패키지의 메서드로 import 해야함.
jsonPath()
• JSON 응답값을 필드별로 검증할 수 있는 메소드입니다.
$를 기준으로 필드명을 명시합니다.
• 여기서는 name과 amount를 검증하니 $.name, $.amount로 검증합니다.