Skip to content

Commit 8a4c65e

Browse files
refactor: Global, 도메인, QueryDSL 레포지토리 전반 Kotlin 마이그레이션(#131)
* feat: DateUtil.kt, FilenameUtil.kt, OriginArgumentUtil.kt 구현 * feat: HardDeleteTasklet.kt, BatchJobScheduler.kt 구현 * feat: CustomException.kt 구현 * feat: ErrorCode.kt, CommonErrorCode.kt 구현 * feat: ErrorResponse.kt, FieldErrorResponse.kt 구현 * feat: GlobalExceptionHandler.kt, ValidationExceptionHandler.kt 구현 * feat: CacheNameConstants.kt, CacheKeyConstants.kt, CookieConstants.kt, UrlConstants.kt, BatchConstants.kt 구현 * feat: CacheKeyFactory.kt 구현 * feat: StandardResponse.kt 구현 * feat: OriginExtractionFilter.kt, JwtAuthenticationFilter.kt 구현 * feat: SecurityResponseHandler.kt, CustomAccessDeniedHandler.kt 구현 * feat: CustomAuthenticationEntryPoint.kt 구현 * feat: WebSecurityConfig.kt, WebClientConfig.kt, SchedulerConfig.kt, RedisConfig.kt, RedisCacheConfig.kt, SwaggerConfig.kt 구현 * feat: JpaAuditingConfig.kt, QuerydslConfig.kt, S3Config.kt, TikaConfig.kt, CdnConfig.kt 구현 * feat: BatchJobScheduler.kt, BatchStepConfig.kt 구현 * feat: PomodoroQueryRepository.kt, PomodoroCommandRepository.kt 구현 * feat: StudyLogDailyMissionQueryRepository.kt, StudyLogDailyMissionCommandRepository.kt 구현 * feat: MissionQueryRepository.kt, MissionCommandRepository.kt 구현 * feat: DailyMissionQueryRepository.kt, DailyMissionCommandRepository.kt 구현 * feat: StampQueryRepository.kt, StampCommandRepository.kt 구현 * feat: TripQueryRepository.kt, TripCommandRepository.kt, DailyGoalCommandRepository.kt 구현 * feat: TripReportQueryRepository.kt, TripReportCommandRepository.kt, TripReportStudyLogCommandRepository.kt 구현 * feat: MemberQueryRepository.kt, MemberCommandRepository.kt 구현 * feat: TokenProperties.kt, KakaoOauthProperties.kt, RedisProperties.kt, SwaggerProperties.kt 프로퍼티 추가 * feat: S3Properties.kt, CdnProperties.kt 프로퍼티 추가 * feat: BaseTimeEntity.kt 구현 * feat: Pomodoro.kt, StudyLog.kt, StudyLogDailyMission.kt 구현 * feat: Mission.kt, DailyMission.kt, Stamp.kt 구현 * feat: Trip.kt, TripCategory.kt, DailyGoal.kt 구현 * feat: TripReport.kt, TripReportStudyLog.kt 구현 * feat: Member.kt, MemberCategory.kt, MemberRole.kt, SocialProvider.kt 구현 * feat: EntityExtentions 유틸 클래스를 구현하여, 엔티티 ID nullable 처리를 위한 requireId 확장 함수 추가 * feat: PomodoroQueryRepositoryAdapter.kt, PomodoroCommandRepositoryAdapter.kt 구현 * feat: MemberQueryRepositoryAdapter.kt, MemberCommandRepositoryAdapter.kt 구현 * feat: StudyLogQueryRepositoryAdapter.kt, StudyLogCommandRepositoryAdapter.kt 구현 * feat: StudyLogDailyMissionQueryRepositoryAdapter.kt, StudyLogDailyMissionCommandRepositoryAdapter.kt 구현 * feat: MissionQueryRepositoryAdapter.kt, MissionCommandRepositoryAdapter.kt, DailyMissionQueryRepositoryAdapter.kt, DailyMissionCommandRepositoryAdapter.kt 구현 * feat: StampQueryRepositoryAdapter.kt, StampCommandRepositoryAdapter.kt 구현 * feat: TripQueryRepositoryAdapter.kt, TripCommandRepositoryAdapter.kt, DailyGoalCommandRepositoryAdapter.kt 구현 * feat: TripReportQueryRepositoryAdapter.kt, TripReportCommandRepositoryAdapter.kt, TripReportStudyLogCommandRepositoryAdapter.kt 구현 * feat: MemberQueryRepositoryAdapter.kt, MemberCommandRepositoryAdapter.kt 구현 * refactor: ErrorCode 구현체를 프로퍼티 override 방식으로 변경하고 get 메서드 제거 * refactor: Java 설정 제거 및 Kotlin + QueryDSL(kapt) 기반으로 빌드 구성 전환 * refactor: plugin.jpa 적용에 따라 도메인 Entity를 open class에서 class로 변경 * test: PomodoroFixture.kt를 불변 생성자 기반 구조로 변경 * test: StudyLogFixture.kt를 불변 생성자 기반 구조로 변경 * test: MissionFixture.kt 불변 생성자 기반 구조로 변경 * test: StampFixture.kt 불변 생성자 기반 구조로 변경 * test: TripFixture.kt, DailyGoalFixture.kt, TripReportFixture.kt 불변 생성자 기반 구조로 변경 * test: CreatePomodoroRequestFixture.kt를 불변 생성자 기반 구조로 변경 * test: ConfirmStudyLogImageRequestFixture.kt, CreateStudyLogRequestFixture.kt, PresignStudyLogImageRequestFixture.kt를 불변 생성자 기반 구조로 변경 * test: CreateMissionRequestFixture.kt, UpdateMissionRequestFixture.kt 불변 생성자 기반 구조로 변경 * test: CreateStampRequestFixture.kt, UpdateStampRequestFixture.kt, UpdateStampOrderRequestFixture.kt 불변 생성자 기반 구조로 변경 * test: CreateTripRequestFixture.kt, CreateDailyGoalRequestFixture.kt, CreateTripReportRequestFixture.kt 불변 생성자 기반 구조로 변경 * test: UpdateTripRequestFixture.kt, UpdateDailyGoalRequestFixture.kt 불변 생성자 기반 구조로 변경 * test: PresignTripReportImageRequestFixture.kt, ConfirmTripReportImageRequestFixture.kt 불변 생성자 기반 구조로 변경 * chore: StudytripApplication.kt, StudytripApplicationTests.kt 추가 * chore: main java 패키지 삭제 (Kotlin 마이그레이션 완료) * chore: test java 패키지 삭제 (Kotlin 마이그레이션 완료) * chore: build.gadle에 commons-lang3 3.20.0 추가 (전이 의존성 CVE 대응) * chore: build.gradle에서 Lombok 의존성 및 설정 제거 * fix: SpEL 호출 오류 해결을 위해 CacheKeyFactory 메서드에 @JvmStatic 추가
1 parent d59e2fb commit 8a4c65e

383 files changed

Lines changed: 4168 additions & 5076 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build.gradle

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
plugins {
2-
id 'java'
32
id 'org.springframework.boot' version '3.5.0'
43
id 'io.spring.dependency-management' version '1.1.7'
54
id 'com.diffplug.spotless' version '8.1.0'
65
id 'org.flywaydb.flyway' version '11.11.2'
76
id 'org.jetbrains.kotlin.jvm' version '2.2.21'
87
id 'org.jetbrains.kotlin.plugin.spring' version '2.2.21'
98
id 'org.jetbrains.kotlin.plugin.jpa' version '2.2.21'
10-
// id 'org.jetbrains.kotlin.kapt' version '2.2.21'
9+
id 'org.jetbrains.kotlin.kapt' version '2.2.21'
1110
}
1211

1312
group = 'com.ject'
@@ -19,24 +18,20 @@ java {
1918
}
2019
}
2120

22-
configurations {
23-
compileOnly {
24-
extendsFrom annotationProcessor
25-
}
26-
}
27-
2821
repositories {
2922
mavenCentral()
3023
}
3124

3225
dependencies {
26+
// Spring Boot Starters
3327
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
3428
implementation 'org.springframework.boot:spring-boot-starter-web'
3529
implementation 'org.springframework.boot:spring-boot-starter-batch'
3630
implementation 'org.springframework.boot:spring-boot-starter-webflux'
37-
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0")
38-
compileOnly 'org.projectlombok:lombok'
39-
annotationProcessor 'org.projectlombok:lombok'
31+
32+
// Swagger (SpringDoc UI 문서화)
33+
implementation 'org.apache.commons:commons-lang3:3.20.0'
34+
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
4035

4136
// Validation
4237
implementation 'org.springframework.boot:spring-boot-starter-validation'
@@ -46,19 +41,14 @@ dependencies {
4641

4742
// JWT
4843
implementation("io.jsonwebtoken:jjwt-api:0.12.3")
49-
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.3")
50-
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.3")
44+
runtimeOnly('io.jsonwebtoken:jjwt-impl:0.12.3')
45+
runtimeOnly('io.jsonwebtoken:jjwt-jackson:0.12.3')
5146

52-
// Querydsl
47+
// Querydsl (Kotlin용 – kapt 추가)
5348
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
54-
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
55-
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
56-
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
57-
58-
// Querydsl (Kotlin용 – kapt 추가, Java용 Querydsl과 충돌이 발생하여 주석 처리)
59-
// kapt "com.querydsl:querydsl-apt:5.0.0:jakarta"
60-
// kapt "jakarta.annotation:jakarta.annotation-api"
61-
// kapt "jakarta.persistence:jakarta.persistence-api"
49+
kapt 'com.querydsl:querydsl-apt:5.0.0:jakarta'
50+
kapt 'jakarta.annotation:jakarta.annotation-api'
51+
kapt 'jakarta.persistence:jakarta.persistence-api'
6252

6353
// Redis
6454
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
@@ -74,30 +64,29 @@ dependencies {
7464
// AWS SDK
7565
implementation 'software.amazon.awssdk:s3:2.25.33'
7666
implementation 'software.amazon.awssdk:auth:2.25.33' // IAM 인증 관련
77-
implementation 'software.amazon.awssdk:sts:2.25.33' // STS (IAM Role 인증 필요시)
67+
implementation 'software.amazon.awssdk:sts:2.25.33' // STS (IAM Role 인증 필요시)
7868

7969
// Tika : 이미지 타입 검사
8070
implementation 'org.apache.tika:tika-core:2.5.0'
8171

8272
// Kotlin
83-
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
84-
implementation "org.jetbrains.kotlin:kotlin-reflect"
73+
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
74+
implementation 'org.jetbrains.kotlin:kotlin-reflect'
8575
implementation 'io.projectreactor.kotlin:reactor-kotlin-extensions'
86-
testImplementation "org.jetbrains.kotlin:kotlin-test"
76+
testImplementation 'org.jetbrains.kotlin:kotlin-test'
8777

8878
// Jackson
89-
implementation "com.fasterxml.jackson.module:jackson-module-kotlin"
79+
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
9080
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
9181

92-
9382
// Test
9483
testImplementation 'org.springframework.boot:spring-boot-starter-test'
9584
testImplementation 'org.springframework.batch:spring-batch-test'
9685
testImplementation 'org.springframework.security:spring-security-test'
9786
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
9887
testImplementation 'org.mockito:mockito-core'
9988
testImplementation 'org.mockito:mockito-junit-jupiter'
100-
testImplementation "org.mockito.kotlin:mockito-kotlin:6.1.0"
89+
testImplementation 'org.mockito.kotlin:mockito-kotlin:6.1.0'
10190
}
10291

10392
jar.enabled = false // 일반 JAR 파일 생성 비활성화
@@ -107,15 +96,6 @@ tasks.named('test') {
10796
}
10897

10998
spotless {
110-
java {
111-
target("**/*.java") // 모든 .java 파일에 적용
112-
importOrder() // import 정렬
113-
removeUnusedImports() // 사용하지 않는 import 제거
114-
trimTrailingWhitespace() // 공백 제거
115-
endWithNewline() // 파일 끝부분 개행 처리
116-
googleJavaFormat().aosp() // google java format 스타일 적용
117-
}
118-
11999
kotlin {
120100
target("**/*.kt") // 모든 .kt 파일에 적용
121101
ktlint("1.8.0") // Kotlin 코드 스타일 검사 및 자동 포맷팅
@@ -126,8 +106,25 @@ spotless {
126106

127107
// pre-commit spotless check script
128108
// 작성한 pre-commit 스크립트를 ./git/hooks/pre-commit 으로 덮어쓰기
129-
tasks.register('updateGitHooks', Copy) {
130-
from 'scripts/pre-commit'
131-
into '.git/hooks'
109+
tasks.register("updateGitHooks", Copy) {
110+
from "scripts/pre-commit"
111+
into ".git/hooks"
112+
}
113+
114+
// compileKotlin 작업 시 updateGitHooks task 수행
115+
compileKotlin.dependsOn updateGitHooks
116+
117+
// Kotlin 소스셋에 QClass 경로 추가
118+
sourceSets {
119+
main {
120+
kotlin {
121+
srcDirs += "$buildDir/generated/source/kapt/main"
122+
}
123+
}
124+
}
125+
126+
kapt {
127+
arguments {
128+
arg("querydsl.useFields", "false")
129+
}
132130
}
133-
compileJava.dependsOn updateGitHooks // 컴파일 자바 작업 시 updateGitHooks task 수행

src/main/java/com/ject/studytrip/StudytripApplication.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/annotation/ClientOrigin.java

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/batch/scheduler/BatchJobScheduler.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/batch/tasklet/HardDeleteTasklet.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/common/constants/CacheKeyConstants.java

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/common/constants/CacheNameConstants.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/common/constants/CookieConstants.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/common/constants/UrlConstants.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/main/java/com/ject/studytrip/global/common/entity/BaseTimeEntity.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)