์ค์ ! ์ฝํ๋ฆฐ๊ณผ ์คํ๋ง ๋ถํธ๋ก ๋์๊ด๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐํ๊ธฐ (Java ํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง)
Java + Spring Boot๋ก ๋ง๋ค์ด์ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ Kotlin + Spring Boot๋ก ๋ฆฌํฉํ ๋ง ํ๊ณ ์ถ๊ฐ ์๊ตฌ์ฌํญ์ ๊ตฌํํฉ๋๋ค. ์ด ๊ณผ์ ์์ Junit5, SQL, JPA, Querydsl ์ ์ฌ์ฉํ ๋ฟ ์๋๋ผ, ์ค๊ณ ๋ฐ ๊ตฌํ ๊ด์ ์์ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ฅ๋จ์ ์ ๋ค๋ฃจ๊ฒ ๋ฉ๋๋ค.
์๊ฐ์ 2,280๋ช
๋์ด๋ ์ด๊ธ
์๊ฐ๊ธฐํ ๋ฌด์ ํ

์๋ ํ์ธ์! 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๊ฐ์ง>์๋ ์ ๋ก๋ ๋์์ต๋๋ค!)






