OpenFeign Querydsl์ ์์๋ก ์์๋ณด๋ Spring Boot + Maven ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ๋ฒ
๋ชฉํ : Spring Boot๊ฐ ๊ด๋ฆฌํด์ฃผ์ง ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋, ์ํ๋ ๋ฒ์ ์ ์ด๋ป๊ฒ ์ฐพ์๊ฐ๋์ง OpenFeign Querydsl ์ ์์๋ก ์์๊ฐ๋ ๊ฒ์ ๋๋ค.
์ฌ์ฉ ํ๊ฒฝ
- ๋น๋ ๋๊ตฌ: Maven (Gradle์ ๋ณธ๋ฌธ์์ ์ผ๋ถ๋ง ๊ฐ๋จํ ๋ค๋ฃน๋๋ค)
- IDE: IntelliJ Ultimate
- ํ๋ ์์ํฌ: Spring Boot
pom.xml ์ค์ ์์๋ ๊ธ ํ๋จ์ "๊ฒฐ๋ก "์ ์ ์๋์ด ์์ผ๋ฉฐ, ๊ทธ ์ค์ ์ ์ด๋ฅด๊ธฐ๊น์ง์ ๊ณผ์ ์ ์๊ฐํฉ๋๋ค.
Querydsl vs OpenFeign Querydsl
Querydsl(https://github.com/querydsl/querydsl)
- 5.0.0 ๋ฒ์ : 2021๋ 7์ ๋ฆด๋ฆฌ์ค
- 5.1.0 ๋ฒ์ : 2024๋ 1์ 30์ผ ๋ฆด๋ฆฌ์ค
3๋ ๊ฐ๊น์ด ํฐ ์ ๋ฐ์ดํธ ์์ด ์ ์ง๋๋ค 1๋ ์ ์ ๋ฆด๋ฆฌ์ค ๋๋ฉฐ ์ง์์ ์ผ๋ก ๊ด๋ฆฌ๋์ง ์๋ ํ๋ก์ ํธ์ ๋๋ค.
OpenFeign์ Querydsl(https://github.com/OpenFeign/querydsl)
OpenFeign์ด ํฌํฌํด์ ์ ์ง๋ณด์ ์ค์ธ Querydsl์ README์์๋ ๋ณผ ์ ์๋ฏ์ด ์ต์ข ๋ชฉํ๋ Get a querydsl project active!
์ฆ, ๋ค์ Querydsl ํ๋ก์ ํธ๋ฅผ ํ์ฑํ ํ๋ ๊ฒ์ผ๋ก ์ง์์ ์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์์ต๋๋ค.
์ด๋ฌํ ์ฐจ์ด๋ฅผ ์๊ฐํ ์ด์ ๋ Querydsl๊ณผ OpenFeign Querydsl์ ์ด๋ฆ์ ๋น์ทํ์ง๋ง, ์ ํ ๋ค๋ฅธ ํ๋ก์ ํธ์ด๋ Maven/Gradle ์ ํ์ํ ์์กด์ฑ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
Querydsl ์ ์์กด์ฑ์ com.querydsl , OpenFeign Querydsl ์์กด์ฑ์ io.github.openfeign.querydsl ์ ๋๋ค.
Spring Boot๊ฐ ๊ด๋ฆฌํ๋ Querydsl ๋ฒ์
Spring Boot๋ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ฑ์ ํตํด ์ฌ๋ฌ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฒ์ ์ ์ผ์ผ์ด ์ฐ๋ฆฌ๊ฐ ๊ด๋ฆฌํ์ง ์๋๋ก ํด์ค๋๋ค. ๊ทธ๋ฌ๋ฉด Spring Boot 3.4.x์์๋ ์ด๋ค Querydsl ๋ฒ์ ์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋์ง ํ์ธํด๋ด ์๋ค.
IntelliJ์์ pom.xml์ ์ด๊ณ ๋๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์์ฃผ ๋ด ๋๋ค.ํด๋น ๋นจ๊ฐ์ ๋ค๋ชจ๋ฐ์ค๋ก ํ์๋ ์ค์ ํ์ผ์ Ctrl + B ๋ก ๋ค์ด๊ฐ๋๋ค.
** Gradle ์ ์ด๋์ ์ฐพ์์ผ ํ๋์ง?
Maven์ ์ด๋ ๊ฒ IDE์์ ๋ถ๋ชจ ์ค์ ์ผ๋ก ์๋์ผ๋ก ์ ๋ฐ๋ผ๊ฐ ์ ์์์ง๋ง, Gradle ์ Ctrl + B๋ฅผ ๋๋ฌ๋ ๋ฐ๋ก ์ด๋๋์ง ์๊ธฐ ๋๋ฌธ์, ์ง์ ํด๋น ์ค์ ํ์ผ์ ์ฐพ์๋ดค์ต๋๋ค.
Gradle์ https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-dependencies/build.gradle ์ ์ ์ํด์ ์ํ์๋ ๊ธฐ์ ์ ๋ฒ์ ์ ํ์ธํ์๋ฉด ๋ฉ๋๋ค. Spring Boot 3.4.x ๊ธฐ์ค์ผ๋ก Querydsl์ ๋ฒ์ ์ 5.1.0์ ๋๋ค.
๋ค์ ๋์์์ Maven์ ๊ฒฝ์ฐ, ์์ ์ธ๊ธํ spring-boot-starter-parent์์ Ctrl + B๋ฅผ ๋๋ฅด๋ฉด ์๋ ์ฌ์ง์ฒ๋ผ spring-boot-starter-parent-3.4.4.pom ํ์ผ์ด ์ด๋ฆฌ๊ฒ ๋ฉ๋๋ค.
์ด ํ์ผ์ ๊ฐ์ฅ ์์ชฝ์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด spring-boot-dependencies๋ฅผ ์ฐพ์ ์ ์๊ณ , Ctrl B ๋ฅผ ํตํด ๋ค์ด๊ฐ๋ฉด ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ด ์ ์๋ spring-boot-dependencies๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํ์ธํ ์ ์๋๋ฐ, ์๋ ์์์ฒ๋ผ Spring Batch๋ Spring Data์ ๊ด๋ จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ ๊ด๋ฆฌ๋จ์ ๋ณผ ์ ์์ต๋๋ค.
<dependencyManagement>
<dependency> <!-- Spring Batch ๋ฒ์ -->
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-bom</artifactId>
<version>${spring-batch.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency> <!-- Spring Data ๋ฒ์ -->
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-bom</artifactId>
<version>${spring-data-bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependencyManagement>
์ด์ Ctrl + F๋ก "querydsl"์ด๋ผ๋ ํค์๋๋ฅผ ๊ฒ์ํ๋ฉด ์๋์ฒ๋ผ querydsl ์์กด์ฑ์ ์ฐพ๊ฒ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ${querydsl.version}์ฒ๋ผ ${...}๋ก ๋ ๋ฌธ๋ฒ์ Maven์ ๋ณ์ ๋ฌธ๋ฒ์ ๋๋ค. ์ด๋ Gradle์ ext ๋๋ Java์ ์ ์ญ ๋ณ์์ฒ๋ผ, ํ ๊ณณ์์ ์ ์ธํ ๊ฐ์ ์ฌ๋ฌ ๊ณณ์์ ๋ฐ๋ณตํด์ ์ฐ๊ธฐ ์ํจ์ ๋๋ค.
querydsl.version ์ Ctrl + F ๋ก ์ฐพ์ผ๋ฉด, <properties> ํ๊ทธ์ 5.1.0 ๋ฒ์ ์ผ๋ก ์ ์ธํ ๊ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฆ, ํ๋ก์ ํธ ์ ์ฒด์์ ์ฐ์ด๋ Querydsl์ ๋ฒ์ 5.1.0์ querydsl.version์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ง์ ํ๊ณ , ํ์ํ ๊ณณ์์ ์ด ๊ฐ์ ์ฐธ์กฐํด ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก , ์คํ๋ง๋ถํธ 3.4.x ๋ com.querydsl ์ 5.1.0 ์ ์ฌ์ฉ์ค์ ๋๋ค.
OpenFeign Querydsl์ ์์กด์ฑ ์ค์ ๊ณผ์
์์ ์ดํด๋ดค๋ฏ์ด, Spring Boot 3.4.x๋ ๊ธฐ๋ณธ์ ์ผ๋ก com.querydsl์ 5.1.0 ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค.
ํ์ง๋ง ์ ๋ OpenFeign ํ์์ ๋ณ๋๋ก ๊ด๋ฆฌํ๊ณ ์๋ Querydsl์ ์ฌ์ฉํ๊ณ ์ ํฉ๋๋ค. ์ด ํ๋ก์ ํธ๋ OpenFeign Querydsl Github์์ ํ์ธํ ์ ์๊ณ , ์ง๊ธ๋ ํ๋ฐํ 6.11๊ณผ ๊ฐ์ ์ต์ ๋ฒ์ ์ด ๋ฆด๋ฆฌ์ค๋๊ณ ์์ต๋๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด pom.xml์ ๋ฒ์ ์ 6.10.1๋ก ์ค์ ํ๊ณ , Maven ๋น๋๋ฅผ ํ๋๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
<properties>
<java.version>17</java.version> <!-- ํ๋ก์ ํธ ์๋ฐ ๋ฒ์ -->
<querydsl.version>6.10.1</querydsl.version> <!-- ์ฌ์ฉํ querydsl ๋ฒ์ -->
</properties>
์๋ฌ ๋ฐ์ !
Non-resolvable import POM: The following artifacts could not be resolved: com.querydsl:querydsl-bom:pom:6.10.1 (absent): com.querydsl:querydsl-bom:pom:6.10.1 was not found in https://repo.maven.apache.org/maven2 during a previous attempt.
์ด ์๋ฌ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- <querydsl.version>์ด๋ผ๋ ๋ณ์๋ ์๋ Spring Boot์ spring-boot-dependencies์์ ์ฌ์ฉํ๋ ๋ณ์์ ๋๋ค.
- ๊ทธ๋ฐ๋ฐ ์ ๊ฐ ํ๋ก์ ํธ์์ ์ด ๋ณ์๋ฅผ 6.10.1๋ก override(๋ฎ์ด์) ํ๊ฒ ๋์์ผ๋ฉฐ, Maven ๋น๋ํ ๋, com.querydsl ์์ 6.10.1 ๋ฒ์ ์ ์ฐพ์ผ๋ ค ์๋ํฉ๋๋ค.
- ํ์ง๋ง com.querydsl ์ ์ต์ ๋ฆด๋ฆฌ์ค๋ 5.1.0์ด๋ผ์, 6.10.1์ด๋ผ๋ ๋ฒ์ ์ ์กด์ฌํ์ง ์์ต๋๋ค.
- ๊ทธ๋์ Maven์ "์กด์ฌํ์ง ์๋ ๋ฒ์ ์ด๋ค"๋ผ๋ ์์ ์๋ฌ๋ฅผ ๋์ง๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ <querydsl.version>๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์๋์ฒ๋ผ ์ฌ์ฉํ ๋ฒ์ ์ ๋ช ์ํ๋ฉด ๋์ง๋ง, ํ๋์ฝ๋ฉ๋ ๊ฒ์ด ์ ๋ถํธํฉ๋๋ค. (๊ฐ ๋ชจ๋์ ๊ดํ ์ค๋ช ์ ์กฐ๊ธ ๊ธฐ๋ค๋ ค์ฃผ์ธ์)
<dependency> <!-- Openfeign Querydsl ์ jpa ๋ชจ๋ -->
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>6.10.1</version>
</dependency>
<dependency> <!-- Openfeign Querydsl ์ apt ๋ชจ๋ -->
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<classifier>jakarta</classifier>
<version>6.10.1</version>
</dependency>
<dependency> <!-- Openfeign Querydsl ์ core ๋ชจ๋ -->
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>6.10.1</version>
</dependency>
<ํด๊ฒฐ ๋ฐฉ๋ฒ – ์ปค์คํ ๋ณ์๋ก ๋ฒ์ ๊ด๋ฆฌ>
Maven์์๋ <properties>์ ์๋ก์ด ๋ณ์ ์ด๋ฆ์ ์ง์ ํด ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋ฒ์ ์ ํ ๊ณณ์์ ๊ด๋ฆฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด, openfeign.querydsl.version์ด๋ผ๋ ์๋ก์ด ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ๋ฒ์ ์ ๋ณด๋ฅผ ๋ด์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ถํ์ํ๊ฒ Spring Boot์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ฑ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ , ์์กด์ฑ ๋ฒ์ ๋ ํ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
<properties>
<java.version>17</java.version>
<openfeign.querydsl.version>6.10.1</openfeign.querydsl.version>
</properties>
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${openfeign.querydsl.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${openfeign.querydsl.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>${openfeign.querydsl.version}</version>
</dependency>
OpenFeign Querydsl์ ๋ชจ๋๋ค์ ์ญํ
์์กด์ฑ์ ์ ์ธํ ๋ ์ฐ๋ฆฌ๊ฐ ์ถ๊ฐํ๋ ๋ชจ๋๋ค์ธ querydsl-jpa, querydsl-apt, querydsl-core ์ด ๊ฐ๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง,
๊ณต์ ๋ฉ์ด๋ธ ์ ์ฅ์(https://mvnrepository.com/artifact/io.github.openfeign.querydsl)์์ ์ง์ ํ์ธํฉ๋๋ค.
- ํด๋น ์ ์ฅ์์ ๊ฐ๋ณด๋ฉด ์ด 4๊ฐ์ ์ฃผ์ ๋ชจ๋์ด ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ชจ๋๋ช | ์ญํ ์์ฝ | ์ค๋ช |
querydsl-core | ํต์ฌ API | ๋ชจ๋ QueryDSL ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ด ๋๋ ๊ณตํต ๋ก์ง์ด ๋ด๊ธด ๋ชจ๋์ ๋๋ค. ์ปฌ๋ ์ ๊ธฐ๋ฐ ์ฟผ๋ฆฌ, ํ์ ์์ ์ฟผ๋ฆฌ DSL ๋ฑ |
querydsl-apt | ์ฝ๋ ์์ฑ๊ธฐ | Qํด๋์ค(ex. QUser)๋ฅผ ์์ฑํ๊ธฐ ์ํ APT(Annotation Processing Tool). ์ปดํ์ผ ์ ์ํฐํฐ๋ฅผ ๋ถ์ํด ์์ค์ฝ๋ ์์ฑ |
querydsl-jpa | JPA์ฉ ํ์ฅ | JPA ํ๊ฒฝ(Spring Data JPA ํฌํจ)์์ ์ฌ์ฉํ๋ ๋ชจ๋ |
querydsl-sql | SQL์ฉ ํ์ฅ | MyBatis, JDBC ๋ฑ JPA๊ฐ ์๋ ์์ SQL ํ๊ฒฝ์์ QueryDSL์ ์ฌ์ฉํ ๋ ํ์ํ ๋ชจ๋ |
์ ์ ํ๋ก์ ํธ๋ JPA ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์, ํ์ํ ๋ชจ๋์ ๋ค์ ๋ ๊ฐ์ง์ ๋๋ค.
- querydsl-apt : Qํด๋์ค๋ฅผ ๋ง๋ค์ด์ฃผ๋ APT
- querydsl-jpa : JPA ํ๊ฒฝ์์ ์ฌ์ฉํ ๊ธฐ๋ฅ๋ค
"๊ทธ๋ ๋ค๋ฉด ํต์ฌ ๊ธฐ๋ฅ์ธ querydsl-core๋ ์ ์ ์ถ๊ฐํ๋์?"
IntelliJ์์ querydsl-jpa ์์กด์ฑ ์ ์ธ ๋ถ๋ถ์ Ctrl + B๋ก ๋ค์ด๊ฐ์ ํ์ธํด๋ณด๋ฉด, ์ด ๋ชจ๋์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ฏธ querydsl-core๋ฅผ ํฌํจํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ฆ, querydsl-jpa๋ querydsl-core ๊ธฐ๋ฅ์ ํ์ฅํด์ ์ ๊ณตํ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์, core๋ฅผ ๋ณ๋๋ก ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋, core ๋ชจ๋์ ์ ๊ฑฐํฉ๋๋ค.
<properties>
<java.version>17</java.version>
<openfeign.querydsl.version>6.10.1</openfeign.querydsl.version>
</properties>
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${openfeign.querydsl.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${openfeign.querydsl.version}</version>
</dependency>
์ฐธ๊ณ . com.querydsl ์ฌ์ฉ ์ jakarta ์ด์
๋ง์ฝ OpenFeign์ด ์๋ ๊ธฐ์กด com.querydsl ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ์ ์ผ๋ก ์ฃผ์ํด์ผ ํ ์ ์ด ์์ต๋๋ค.
Spring Boot๊ฐ 3.x๋ก ์ฌ๋ผ์ค๋ฉด์ javax → jakarta๋ก ์ ํ๋์๊ธฐ ๋๋ฌธ์, Querydsl ๋ฒ์ ์ด ๋ฎ์ ๊ฒฝ์ฐ ์ฌ์ฉํ ๊ฒฝ์ฐ Qํด๋์ค๊ฐ ์์ฑ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด์ ๋ํ ๊ณต์ ์ด์๋ ์ฌ๊ธฐ์ ํ์ธํ ์ ์์ต๋๋ค.(https://github.com/querydsl/querydsl/issues/3371)
ํด๋น ์ด์๋ฅผ ์์ฝํ์๋ฉด ์๋์ฒ๋ผ, jakarta ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ช ์์ ์ผ๋ก ์ ์ธ์ ํด์ผ ํ๋ค๊ณ ํฉ๋๋ค.
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<classifier>jakarta</classifier>
</dependency>
APT ๋ชจ๋์ ์ํ Maven ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
querydsl-apt๋ @Entity ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ฅผ ๋ถ์ํด Qํด๋์ค (์: QUser)๋ฅผ ์์ฑํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฐ๋ฆฌ๋ ์ด Qclass ๋ฅผ ์ด์ฉํด Querydsl ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ Qclass ๊ฐ ํ์ํฉ๋๋ค.
Qclass ๋ฅผ ์์ฑํ ์ ์๊ฒ APT ๋ชจ๋์ ์ปดํ์ผ ์์ ์ ์คํํ ์ ์๋๋ก ๋ณ๋์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํฉ๋๋ค.
ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๊ธฐ ์ํด OpenFeign Querydsl ์ README๋ฅผ ์ฐธ๊ณ ํด๋, ๊ฒฐ๊ตญ com.querydsl ๋ ํผ๋ฐ์ค ๋ก ์ฐ๊ฒฐ๋์์ต๋๋ค.
๊ทธ๋์ ํด๋น ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด, ๊ธฐ์กด Querydsl ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ apt-maven-plugin ์ค์ ์ ์ฌ์ฉํ์ต๋๋ค.
๋ค๋ง, ์ฐพ์๋ณด๋ ์ด ๋ฐฉ๋ฒ์ ๊ตฌ์์ผ๋ก ์ต๊ทผ Maven์์๋ apt-maven-plugin์ ์ฌ์ฉํ์ง ์๊ณ , maven-compiler-plugin์ <annotationProcessorPaths> ํ๊ทธ๋ฅผ ์ฌ์ฉํจ์ ์๊ฒ ๋์์ต๋๋ค. ๋ค๋ง, ๊ธฐ์กด ๋ฐฉ๋ฒ์ผ๋ก๋ Qclass ๋ฅผ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ maven-compiler-plugin ์ค๋ช ์ ๋์ค์ ํด๋น ๋ฌธ๋ฒ์ ์ฌ์ฉํ ๋, ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค.
๊ฒฐ๋ก ์ ์๋์ฒ๋ผ ํ๋ฌ๊ทธ์ธ์ pom.xml ์ ์ถ๊ฐํด์ค๋๋ค.
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
๊ฒฐ๋ก
1. Querydsl ≠ OpenFeign Querydsl
์ด ๋์ ์ ํ ๋ค๋ฅธ ํ๋ก์ ํธ์ด๋ฉฐ, ์์กด์ฑ ๊ทธ๋ฃน๊ณผ ๋ฒ์ ๋ ๋ค๋ฆ
๋๋ค.
Querydsl ์ ์์กด์ฑ์ com.querydsl , OpenFeign Querydsl ์์กด์ฑ์ io.github.openfeign.querydsl ์ ๋๋ค.
2. Spring Boot๋ ๊ธฐ๋ณธ Querydsl๋ง ๊ด๋ฆฌ
OpenFeign Querydsl์ ์ฌ์ฉํ ๊ฒฝ์ฐ, pom.xml์์ ๋ฒ์ ์ ๋ช
์์ ์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค.
3. JPA ํ๊ฒฝ์์๋ querydsl-jpa์ querydsl-apt๋ง ์์ผ๋ฉด ์ถฉ๋ถ
์ด ๋ ๋ชจ๋์ด ๋ด๋ถ์ ์ผ๋ก querydsl-core๋ฅผ ํฌํจํ๋ฏ๋ก ๋ณ๋ ์ถ๊ฐ๋ ๋ถํ์ํฉ๋๋ค
4. Qclass ์์ฑ์ ์ํด APT ํ๋ฌ๊ทธ์ธ์ด ํ์
apt-maven-plugin ๋๋ maven-compiler-plugin ์ค ํ๋๋ก ์ค์ ํด์ค์ผ ํฉ๋๋ค.
๋ค์์ Maven์์ OpenFeign Querydsl ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ฒด pom.xml ์ค์ ์ ๋๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Spring Boot ๊ณต์ parent ์ค์ -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.4</version>
<relativePath/>
</parent>
...
<properties>
<java.version>17</java.version> <!-- Java ๋ฒ์ -->
<openfeign.querydsl.version>6.10.1</openfeign.querydsl.version> <!-- Openfeign Querydsl ๋ฒ์ -->
</properties>
<dependencies>
<!-- Spring Data JPA (Hibernate + ORM ์ฐ๋) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- QueryDSL (JPA ์ฟผ๋ฆฌ DSL) -->
<!-- https://mvnrepository.com/artifact/io.github.openfeign.querydsl/querydsl-jpa -->
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${openfeign.querydsl.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${openfeign.querydsl.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
...
<plugin> <!-- Maven ์ปดํ์ผ ๋, Qclass ์์ฑ -->
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/java</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
๋ง์น๋ฉฐ
์ ๋ ์ด๋ฒ ๊ธ์ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ ์ ์ป์๋๋ฐ, ์ฌ๋ฌ๋ถ๋ ํจ๊ป ์ป์ด๊ฐ์ จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
- Spring Boot๊ฐ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ์๋์ผ๋ก ๊ด๋ฆฌํ๋์ง ์ฐพ์๊ฐ๊ธฐ
- Spring Boot๊ฐ ๊ด๋ฆฌํ์ง ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ์ด๋ป๊ฒ ์ฐพ์์ผ ํ๋์ง