Lombok 라이브러리 소개/설치

2021. 9. 30. 14:58JAVA/Spring

본 글은 스타트 스프링 부트 도서의 내용을 복습하기 위해서 작성된 글입니다.

개요

Lombok 라이브러리는 어디에 사용하는지 알아보고, 설치하여 테스트를 실습합니다.

 

1. Lombok 라이브러리는 어디에 사용하는가?

Lombok 라이브러리는 Java 코드를 컴파일 할때 자동으로 추가 메서드(Getter/Setter/toString 등)를 생성하여 컴파일해주는 라이브러리입니다.

 

2. Lombok 라이브러리 설치

Lombok 라이브러리를 사용하기 전에 사전에 다음과 같은 설정이 필요합니다.

  • Eclipse 자체에 Lombok 라이브러리 설정
  • Lombok이 필요한 프로젝트에 라이브러리 추가

2.1 Lombok.jar 파일 다운로드

https://projectlombok.org/download

 

Download

 

projectlombok.org

2.2 Lombok.jar 파일 실행

다운로드한 폴더에서 'java -jar lombok.jar' 또는 lombok.jar 파일 클릭하여 실행

Install/Update 버튼을 눌러 설치합니다.

 

2.3 Eclipse 자체에 Lombok 라이브러리 설정 확인

이클립스가 설치된 폴더에 들어가서 lombok.jar 파일이 저장된 것을 확인합니다.

 

3. Lombok의 어노테이션

@NonNull Null 값이 될 수 없다는 것을 명시합니다. NullPointerException에 대한 대비책이 될 수 있습니다.
@Cleanup 자동으로 close() 메서드를 호출하는 역할을 수행합니다.
@Getter/Setter 코드가 컴파일될 때 속성들에 대해서 Getter/Setter 메서드들을 생성합니다.
@ToString toString() 메서드를 생성합니다.
@EqualsAndHashCode 해당 객체의 equals()와 hashCode() 메서드를 생성합니다.
@NoArgsConstructor /
@RequiredArgsConstructor /
@AllArgsConstructor
파라미터를 받지 않는 생성자를 만들어 주거나(@NoArgsConstructor), 지정된 속성들에 대해서만 생성자를 만들거나(@RequiredArgsConstructor), 모든 속성에 대해서 생성자를 만들어 냅니다(@AllArgsConstructor)
@Data @ToString, @EqualsAndHashCode, @Getter(모든 속성), @Setter(final이 아닌 속성), @RequiredArgsConstructor를 합쳐 둔 어노테이션입니다.
@Value 불변(immutable) 클래스를 생성할 때 사용합니다.
@Log 자동으로 생기는 log라는 변수를 이용해서 로그를 찍을 수 있습니다.
@Builder 빌더 패턴을 사용할 수 있도록 코드를 생성합니다.
new AA().setA().setB().setC()와 같이 체이닝을 할 수 있는 코드를 생성합니다.
@SneakyThrows 예외 발생 시 Throwable 타입으로 반환합니다.
@Synchronized 메소드에서 동기화를 설정합니다.
@Getter(lazy=true) 동기화를 이용해서 최초 한 번만 getter를 호출합니다.

 

4. Lombok을 사용한 예제

4.1 SampleVO 클래스 작성 및 SampleController 클래스에 추가 코드 작성

'org.zerock.domain' 패키지 생성 후 SampleVO 클래스 생성

package org.zerock.domain;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class SampleVO {
	private String val1;
	private String val2;
	private String val3;
}

'org.zerock.controller.SampleController'에 추가 코드 작성

package org.zerock.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.zerock.domain.SampleVO;

@RestController
public class SampleController {
	@GetMapping("/hello")
	public String sayHello() {
		
		return "Hello World";
	}
	
	@GetMapping("/sample")
	public SampleVO makeSample() {
		SampleVO vo = new SampleVO();
		vo.setVal1("v1");
		vo.setVal2("v2");
		vo.setVal3("v3");
		
		System.out.println(vo);
		return vo;
	}
}

 

4.2 SampleController.makeSample() 실행 확인

Boot01Application.java를 선택해서 Spring Boot App 실행 후 브라우저에서 '/sample' 입력하여 실행 확인

5. Controller의 테스트 진행

스프링 부트를 이용할 때 가장 편리한 점 중 하나는 테스트 환경을 미리 갖추고 있다는 점입니다. 'boot01' 프로젝트를 보면 'src/test/java' 내에 Boot01ApplicationTest.java' 파일로, 테스트를 할 수 있는 코드가 이미 생성되어 있는 것을 확인할 수 있습니다.

5.1 SampleControllerTest 클래스 파일 작성

'src/test/java' 밑에 SampleControllerTest.java 파일 생성 및 작성

package org.zerock;


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 org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.zerock.controller.SampleController;


@WebMvcTest(SampleController.class)	// @SpringBootTest는 사용하지 않습니다.
public class SampleControllerTest {
	@Autowired
	MockMvc mock;
	
	@Test
	public void testHello() throws Exception {
		MvcResult result = mock.perform(get("/hello"))
							.andExpect(status().isOk())
							.andExpect(content().string("Hello World")).andReturn();
		
		System.out.println(result.getResponse().getContentAsString());
		
	}
}
  • 테스트 클래스에 @WebMvcTest 어노테이션을 추가해서 특정 컨트롤러를 지정합니다. @WebMvcTest 애노테이션을 사용하면 @Controller, @Component, @ControllerAdvice 등이 작성된 코드를 인식할 수 있습니다.
  • 컨트롤러를 테스트하려면 org.springframework.test.web.servlet.MockMvc 타입의 객체를 사용해야만 합니다. @WebMvcTest와 같이 사용하면 별도의 생성 없이 주입(@Autowired)만으로 코드를 작성할 수 있끼 때문에 편리합니다.

MockMvc 객체의 경우 perform()을 이용해 객체를 브라우저에서 서버의 URL을 호출하듯이 테스트를 진행할 수 있고 결과는 andExpect()를 이용해서 확인할 수 있습니다. andExpect()는 결과 확인 외에도 Response에 대한 정보를 체크하는 용도로 사용할 수 있습니다. 예를 들어, 정상적인 응답 상태이고, 응답으로 전송되는 결과를 보고 싶다면 다음과 같은 코드를 작성할 수 있습니다.

 

5.2 Junit Test 실행

SampleControllerTest.java 오른쪽 버튼 클릭-> Run As -> JUnit Test

Hello World가 콘솔에 출력되는지 확인합니다.

 

References

스타트 스프링 부트, 구멍가게 코딩단 저