Spring Boot 프로젝트에서 Lombok을 사용하여 의존성 주입을 하려고 했으나, 의외로 간단한 설정 문제로 인해 시간이 꽤 소요되었습니다.
Spring Boot 프로젝트에서 Lombok의 @RequiredArgsConstructor를 사용하여 final 필드를 초기화하려고 했습니다. 하지만 다음과 같은 오류가 발생했습니다:
variable boardService not initialized in the default constructor
분명히 Lombok 설정이 되어 있는데도 불구하고 의존성 주입이 제대로 이루어지지 않는 상황이었습니다. Lombok 어노테이션을 사용했지만, 오류는 여전히 존재했습니다.
여러 가지 방법을 시도해 보았으나, 결국 build.gradle 파일에 Lombok 의존성을 추가하는 것이 문제를 해결해 주었습니다. 아래에 그 과정을 상세히 설명하겠습니다.
Lombok 의존성 추가
먼저 build.gradle 파일에 Lombok 의존성을 추가합니다. compileOnly와 annotationProcessor 두 가지 의존성을 모두 추가해야 합니다.
dependencies {
// Lombok 의존성 추가
compileOnly 'org.projectlombok:lombok:1.18.20' // 원하는 Lombok 버전
annotationProcessor 'org.projectlombok:lombok:1.18.20'
// 기타 의존성
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'mysql:mysql-connector-java'
}
IDE 설정 확인
Lombok 플러그인이 설치되어 있는지 확인합니다. IntelliJ IDEA와 Eclipse에서 Lombok 플러그인을 설치하고, annotation processing이 활성화되어 있는지 확인합니다.
IntelliJ IDEA:
File > Settings > Plugins > Marketplace에서 Lombok 검색 후 설치File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors에서 Enable annotation processing 체크Eclipse:
Help > Eclipse Marketplace에서 Lombok 검색 후 설치프로젝트 클린 및 재빌드
프로젝트를 클린하고 다시 빌드합니다.
./gradlew clean build
코드 수정
Lombok 어노테이션을 사용하여 의존성 주입을 설정합니다.
package com.board.controller;
import com.board.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/board")
@RequiredArgsConstructor
public class BoardController {
private final BoardService boardService;
// 기타 메서드 추가
}
이제 프로젝트를 실행하면, @RequiredArgsConstructor를 사용한 의존성 주입이 정상적으로 작동합니다.
Lombok을 사용하는 데 있어 작은 설정 하나가 큰 문제를 일으킬 수 있습니다. compileOnly와 annotationProcessor 의존성을 모두 추가하는 것이 중요하다는 것을 이번 기회를 통해 배웠습니다.