JVM/Kotlin

Spring 3.0 이상 Querydsl 설정

kyoulho 2023. 9. 27. 09:27
// 1. 플러그인 섹션
plugins {
    // Spring Boot 플러그인: Spring Boot 프로젝트를 설정하여 자동 구성을 제공
    id("org.springframework.boot") version "3.1.0"
    
    // Spring Dependency Management 플러그인: 종속성 버전을 효과적으로 관리하여 일괄적으로 업데이트
    id("io.spring.dependency-management") version "1.1.0"
    
    // Kotlin JVM 플러그인: Kotlin을 JVM에서 실행 가능하도록 하는 플러그인
    kotlin("jvm") version "1.8.21"
    
    // Kotlin Spring 플러그인: Kotlin에서 Spring Framework를 쉽게 사용할 수 있도록 지원
    kotlin("plugin.spring") version "1.8.21"
    
    // Kotlin JPA 플러그인: Kotlin에서 JPA를 사용할 수 있도록 지원
    kotlin("plugin.jpa") version "1.8.21"
    
    // Kotlin AllOpen 플러그인 : Kotlin에서 Spring AOP를 사용하기 위해 특정 어노테이션이 지정된 클래스를 열도록 설정
    kotlin("plugin.allopen") version "1.8.21"
    
    // Kotlin Kapt 플러그인: Kotlin 어노테이션 프로세싱을 활성화하여 코드 생성을 가능하게 함
    kotlin("kapt") version "1.8.21"
    
    // IntelliJ IDEA 플러그인: IntelliJ IDEA와의 통합을 위한 플러그인 추가
    idea
}

// 2. AllOpen 섹션
allOpen {
    // Spring AOP를 위해 특정 어노테이션이 지정된 클래스를 자동으로 열도록 설정
    annotation("jakarta.persistence.Entity")
    annotation("jakarta.persistence.MappedSuperclass")
    annotation("jakarta.persistence.Embeddable")
}


// 3. 종속성 섹션
dependencies {
    // QueryDSL 설정
    implementation ("com.querydsl:querydsl-jpa:5.0.0:jakarta")
    
    // QueryDSL 어노테이션 프로세싱을 위한 의존성 추가
    kapt ("com.querydsl:querydsl-apt:5.0.0:jakarta")
    
    // 어노테이션 프로세싱을 위한 추가 의존성들
    kapt ("jakarta.annotation:jakarta.annotation-api")
    kapt ("jakarta.persistence:jakarta.persistence-api")
}

// 3. IntelliJ IDEA 설정 섹션
idea {
    // 모듈 설정 블록
    module {
        // Kapt(코틀린 어노테이션 프로세싱)을 위한 생성된 소스 디렉토리 설정
        val kaptMain = file("build/generated/source/kapt/main")
        
        // Kapt에서 생성된 소스 디렉토리를 소스 디렉토리로 추가
        sourceDirs.add(kaptMain)
        
        // Kapt에서 생성된 소스 디렉토리를 생성된 소스 디렉토리로 추가
        generatedSourceDirs.add(kaptMain)
    }
}

allOpen 플러그

 Spring AOP는 프락시(Proxy)를 생성하여 특정 메서드 호출을 가로채고, 이를 통해 부가적인 로직을 추가할 수 있게 해 준다. 하지만 Kotlin에서 클래스가 기본적으로 final로 선언되어 있으면 상속이 금지되기 때문에 이러한 프락시 생성이 어려울 수 있다. allopen 플러그인은 이 문제를 해결하기 위해 특정 어노테이션이 지정된 클래스들을 자동으로 열어준다.

 

Kapt 플러그인

 kapt는 Kotlin Annotation Processing Tool의 약자로, Kotlin에서 어노테이션 프로세싱(Annotation Processing)을 활성화하는 플러그인이다. 어노테이션 프로세싱은 컴파일 시간에 어노테이션을 기반으로 추가적인 코드를 생성하거나 다른 작업을 수행하는 기술이다.  kapt 플러그인을 사용하면 Kotlin 코드에서 사용하는 어노테이션을 처리하여 새로운 코드를 생성할 수 있다. 이것은 주로 런타임 시가 아닌 컴파일 시에 코드를 생성해야 하는 상황에서 유용하다.

 QueryDSL은 어노테이션 프로세싱을 통해 JPA 엔터티 클래스들에 대한 쿼리 타입(Query Type)을 생성하므로, 이를 위해 kapt 플러그인이 필요하다.

 

IntelliJ IDEA 플러그인

 Gradle 빌드 도구를 사용하는 프로젝트에서 IDEA 특정 설정을 구성하고, IDE에서의 편의성을 높이기 위한 설정이다. IDEA 플러그인을 사용하면 프로젝트를 더 효과적으로 개발하고 디버깅할 수 있다.

 위의 예시에서는 Kapt(코틀린 어노테이션 프로세싱)에서 생성된 소스 디렉토리를 IntelliJ IDEA에 추가하고 있다. 이렇게 함으로써 IntelliJ IDEA에서 생성된 코드를 올바르게 인식하고 편집할 수 있게 된다.

'JVM > Kotlin' 카테고리의 다른 글

코틀린 문법정리  (0) 2023.12.13
@Value 어노테이션 사용시 발생 오류  (0) 2023.08.27