Lombok 설치하기

hoonssac·2024년 3월 18일

Spring

목록 보기
10/18
post-thumbnail

안녕하세요 :)
오늘은 자바 개발자들의 필수 라이브러리인 롬복(Lombok)을 설치해보는 시간을 가져보겠습니다 👻

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


Lombok 설치

build.gradle 의존성 추가

롬복을 사용하기 위해서는 build.gradle에 의존성을 추가해 주어야 합니다.

compileOnly('org.projectlombok:lombok')

저는 요렇게 맨 마지막 줄에 추가를 했습니다.

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

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


플러그인 설치

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

❗설치 후에는 Intellij를 재시작해야 됩니다


기존 코드를 롬복으로 전환하기

HelloResponseDto 생성

롬복을 설정했으니 이제 한번 기존 코드를 롬복으로 리팩토링 해볼까요?

먼저 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

  • assertj라는 테스트 검증 라이브러리의 검증 메소드입니다.
  • 검증하고 싶은 대상을 메소드 인자로 받습니다.
  • 메소드 체이닝이 지원되어 isEqualsTo와 같이 메소드를 이어서 사용할 수 있습니다.

🟣 isEqualTo

  • assertj의 동등 비교 메소드입니다.
  • assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공입니다.

테스트 코드 실행

그럼 이제 작성한 메소드를 실행해보겠습니다!

정상적으로 잘 작동합니다!
롬복의 @Getter로 get 메소드가, @RequiredArgsConstructor로 생성자가 자동으로 생성되는 것이 증명되었습니다.

HelloController 수정

이제 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 생성자와 메소드

profile
훈싹의 개발여행

0개의 댓글