Skip to content

๐Ÿš€ [Kotlin Migration] ์ „์ฒด ๋ฐฑ์—”๋“œ ์ฝ”ํ‹€๋ฆฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋งˆ์Šคํ„ฐ ํŠธ๋ž˜ํ‚น ์ด์Šˆย #582

Description

@ImNM

๐Ÿš€ DuDoong Backend - Java โ†’ Kotlin ์ „์ฒด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

๊ฐœ์š”

Java 17 + Spring Boot 2.7.7 ๊ธฐ๋ฐ˜์˜ DuDoong ๋ฐฑ์—”๋“œ๋ฅผ Kotlin์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Lombok ์ œ๊ฑฐ, Kotlin DSL ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ „ํ™˜, ๊ฐ ๋ชจ๋“ˆ๋ณ„ ์ˆœ์ฐจ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ธฐ์ˆ  ์Šคํƒ

ํ•ญ๋ชฉ ํ˜„์žฌ ์ „ํ™˜ ํ›„
์–ธ์–ด Java 17 Kotlin 1.9.x (JVM 17)
๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ Gradle Groovy DSL Gradle Kotlin DSL
์ฝ”๋“œ ๊ฐ„์†Œํ™” Lombok Kotlin data class / extension
QueryDSL Java APT Kotlin KAPT
์ง๋ ฌํ™” Jackson Jackson + kotlin-module

์•„ํ‚คํ…์ฒ˜ (๋ฉ€ํ‹ฐ๋ชจ๋“ˆ)

DuDoong-Backend
โ”œโ”€โ”€ DuDoong-Common        # JWT, ์–ด๋…ธํ…Œ์ด์…˜, ์˜ˆ์™ธ์ฒ˜๋ฆฌ, DTO, ์œ ํ‹ธ
โ”œโ”€โ”€ DuDoong-Domain        # JPA ์—”ํ‹ฐํ‹ฐ, QueryDSL, ๋„๋ฉ”์ธ ์„œ๋น„์Šค, AOP
โ”œโ”€โ”€ DuDoong-Infrastructure # Redis, S3, SES, Toss Payments, Feign, Slack, NCP
โ”œโ”€โ”€ DuDoong-Api           # REST API, Spring Security, SpringDoc/Swagger
โ”œโ”€โ”€ DuDoong-Socket        # WebSocket ์„œ๋ฒ„
โ””โ”€โ”€ DuDoong-Batch         # Spring Batch (์ •์‚ฐ, ์—‘์…€, ์•Œ๋ฆผ)

๋„๋ฉ”์ธ ์˜์—ญ

  • user / host / auth
  • event / ticket_item
  • order / cart / coupon
  • issuedTicket / settlement
  • comment / statistic

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต

Bottom-up ๋ฐฉ์‹ (์˜์กด์„ฑ ๋‚ฎ์€ ๋ชจ๋“ˆ โ†’ ๋†’์€ ๋ชจ๋“ˆ ์ˆœ์„œ)

Phase 0 (์„ค์ •) โ†’ Phase 1 (Common) โ†’ Phase 2 (Infrastructure)
โ†’ Phase 3 (Domain) โ†’ Phase 4 (Api) โ†’ Phase 5 (Socket) โ†’ Phase 6 (Batch)

์ž‘์—… ์ด์Šˆ ๋ชฉ๋ก

Phase 0: ๋นŒ๋“œ ์„ค์ •

Phase 1: DuDoong-Common

Phase 2: DuDoong-Infrastructure

Phase 3: DuDoong-Domain

Phase 4: DuDoong-Api

Phase 5: DuDoong-Socket

Phase 6: DuDoong-Batch

Kotlin ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•ต์‹ฌ ์›์น™

  1. Lombok โ†’ Kotlin ๋„ค์ดํ‹ฐ๋ธŒ: @Data โ†’ data class, @Builder โ†’ named parameters + copy()
  2. Null Safety: @Nullable / @NonNull โ†’ Kotlin nullable/non-null ํƒ€์ž… ์‹œ์Šคํ…œ
  3. KAPT: QueryDSL Qํด๋ž˜์Šค ์ƒ์„ฑ์„ KAPT๋กœ ์ „ํ™˜
  4. data class JPA ์ฃผ์˜: JPA ์—”ํ‹ฐํ‹ฐ๋Š” @Entity + open class (allOpen plugin ์ ์šฉ)
  5. Jackson kotlin-module: ObjectMapper์— KotlinModule ๋“ฑ๋ก
  6. Spring Security: ์„ค์ • ํด๋ž˜์Šค๋ฅผ Kotlin lambda DSL๋กœ ์ „ํ™˜

์ฃผ์˜์‚ฌํ•ญ

  • ๊ฐ Phase๋ณ„๋กœ ๋…๋ฆฝ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ํ›„ PR
  • ๋ชจ๋“  ๊ธฐ์กด ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ํ™•์ธ ํ›„ ๋จธ์ง€
  • Java โ†” Kotlin ํ˜ผ์žฌ ํ—ˆ์šฉ (๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ธฐ๊ฐ„ ์ค‘)
  • CI (GitHub Actions) ๋นŒ๋“œ ์œ ์ง€

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: Refactor[์ด์Šˆ ๋ชฉ์ ] ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions