์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

์‹ค์ „! ์ฝ”ํ‹€๋ฆฐ๊ณผ ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ๋„์„œ๊ด€๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ (Java ํ”„๋กœ์ ํŠธ ๋ฆฌํŒฉํ† ๋ง)

Java + Spring Boot๋กœ ๋งŒ๋“ค์–ด์ง„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Kotlin + Spring Boot๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•˜๊ณ  ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ Junit5, SQL, JPA, Querydsl ์„ ์‚ฌ์šฉํ•  ๋ฟ ์•„๋‹ˆ๋ผ, ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ ๊ด€์ ์—์„œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์˜ ์žฅ๋‹จ์ ์„ ๋‹ค๋ฃจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

(5.0) ์ˆ˜๊ฐ•ํ‰ 153๊ฐœ

์ˆ˜๊ฐ•์ƒ 2,271๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

์ตœํƒœํ˜„๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€

์•ˆ๋…•ํ•˜์„ธ์š”! Kotlin + JPA ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต์œ ๋“œ๋ฆฝ๋‹ˆ๋‹ค!!

์•ˆ๋…•ํ•˜์„ธ์š”! Kotlin๊ณผ JPA๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณ ๋ คํ•  ๋‚ด์šฉ์ด ์žˆ์–ด ๋ง์”€๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ ๋‚ด์šฉ์€ ๋ฐ”๋กœ, build.gradle์— ์•„๋ž˜์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์…”์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค!

 

plugins {
  id "org.jetbrains.kotlin.plugin.allopen" version "1.6.21"
}

// plugins, dependencies์™€ ๊ฐ™์€ Level (์ฆ‰ build.gradle ์ตœ์ƒ๋‹จ)
allOpen {
  annotation("javax.persistence.Entity")
  annotation("javax.persistence.MappedSuperclass")
  annotation("javax.persistence.Embeddable")
}

 

๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค!

์•„์‹œ๋‹ค์‹œํ”ผ, Kotlin์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Class๋„ final, ํ•จ์ˆ˜๋„ final์ž…๋‹ˆ๋‹ค!! (์ฆ‰, ์ƒ์†๊ณผ ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ๋ง‰์•„๋‘์—ˆ์Šต๋‹ˆ๋‹ค!)

ํ•˜์ง€๋งŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Proxy Lazy Fetching์„ ์™„์ „ํžˆ ์ด์šฉํ•˜๋ ค๋ฉด (27๊ฐ•์—์„œ Lazy Fetching์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!) ํด๋ž˜์Šค๊ฐ€ ์ƒ์† ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!! ์ œ๊ฐ€ ํ™•์ธํ•ด๋ณธ ๋ฐ”๋กœ๋Š” @OneToMany์— ์žˆ์–ด์„œ๋Š” Lazy Fetching์ด ๋™์ž‘ํ•˜์ง€๋งŒ @ManyToOne์— ๋Œ€ํ•ด์„œ๋Š” Lazy Fetching ์˜ต์…˜์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฃผ๋”๋ผ๋„ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ all-open ๊ธฐ๋Šฅ์„ ํ†ตํ•ด @Entity ํด๋ž˜์Šค๋“ค์€ Decompile์„ ํ–ˆ์„ ๋•Œ๋„ class๊ฐ€ ์—ด๋ ค ์žˆ๊ฒŒ๋” ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ , ์œ„์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐ”๋กœ ๊ทธ๋Ÿฐ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ณธ ๊ฐ•์˜์—์„œ๋Š” @ManyToOne Lazy Fetching์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋‹ค๋ณด๋‹ˆ,  ํ•ด๋‹น plugin์ด ๊ฐ•์˜์—์„œ ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์กฐ๊ธˆ ๋” ๋งŽ์€ ๋‚ด์šฉ์„ ๋†“์น˜์ง€ ์•Š๊ณ  ๊ผผ๊ผผํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‡์‹ค์ œ ํ”„๋กœ์ ํŠธ์„œ๋Š” ํ•ด๋‹น plugin ์„ค์ •์„ ๊ผญ ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!! ๐Ÿ™

 

 

(๋™์ผํ•œ ๋‚ด์šฉ์˜ ๊ธ€์€ <14๊ฐ•. Kotlin๊ณผ JPA๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์ด์•ผ๊ธฐ๊ฑฐ๋ฆฌ 3๊ฐ€์ง€>์—๋„ ์—…๋กœ๋“œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!)

 

๋Œ“๊ธ€
์•„์ง ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€์ด ์—†์–ด์š”

์›” โ‚ฉ15,400

5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

โ‚ฉ77,000