스프링 부트 프로젝트에서 pom.xml 파일의 컴파일 에러는 개발자를 종종 당황하게 만듭니다. 대부분 의존성 버전 불일치, 불필요한 중복 설정, 또는 Annotation Processor 설정 오류로 인해 발생하죠. 이 가이드에서는 제시된 문제점을 상세히 분석하고, 단계별로 명확한 해결 방법을 제시하여 성공적인 프로젝트 빌드를 돕겠습니다.
1. 문제점 심층 분석
제시된 pom.xml 파일에는 다음과 같은 주요 문제점들이 발견됩니다.
- 잘못된 Spring Boot 버전:
3.3.5버전은 현재(2023년 11월 기준) 공식적으로 출시되지 않은 버전입니다. 이는 가장 흔하게 발생하는 오류 중 하나입니다. - 중복된 의존성:
spring-boot-starter-data-jpa에 이미 포함된jakarta.persistence-api의존성이 별도로 명시되어 있어, 버전 충돌을 일으킬 가능성이 큽니다. - Querydsl 설정 오류: Spring Boot 3.x부터는 Jakarta EE 환경을 사용하므로, Querydsl 의존성에도 이에 맞는
jakarta분류자(classifier)를 명확히 지정해야 합니다.
2. 단계별 해결 방안
2.1. Spring Boot 버전 수정 (필수)
존재하지 않는 버전을 현재 시점의 안정적인 버전으로 교체해야 합니다. 여기서는 3.1.5 버전을 사용하겠습니다. 최신 버전은 Spring Boot 공식 웹사이트에서 확인 가능합니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.5</version>
<relativePath/>
</parent>
2.2. 불필요한 의존성 제거
spring-boot-starter-data-jpa에 포함되어 있어 중복을 유발하는 jakarta.persistence-api 의존성을 삭제합니다.
<!-- 중복되므로 제거 -->
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.0.0</version>
</dependency>
2.3. Querydsl 설정 명확화
Querydsl 의존성에 jakarta 분류자(classifier)를 명시하여 Jakarta EE 환경에 맞는 코드를 생성하도록 설정합니다.
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</dependency>
2.4. Maven Compiler Plugin 설정 변경
querydsl-apt에 대한 Annotation Processor 경로를 명확히 지정해줍니다. 이 또한 jakarta 분류자를 포함해야 합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0</version>
<classifier>jakarta</classifier>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
3. 추가 해결 팁 및 검증 방법
- 의존성 트리 확인:
mvn dependency:tree명령어를 실행하여 의존성 충돌 여부를 한눈에 확인할 수 있습니다. - Maven 캐시 정리: 때때로 로컬 저장소의 캐시 문제로 에러가 발생하기도 합니다.
mvn clean을 실행하고,%USERPROFILE%\.m2\repository(Windows) 또는~/.m2/repository(Linux/macOS) 폴더에서 문제가 되는 의존성 폴더를 삭제한 후 다시 빌드해 보세요. - IDE 캐시 정리: IDE(IntelliJ, Eclipse 등)의 캐시를 정리하고 프로젝트를 다시 불러오는 것도 좋은 방법입니다.
결론
위에 제시된 수정사항을 모두 적용한 후, Maven 업데이트와 프로젝트 리빌드를 수행하면 대부분의 컴파일 에러가 해결될 것입니다. 만약 문제가 지속된다면, mvn clean install -X 명령을 실행하여 상세한 디버그 로그를 확인하고 추가적인 해결 방안을 모색해야 합니다. 꼼꼼한 설정 관리로 안정적인 개발 환경을 구축하시길 바랍니다.