Lombok(롬복) 이란
- Lombok(롬복)이란 Java 라이브러리로 반복되는 getter, setter, toString... 등의 반복 메소드 작성 코드를 줄여주는 코드 다이어트 라이브러리이다. (출처: https://cheershennah.tistory.com/183)
- 자바 사용하시는 분들은 다 아시겠지만 클래스에서
private
으로 선언된 변수들을 사용하기 위해 getter, setter를 주로 선언합니다. 하지만 매번 클래스마다 이를 선언해주는 것은 귀찮은 짓이라 이를 @어노테이션을 제공하고 있습니다. (@Getter, @Setter, @Data...) - 즉, Lombok은 @어노테이션 기반의 코드 자동생성을 통한 생산성 향상된다는 것이죠. (사용해보시면 직접 느끼실 겁니다 ㅎㅎ..)
Lombok(롬복) 설정
- 먼저 intellij에서 Lombok을 사용하려면 lombok 플러그인을 설치해야 합니다.
- Ctrl + Shift + A -> plugins -> Marketplace에서 lombok을 검색하여 install 해주시면 됩니다.
- 마지막으로 File -> Settings -> annotaion 이라고 검색하여 빨간색 부분에 체크를 해줍니다.
- 그러면 Lombok 세팅은 끝납니다.
Lombok(롬복) 테스트
- 먼저 Lombok을 테스트를 하기 위해 의존성을 새로 추가해주어야 합니다.
dependencies {
...
//롬복 설정 시작
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//롬복 설정 끝
}
- 그 다음으로 롬복 테스트를 위한 DTO를 생성합니다.
- DTO를 담을 dto 패키지 생성 -> HelloResponseDto 클래스 생성
HelloResponseDto 클래스
package com.azurealstn.blogproject.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final String nickname;
}
- @Getter : 선언된 모든 필드의 getter 메소드를 생성합니다.
- @RequiredArgsConstructor : 선언된 모든 final이 붙은 필드가 포함된 생성자를 생성합니다.
HelloResponseDtoTest 클래스
package com.azurealstn.blogproject.dto;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class HelloResponseDtoTest {
@Test
public void 롬복_기능_테스트() {
//given
String name = "minsu";
String nickname = "babo";
//when
HelloResponseDto helloResponseDto = new HelloResponseDto(name, nickname); //필드가 포함된 생성자를 만들어주었습니다.
//then
assertThat(helloResponseDto.getName()).isEqualTo(name); //get 메소드를 선언하지 않아도 getName()을 사용할 수 있습니다.
assertThat(helloResponseDto.getNickname()).isEqualTo(nickname);
}
}
- assertThat : assertj라는 테스트 검증 라이브러리로 검증합니다.
isEqualTo
로 값을 비교합니다. - JUnit의 기본 assertThat이 아닌 assertj로 사용했다는 점을 주의해주세요.
HelloController에서도 DTO를 사용해보기
HelloController 클래스
package com.azurealstn.blogproject.controller;
import com.azurealstn.blogproject.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")
...
@GetMapping("/hello/dto")
public HelloResponseDto helloResponseDto(@RequestParam("name") String name, @RequestParam("nickname") String nickname) {
return new HelloResponseDto(name, nickname);
}
}
- @RequestParam : 외부에서 API로 넘긴 파라미터(@RequestParam("name"), @RequestParam("nickname"))를 가져와 String name, String nickname에 각각 저장
HelloControllerTest 클래스
package com.azurealstn.blogproject.controller;
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.hamcrest.Matchers.is;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello_Test() throws Exception {...}
@Test
public void helloDto_Test() throws Exception {
String name = "minsu";
String nickname = "babo";
mvc.perform(
get("/hello/dto")
.param("name", name)
.param("nickname", nickname))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
.andExpect(jsonPath("$.nickname", is(nickname)));
}
}
- param : API 테스트할 때 요청 파라미터를 설정
- 값은 String 값만 허용됩니다.
- jsonPath : JSON 응답값을 필드별로 검증할 수 있는 메소드
- $를 기준으로 필드명 명시
다음으로
- 역시 테스트 코드까지 정상 동작한다면 롬복 설정까지 된 것입니다.
- 다음 시간에는 데이터베이스 설정에 대해 알아보겠습니다.
References
'공부 기록' 카테고리의 다른 글
[스프링 부트로 게시판 만들기] 04. Thymeleaf + Bootstrap (0) | 2021.07.19 |
---|---|
[스프링 부트로 게시판 만들기] 03. 데이터 베이스 설정 및 User 테이블 생성 (19) | 2021.07.18 |
[스프링 부트로 게시판 만들기] 01. 프로젝트 생성 (0) | 2021.07.18 |
[스프링 부트로 게시판 만들기] 00. 앞으로 만들 프로젝트 (0) | 2021.07.18 |
서블릿(Servlet) 간단 요약 (0) | 2021.05.20 |
댓글