Thumbnail
BEST
개발 · 프로그래밍 백엔드

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링) 대시보드

(4.9)
95개의 수강평 ∙  1,628명의 수강생
77,000원

월 15,400원

5개월 할부 시
지식공유자: 최태현
총 48개 수업 (6시간 22분)
수강기한: 
무제한
수료증: 발급
난이도: 
입문
-
초급
-
중급이상
지식공유자 답변이 제공되는 강의입니다
폴더에 추가 공유
최태현 프로필
안녕하세요! Kotlin + JPA 를 함께 사용할 때 주의할 점을 추가적으로 공유드립니다!!
최태현 2022.08.19

안녕하세요! 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가지>에도 업로드 되었습니다!)