티스토리 뷰
사이드 프로젝트로 간단한 채팅 시스템을 만들어보기로 했다.
나는 백엔드 담당이고 kotlin, spring boot로 진행하기로 했다.
gradle 설정하기
업무에서는 maven기반으로 개발하고 있어서 사이드나 다른 신규 프로젝트를 하게 될 경우에는 가급적 gradle로 진행하려고 한다.
이유는,
- maven과 gradle의 차이를 작년 프로젝트를 진행하면서 비교한 결과 (그 문서 작성을 왜 안했을까..) 결론적으로는 maven이 출시된지 오래됐고, 레퍼런스도 많지만 빌드 속도 측면에서 gradle이 월등했고, 세부 커스텀도 가능한 점이 있었다.
- 실제 업무에서도 모듈이 많거나 라이브러리가 많은 경우 maven으로 빌드했을 때 약 2분 가량 소요되고 있으며, 이것도 최적화를 한다면 속도를 줄일 수 있겠지만 동일한 라이브러리 사용 기준으로 했을 때 maven과 gradle 빌드 속도를 비교한 자료를 어디 레퍼런스에서 제공했던 것을 참고한 결과 (찾아서 문서 수정 예정) gradle이 빌드 속도가 훨씬 빨랐다.
gradle 빌드 속도가 maven보다 빠른 이유
- maven도 .m2 폴더에 캐시를 사용하지만, maven은 빌드할 때마다 처음부터 전부 다시 빌드를 진행하게 되고,
- gradle은 한번 캐시된 라이브러리는 재빌드를 하지 않고 신규로 추가된 라이브러리만 빌드하여 속도에서 차이가 나게된다.
- 이 구조를 보면서 느낀 건 jpa 더티체킹과 동일한 매커니즘으로 보였다. jpa 더티체킹의 경우에도 이미 기존에 있는 데이터라면 I/O 쿼리가 발생되지 않고 신규 데이터 한정으로 I/O 쿼리가 발생한다.
그렇다고 gradle 관리가 더 쉽냐고 한다면 그것도 아니다. 오히려 gradle이 세부 커스텀을 할 수 있기 때문에 더 능숙한 관리 능력이 요구된다.
나는 다른 것보다 빌드 속도가 같은 라이브러리 사용 하는 기준으로 gradle이 더 빠르기 때문에 우선 gradle로 설정한다.
kotlin을 사용하는 경우에는 gradle설정을 groovy DSL기반이 아닌 kotlin DSL로 사용한다. (gradle 레퍼런스 참고)
groovy DSL과 kotlin DSL 파일을 동시 사용할 수 없으니 둘 중 하나만 사용해서 빌드한다.
이 레퍼런스에서 빌드 오류 시 트러블 슈팅에 대한 내용도 안내되고 있어서 자주 참고하게 될 것 같아 아예 포스팅한다.
초기 설정은 spring initialzr를 통해 추가한다.
사용하고자 하는 라이브러리를 확인해서 추가한다. 다 추가한 것은 아니지만 필수로 쓸 것들을 우선 추가했다.
# build.gradle.kts
plugins {
id("org.springframework.boot") version "3.3.1"
id("io.spring.dependency-management") version "1.1.5"
kotlin("plugin.jpa") version "1.9.24"
kotlin("jvm") version "1.9.24"
kotlin("plugin.spring") version "1.9.24"
}
group = "com.chat"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.flywaydb:flyway-core")
implementation("org.flywaydb:flyway-mysql")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.springframework.boot:spring-boot-starter-web")
runtimeOnly("com.mysql:mysql-connector-j")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
kotlin {
jvmToolchain {
(this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(17))
}
sourceSets["main"].kotlin.srcDirs("src/main/kotlin")
sourceSets["test"].kotlin.srcDirs("src/test/kotlin")
}
tasks.withType<Test> {
useJUnitPlatform()
}
'tech > Backend' 카테고리의 다른 글
kotlin, spring boot로 sse구현하기(2) (0) | 2024.06.30 |
---|---|
[Spring Boot] Automatically generate OpenAPI3 documentation with Kotlin and Spring Boot 3 (0) | 2023.03.18 |
MySQL Installation with MacOS (0) | 2023.03.12 |
최근에 올라온 글
TAG
- swagger
- binary search
- springboot
- Prettier
- Front
- maven
- swagger3
- Java17
- mysql_secure_installation
- eslint
- SSR
- routing
- algorithm
- sveltekit
- CSR
- 알고리즘
- 8.0.32
- WebSocket
- 아키텍트
- Kotlin
- gradle
- 이진탐색
- 프로그래머스
- sw아키텍처
- svelte
- open api3
- mysql
- spring boot3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함