[spring] QueryDSL 연동하기

kongta2·2024년 1월 23일
0

프로젝트의 전반적인 기능 구현이 완료가 돼서 이제 기능들을 최적화하기 위해 QueryDSL을 공부하기로 했다.

우선 우리 프로젝트에서는 spring boot 3.2.1버전을 쓰고있는데, spring boot 3이상의 버전에서는 설정방법이 다르다고 해서 찾아보기로 했다.

첫 번째로 querydsl 플러그인을 사용하는 방법은 배포를 할 때, gradlew를 사용하면 동일한 Q파일을 생성하면 안된다는 에러가 뜬다고 한다.

두 번째로 플러그인을 사용하지않고 dependency에 바로 설정하는 방법이다.

    //Spring boot 3.x이상에서 QueryDsl 패키지를 정의하는 방법
    //QueryDSL 적용을 위한 의존성 (SpringBoot3.0 부터는 jakarta 사용해야함)
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"

추가로 application.yml파일의 spring.jap.hibernate.ddl-auto 옵션의 주의할 점이다.

  • ddl-auto 옵션의 종류
    • create: 기존테이블 삭제 후 다시 생성 (DROP + CREATE)
    • create-drop: create와 같으나 종료시점에 테이블 DROP
    • update: 변경분만 반영(운영DB에서는 사용하면 안됨)
    • validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
    • none: 사용하지 않음(사실상 없는 값이지만 관례상 none이라고 한다.)

validate와 none을 제외한 속성은 운영 DB에는 절대! 사용하면 안된다. create나 create-drop으로 설정한 채로 운영 DB에 연결하여 애플리케이션을 실행해버리면 운영 DB의 테이블이 전부 삭제되는 대참사가 일어나게 된다.

update 또한, 만약 update로 인해 새로 추가된 컬럼이 not null이라면 해당 변경사항이 반영되지 않은 버전을 배포하게 되었을 때 테이블에 데이터가 INSERT 되지 않을 수 있다.

따라서..
개발 초기 단계 또는 로컬에서 테스트 : create 또는 update
테스트 서버 : update 또는 validate
스테이징 및 운영 서버 : validate 또는 none

profile
2025.04.01~

0개의 댓글