원인
멀티모듈 프로젝트에서 common, core 모듈을 구성중에 Lombok 의존성 오류가 발생했다. org.projectlombok:lombok: 형태로 버전이 비어 있는 에러가 반복됐는데, 이전버전에서는 적용 되는 걸로 보아 차근차근 생각해보기로 했다.
행동
문제를 해결하기 위해 Lombok과 Spring Boot의 역할을 분리해서 생각했다. 나의 의도는 common, core 모듈은 스프링을 의존하지 않는다. 하지만 롬복은 사용하고 싶었기에 root에서 subprojects{} 에서 스프링 부트를 제거하면서부터 발생함을 알게 되었다.
롬복은 스프링 부트와 관련이 없는데, 롬복 인식을 할 수 없을까..
플러그인 문제일까 해서 java-library 나 java 도 지워보고,
설정을 이리저리 만져보다 다른 에러도 발생 해 점점 더 꼬이는 것 같았다.
특히 java 를 지우니깐 subprojects {} 안의 설정들 전부 인식을 못하더라.
root 는 껍데기로써 동작해 java를 지우고 사용하려고 했지만 이렇게는 안되었다.
특히 롬복이 컴파일 타임 annotation processor라는 점에 집중해, Spring Boot와의 직접적인 의존 관계가 없다는 점에 집중하다보니 계속 헷갈리게 되었다.
해결
결론부터 말하자면, 버전을 명시하지 않아 발생한 문제였다.
스프링 부트 의존성이 빠진 common, core 모듈의 경우, BOM을 통해 버전 관리가 되지 않아 인식이 안되었었다.
결국 스프링 부트 의존성이 일부라도 필요했었다라는점이 조금 허탈하게 느껴지기도 한다.
스프링 부트가 없는 common, core 모듈에서는 롬복 버전을 직접 명시하도록 수정했다. 반대로 api, stream과 같은 실행 모듈에서는 Spring Boot 플러그인을 사용해 BOM을 통해 Lombok 버전을 관리하도록 했다. 이로써 Lombok 의존성 오류와 bootJar 관련 에러가 모두 해소됐다.
이번 경험을 통해 멀티모듈 환경에서는 Spring Boot는 실행 책임, Lombok은 컴파일 책임, BOM은 버전 관리 책임이라는 역할 분리가 명확해야 한다는 점을 정리할 수 있었다.
'개발지식 > 트러블슈팅' 카테고리의 다른 글
| @Authentication UserDetails에 null이 담기는 문제 (1) | 2024.03.21 |
|---|---|
| 스프링 시큐리티 소셜로그인 무한 리디렉션, successHandler 작동이 안되는 문제 (0) | 2024.03.09 |