프로젝트 개요:
스프링 부트 버전을 3.3.0으로 업그레이드하면서 발생한 QueryDSL 설정과 관련된 문제를 해결한 경험을 설명합니다. 이 과정은 프로젝트의 데이터 접근 계층에 대한 안정성과 성능을 향상시키는 경험을 하는 단계였습니다.
문제 상황 설명:
스프링 부트 3.3.0을 도입하면서 javax
패키지의 사용이 jakarta
네임스페이스로 전환되었습니다. 이 변경은 기존에 생성된 QueryDSL의 Q 클래스 파일들과 충돌을 일으켜, 프로젝트 빌드 시 NoClassDefFoundError
와 같은 오류가 발생했습니다. 이 오류는 javax.persistence.Entity
를 참조하는 기존 코드가 새로운 jakarta.persistence.Entity
기반으로 업데이트되지 않아 발생한 것입니다.
문제 진단:
첫 번째 단계로, 기존의 Q 클래스 파일들이 문제의 원인이라는 점을 신속하게 파악했습니다. 이 파일들은 업데이트된 API와 호환되지 않아 프로젝트의 데이터 접근 계층에서 중대한 오류를 일으켰습니다.
해결 과정:
1. 코드 베이스 정리: 먼저, 자동 생성된 Q 클래스 파일들을 수동으로 삭제하여 깨끗한 상태에서 시작할 수 있도록 했습니다.
2. Gradle 설정 업데이트: build.gradle
파일을 수정하여 QueryDSL 관련 의존성을 jakarta
기반으로 변경하고, 새로운 설정에 맞게 compileQuerydsl
태스크를 수동으로 정의했습니다. 이 태스크는 JavaCompile
클래스를 사용하여 적절한 클래스 경로와 출력 디렉토리 설정을 통해 Q 클래스 파일을 재생성하도록 구성되었습니다.
3. 컴파일 의존성 관리: 모든 Java 컴파일 작업이 이 새로운 compileQuerydsl
작업에 의존하도록 설정하여, 모든 데이터 엔티티가 최신 Jakarta 어노테이션을 사용하는 Q 클래스로부터 자동 생성되도록 했습니다.
결과 및 검증:
이러한 변경 후, 프로젝트는 정상적으로 빌드되었고, 데이터 접근 계층은 새로운 Jakarta EE 표준에 완전히 호환되었습니다. 또한, 이 과정을 통해 프로젝트의 유지 관리성과 확장성이 향상되었음을 확인할 수 있었습니다.