안녕하세요 :)
오늘은 자바 개발자들의 필수 라이브러리인 롬복(Lombok)을 설치해보는 시간을 가져보겠습니다 👻
롬복은 자바 개발을 할 때 자주 사용하는 코드인 Getter, Setter, 기본생성자, toString 등을 어노테이션으로 자동 생성해주는 역할을 합니다.
롬복을 사용하기 위해서는 build.gradle에 의존성을 추가해 주어야 합니다.
compileOnly('org.projectlombok:lombok')
저는 요렇게 맨 마지막 줄에 추가를 했습니다.

의존성을 추가했으니, gradle을 새로고침 해줍니다.

그러면 롬복 라이브러리가 이렇게 받아지는 모습을 볼 수 있습니다.

라이브러리를 다 받았다면 이제 롬복 플러그인을 설치해야 합니다.
플러그인 Marketplace에 "lombok"을 검색해 설치를 진행해줍니다.
❗설치 후에는 Intellij를 재시작해야 됩니다

롬복을 설정했으니 이제 한번 기존 코드를 롬복으로 리팩토링 해볼까요?
먼저 web패키지에 dto패키지를 추가하고 이렇게 HelloResponseDto를 생성해줍니다.
package com.b1uesoda.springboot.web.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
처음 보는 어노테이션 2개가 추가되었죠?🤔
저 @Getter라는 친구는 선언된 모든 필드의 get 메소드를 생성해주고,
@RequiredArgsConstructor는 선언된 모든 final 필드가 포함된 생성자를 생성해주는 역할을 합니다.
이제 이 Dto에 적용된 롬복이 잘 작동하는지 간단한 테스트 코드를 만들어 보겠습니다.
저는 지난 번에 만들었던 HelloControllerTest와 같은 위치에 dto패키지를 만들고, 거기에 HelloResponseDtoTest라는 테스트 클래스를 만들었습니다.

package com.b1uesoda.springboot.web.dto;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
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);
}
}
여기서도 간단하게 코드를 살펴보겠습니다.
🟣 assertThat
🟣 isEqualTo
그럼 이제 작성한 메소드를 실행해보겠습니다!

정상적으로 잘 작동합니다!
롬복의 @Getter로 get 메소드가, @RequiredArgsConstructor로 생성자가 자동으로 생성되는 것이 증명되었습니다.
이제 HelloController에도 새로 만든 ResponseDto를 사용하도록 코드를 추가해봅시다!
package com.b1uesoda.springboot.web;
import com.b1uesoda.springboot.web.dto.HelloResponseDto;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
// 추가
@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)에 저장하게 되는 것이죠!
마지막으로 추가된 API를 테스트하는 코드를 HelloControllerTest에 추가해 보겠습니다.
package com.b1uesoda.springboot.web;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
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.status;
import static org.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
// 추가
@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)));
}
}
여기서 param은 API 테스트할 때 사용될 요청 파라미터를 설정해주는 역할을 합니다.
단, 값은 String만 허용되죠..!
그래서 amount도 String으로 변환해주었답니다 ㅎㅎ
그리고 jsonPath는 JSON 응답값을 필드별로 검증할 수 있는 메소드입니다.
자 그럼 이제 추가된 API도 테스트를 실행해보겠습니다👻

JSON이 리턴되는 API 역시 정상적으로 테스트가 통과되는 것을 확인할 수 있습니다.
오늘은 롬복을 사용해보고, 롬복으로 만든 Dto를 사용해 API 테스트를 해보았습니다.
아직까지는 테스트 코드로 코드를 검증하는 것이 익숙하지는 않지만, 중요한 부분이니 잘 짚고 넘어가야겠습니다 👍
그럼 다음 포스트로 찾아뵙겠습니다. 읽어주셔서 감사합니다 :)
📚Reference
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱
AssertJ 사용법
Java 생성자와 메소드