ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 와 QueryDSL + Gradle 구성 - ①
    Spring boot 2023. 6. 19. 15:47

     

    들어가기 전에

    Spring Boot 3.1.0 version 에 QueryDSL 구성을 시도하다 Java EE 와 Jakarta EE 차이로 경험하게 된 내용을 기록하려고 한다.

     

     

    Java EE(Java Platform, Enterprise Edition)

    자바 EE는 1999년 썬 마이크로시스템즈가 J2EE(Java 2 Enterprise Edition) 명으로 발표한 분산 애플리케이션 개발 목적의 산업 표준 플랫폼이다. 기업용 애플리케이션을 개발/실행하기 위한 기술과 환경을 제공하며 서블릿(Servlet), JSP, EJB, JDBC, JNDI, JMX, JTA 등의 알려진 기술을 포함하고 있다. 자바EE의 주요 목적은 특정 운영체제와 미들웨어에 종속되지 않고 정보 교환 및 애플리케이션 호환이 가능한 플랫폼을 제공하는 것이다.

     

    자바EE 플랫폼 사양 다이어그램

     

    오라클은 2017년 자바EE 8 릴리즈를 마지막으로 오픈소스 SW를 지원하는 비영리 단체인 이클립스 재단에 자바EE 프로젝트를 이관했다.

     

    자바EE 버전 히스토리

     

     

    Jakarta EE(Jakarta, Enterprise Edition)

    이클립스 재단으로 이관된 자바EE의 공식 명칭은 자카르타EE, 프로젝트 명은 EE4J(Eclipse Enterprise for Java)로 변경되었다. 오라클이 자바EE 프로젝트는 이관했지만 자바 상표권은 여전히 보유하고 있기 때문에 자바 네임스페이스 사용에 제약이 있었다. 이러한 이유로 자카르타EE에서는 자바 네임스페이스가 Jakarta로, API 패키지명은 javax.* 👉 jakarta.* 로 변경되었다.

     

    Java EE 용어 Jakarta EE 용어
    Java Servlet javax.servlet Jakarta Servlet jakarta.servlet
    JavaServer Pages (JSP) javax.servlet.jsp Jakarta Server Pages jakarta.servlet.jsp
    JavaServer Faces (JSF) javax.faces Jakarta Server Faces jakarta.faces
    Java Message Service (JMS) javax.jms Jakarta Messaging jakarta.jms
    Java Persistence API (JPA) javax.persistence Jakarta Persistence jakarta.persistence
    Java Transaction API (JTA) javax.transaction Jakarta Transaction jakarta.transaction
    Enterprise JavaBeans (EJB) javax.ejb Jakarta Enterprise Beans jakarta.ejb
    Java Mail javax.mail Jakarta Mail jakarta.mail

     

    자카르타EE는 자바EE를 대체하지 않았고 둘 다 공존하고 있다. 자카르타EE는 자바EE 8에서 하드포크된 새로운 플랫폼으로 기존 자바EE와 호환되지 않는다. 자바EE는 계속 유지되지만 8 버전을 마지막으로 더 이상의 릴리즈와 추가 기능은 제공되지 않고 있다. 개발자는 자바EE를 계속 사용할 것인지 아니면 자카르타EE로 마이그레이션 할 것인지를 선택해야 한다. 다행히도 자카르타EE로 마이그레이션을 지원하는 도구가 제공되고 자바EE에 대한 패치도 계속 나올 것이기 때문에 당장 큰 이슈는 없을 것으로 예상된다.

     

     

    build.gradle 로 확인하는 QueryDSL 구성

     

    Spring Boot 3.1.0 버전에서 jpa dependency 는 jakarta 패키지를 사용하고 있다.

     

    그래서 querydsl dependency 구성을 아래와 같이 jakarta 로 명시해주어야 한다.

     

    build.gradle.kts 전체 구성

    plugins {
        id("java")
        id("org.springframework.boot") version "3.1.0"
        id("io.spring.dependency-management") version "1.1.0"
    }
    
    group = "digital.patron"
    version = "0.0.1-SNAPSHOT"
    java.sourceCompatibility = JavaVersion.VERSION_17
    
    configurations {
        compileOnly {
            extendsFrom(configurations.annotationProcessor.get())
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        val queryDslVersion = "5.0.0"
    
        // spring web
        implementation("org.springframework.boot:spring-boot-starter-web")
        // spring data jpa
        implementation("org.springframework.boot:spring-boot-starter-data-jpa")
        // MySQL 데이터베이스 드라이버 의존성 추가
        implementation("com.mysql:mysql-connector-j")
    
        // lombok
        compileOnly("org.projectlombok:lombok")
        annotationProcessor("org.projectlombok:lombok")
        // test
        testImplementation("org.springframework.boot:spring-boot-starter-test")
    
        // querydsl-jpa는 JPA(Java Persistence API)와의 통합을 제공
        implementation("com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta")
        // querydsl-apt는 컴파일 프로세스 중에 Q 클래스(쿼리 유형)를 생성하는 데 사용
        annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:jakarta")
        annotationProcessor("jakarta.annotation:jakarta.annotation-api")
        annotationProcessor("jakarta.persistence:jakarta.persistence-api")
    }
    
    tasks.withType<Test> {
        useJUnitPlatform()
    }

     

    아래는 Q 클래스 생성경로를 따로 지정해주지 않았을 때 Q클래스가 생성되는 폴더 구조이다.

     

Designed by Tistory.