클래스를 설계할 때 기본적으로 생성해야할 것들이 있다.
생성자, get() 메서드, set() 메서드가 이에 속한다.
이러한 코드는 클래스를 지저분하게 만들고,
특히 필드가 많아지면 get(), set() 메서드의 경우 코드 줄을 의미 없이 길게 만든다.
너무 공통적인 작업인데 어떻게 할 수 있는 방법이 없을까?
그 해결책이 바로 Lombok 라이브러리이다.

Lombok을 사용하기 위해서는 먼저 라이브러리를 설치해야 한다.
Lombok 라이브러리는 Window 기준 다음과 같은 경로로 설치할 수 있다.


Lombok 라이브러리 설치 이후 정상적으로 사용하기 위해서는 설정 작업이 필요하다.


Lombok 라이브러리를 설치하고 사용 설정을 완료했으면,
build.gradle에 설치한 라이브러리를 추가하고 사용할 수 있다.
build.gradle
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
}

본격적으로 Lombok의 기능을 사용해보자.
@RequiredArgsConstructor
class Service {
private final Repository repository;
}
@RequiredArgsConstructor 애노테이션은
final 키워드와 함께 사용된 필드의 생성자를 자동으로 생성한다.
Spring에서는 생성자가 1개인 경우 @Autowired 애노테이션 생략이 가능하기 때문에,
Lombok 라이브러리를 사용하면 필드를 선언하는 것만으로 의존관계 주입이 가능하다.

@NoArgsConstructor(access = AccessLevel.PUBLIC)
class Service {
// 코드
}
아무 인자도 받지 않는 기본 생성자를 자동으로 만들어주는 애노테이션이다.
access 속성을 통해 접근 제어자를 설정할 수 있다.

@Getter
@Setter
class Service {
private String name;
private int age;
// ** get(), set() 메서드 자동 생성 **
}
클래스에 선언된 모든 필드에 대하여 get(), set() 메서드를 자동 생성한다.
class Service {
@Getter
@Setter
private String name;
private int age;
// ** get(), set() 메서드 자동 생성 **
}
클래스가 아닌 필드 레벨에 선언하는 경우,
get(), set() 메서드를 생성할 필드를 특정할 수 있다.

로그는 스레드 정보, 클래스 이름과 같은 정보를 함께 볼 수 있고
출력 정보를 조절하는 등 다양한 기능을 사용할 수 있다.
System.out보다 성능이 좋기 때문에 로그를 사용해야 한다.
SpringBoot는 로그 기능을 사용하기 위해 로깅 라이브러리로
SLF4J, Logback을 사용한다.
SLF4J는 인터페이스, Logback은 구현체이다.
로그 기능을 사용하기 위해서는 Logger 객체를 생성하여 사용해야 한다.
private static final Logger log = LoggerFacotry.getLogger(Object.class);
@Slf4j 애노테이션을 사용하면 객체를 생성하는 위 코드를 자동으로 생성해준다.
log 변수를 통해 로그 기능을 사용할 수 있다.
log.trace();
log.debug();
log.info(); // default
log.warn();
log.error();

로그에는 중요도 레벨이 있다.
trace(가장 양호) → debug → info → warn → error(가장 심각) 순서로 구성된다.
예를 들어 info를 로그 레벨로 설정한 경우, 이보다 중요도가 약한 레벨인
trace와 debug와 관련된 로그는 출력되지 않는다.
개발 서버에서는 debug, 운영 서버에서는 info를 출력한다.
로그에서는 문자열의 더하기 연산을 사용하지 않는다.
더하기 연산 대신 '{}' 기호를 사용한다.
log.info("Log Level = " + logLevel) // ** 사용 금지 **
log.info("Log Level = {}", logLevel); // ** {} 사용 **
더하기 연산을 사용할 경우, 출력하지 않아도 되는 로그에서 더하기 연산이 발생한다.
'{}'를 사용해야 연산이 발생하지 않고 무시 가능한 로그는 무시된다.

클래스의 ToString() 메서드를 자동으로 생성해주는 애노테이션이다.
클래스의 equals() 메서드, hashCode() 메서드를 자동으로 생성해주는 애노테이션이다.
@RequiredArgsConstructor, @Getter, @Setter,
@ToString, @EqualsAndHashCode를 자동으로 적용해주는 애노테이션이다.

Lombok 라이브러리를 사용하면 코드를 간소화하여 클린하게 클래스를 설계할 수 있다.
Lombok 라이브러리의 더 많은 기능을 배워나가면서 편리하게 개발해보자.
(Lombok 라이브러리 기능 향후 계속해서 추가 예정)