๐ ๊ฐ์
์ ๊ท ํ๋ก์ ํธ ์์ ์ ํด์ผ ํ๋ ์ํฉ์ด ์์ด์ ์ด๋ฒ ๊ธฐํ์ spring boot, kotlin๊ณผ vue ์ต์ ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก ์ด๊ธฐ ์ธํ ์์ ์ ํ๊ณ ์ด ๊ณผ์ ์ ๊ธฐ๋กํ๋ ค๊ณ ํ๋ค. ๋ฒ์ ์ ๋ฐ๋ผ ์์ด์ง ๋ด์ฉ๋ ์กด์ฌํ๊ณ , ์ถ๊ฐ๋ ๋ด์ฉ๋ ์กด์ฌํ๋ ์ฒดํฌ๋ฅผ ํด๋ณด๋ ๊ฒ ์ข์ ๊ฑฐ ๊ฐ๋ค.
์๋์ ์ด๋ฏธ์ง๋ ์ด๋ฒ์ ํ๋ก์ ํธ๋ฅผ ์์ ํ๋ฉด์ ๋ง๋ ํจํค์ง ๊ตฌ์กฐ์ด๋ค. (์ฐธ์กฐ์ฉ)
๐ ๊ธฐ์ ์คํ
BackEnd
- java 21
- ์๋ฐ์ ๋ฏธ๋๋ผ๊ณ ๋ถ๋ฆฌ๋ virtual thread๋ฅผ ์ฌ์ฉํด๋ณด๊ณ ์ถ์ด์ ๋ฒ์ ์ 21 ์ด์์ ์ฌ์ฉํ๋ ค๊ณ ์๊ฐํ๊ณ 21์ด LTS ๋ฒ์ ์ด๋ผ์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
- kotlin 1.9.23
- spring boot 3.2.4
- DGS 8.6.0
- ๋ทํ๋ฆญ์ค์์ ๊ฐ๋ฐํ GraphQL ํ๋ ์์ํฌ์ด๋ค. ์์ ์ ํ๋ฒ ๋ด์ฉ์ผ ์ดํด๋ณด๊ณ ํ ์คํธ๋ฅผ ํด๋ดค์ ๋ ์ข๋ค๊ณ ์๊ฐํด์ ์ฌ์ฉํ๊ฒ ๋์๋ค. ํ์ง๋ง kotlin์ ์ฌ์ฉํ๋ ค๊ณ ๋ง์๋จน์๊ธฐ ๋๋ฌธ์ DGS์ ์ฌ์ฉ์ ๋ถํธํจ์ด ์กด์ฌํ๋ค๋ฉด JDSL์ ์ฌ์ฉํ ์์ ์ด๋ค.
Front
- vue 3.4.21
- vite 5.2.0
- pinia 2.1.7
- vue 3.x ์ด์ ๋ถํฐ๋ ๊ณต์์ ์ผ๋ก ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก pinia๋ฅผ ์๊ธฐํ๋ค. ๊ธฐ์กด์๋ vuex๋ฅผ ์ฌ์ฉํ์ผ๋ ๊ณต์์ ์ผ๋ก ์ง์ ํ ๋งํผ ํ๋ฒ ์ฌ์ฉํด ๋ณด๊ณ ์๋ก์ ์ฅ๋จ์ ์ ํ๋จํ๋ ๊ฒ ์ข๋ค๊ณ ํ๋จํด์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
์ด๋ฒ์ ์งํ ํ๋ ํ๋ก์ ํธ๊ฐ ์์ฒญ ํฐ ํ๋ก์ ํธ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์ต์ํ ๊ฒ๋ณด๋ค๋ ์๋ก์ด ๊ฒ์ ๋์ ํ๋ฉด์ ๊ฐ๋ฐ์ ์งํํ๋ ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ ๋ชจ๋ฅด๋ ๋ด์ฉ๋ ์กด์ฌํ๋ค. :) kotlin๊ณผ vue3.0์ ๊ฒฝ์ฐ๋ ๊ธฐ์กด์ ์ฌ์ฉํ๋๊ฒ๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ์ ์ด ์์๊น ์ถ๊ธฐ๋ ํ์ง๋ง ์ ์ฌ์ฉํ๊ณ ์ถ์ด์ ๊ณต๋ถ๋ฅผ ํํ์ด ํ๊ณ ์๋ค.
์์ ์ ์ ๋ด์ฉ ์ด์ธ์๋ ์์ผ๋ก ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ , ๊ณ์ํด์ ์ ๋ฐ์ดํธ ๋๋ ํ๋ ์ ์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ฉด ์ฌ์ฉํ ์์ ์ด๋ค.
๐ ์ค์ ํ์ผ
์์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ ํธ๋ด์์ ์ค์ ํ ๋ด์ฉ์ ๊ณต์ ํ๋ ค๊ณ ํ๋ค. ์์ ์๊ฒ ํ์ํ ๋ด์ฉ์ ์ฐธ์กฐํ๋ ๊ฒ์ด ์ข์ง๋ง ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋น์ถ์ฒํ๋ค.
BackEnd (application.yml)
plugins {
id 'org.springframework.boot' version '3.2.4'
id 'io.spring.dependency-management' version '1.1.4'
id 'org.jetbrains.kotlin.jvm' version '1.9.23'
id 'org.jetbrains.kotlin.plugin.spring' version '1.9.23'
id 'org.jetbrains.kotlin.plugin.jpa' version '1.9.23'
id "org.jetbrains.kotlin.kapt" version "1.9.23"
id "com.netflix.dgs.codegen" version "6.1.5"
}
group = 'com.service'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '21'
}
repositories {
mavenCentral()
}
dependencies {
/* spring boot */
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation "org.jetbrains.kotlin:kotlin-reflect:1.9.23"
/* queryDsl */
implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
kapt("jakarta.annotation:jakarta.annotation-api")
kapt("jakarta.persistence:jakarta.persistence-api")
/* DB */
implementation("org.mariadb.jdbc:mariadb-java-client:3.3.3")
/* Dgs */
implementation(platform("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:latest.release"))
implementation("com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter")
testImplementation("com.netflix.graphql.dgs:graphql-dgs-client")
/* scalar ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ */
implementation("com.netflix.graphql.dgs:graphql-dgs-extended-scalars")
/* jdsl (๋ผ์ธ์์ ๊ฐ๋ฐ๋จ) */
// TODO dgs๋ฅผ ์ฌ์ฉํ๋ค ๋ถํธํ๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ํ๋ค๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ ์์ .
// implementation 'com.linecorp.kotlin-jdsl:jpql-dsl:3.4.0'
// implementation 'com.linecorp.kotlin-jdsl:jpql-render:3.4.0'
/* spring boot test */
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.withType(KotlinCompile) {
kotlinOptions {
freeCompilerArgs += '-Xjsr305=strict'
jvmTarget = '21'
}
}
tasks.named('test') {
useJUnitPlatform()
}
Front (package.json)
"dependencies": {
"pinia": "^2.1.7",
"vue": "^3.4.21",
"vue-router": "^4.0.13"
},
"devDependencies": {
"@babel/eslint-parser": "^7.24.1",
"@vitejs/plugin-vue": "^5.0.4",
"axios": "1.6.8",
"devextreme": "22.2.11",
"devextreme-vue": "22.2.11",
"eslint": "^9.0.0",
"eslint-plugin-vue": "^9.24.1",
"vite": "^5.2.0"
}
๐ ์๊ฐ
๋ด๊ฐ ๊ฐ๋ฐ ํ๋ฉด์ ํ ๋ฒ์ฏค ์ฌ์ฉํด๋ณด๊ณ ์ถ์ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ํ๋ ค๊ณ ์๊ฐํ๋ค. ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธฐ์กด์๋ ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ฒ์๋ ๋๋ฉ์ธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค. ๋คํํ ๋๋ฉ์ธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐํด๋ ๋๋ค๊ณ ํ๋จ์ ํด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๊ธฐํ ์ค์ด๊ธฐ ๋๋ฌธ์ ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง ํ์ธ๋ง ํ๊ณ ์์ง ๋ฉ์ถฐ ์๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[QueryDSL] SQLQueryFactory ์ฌ์ฉ์ LocalDate ํ์ ๋ฐํ์ ๋ ์ง ์๋ฌ (0) | 2024.06.01 |
---|---|
Spring boot + vue ํ๋ก์ ํธ (2) (0) | 2024.04.06 |
[JPA] Spring boot 3.x.x ์์ QueryDsl Date Type ์ฌ์ฉ ๋ฐฉ๋ฒ (0) | 2024.01.09 |
[Spring] Spring boot 3.x.x ๋ฒ์ ๋ง์ด๊ทธ๋ ์ด์ ๋ด์ฉ ์ ๋ฆฌ (0) | 2023.12.31 |
[JPA] save() ์ saveAndFlush() ์ฐจ์ด์ ์ ๋ฆฌ (0) | 2023.10.29 |