목록 보기
Spring Boot & JPA에서 Java와 Kotlin을 함께 사용하기
백엔드

Spring Boot & JPA에서 Java와 Kotlin을 함께 사용하기

인프런
인프런
2024년 1월 10일

두줄요약

JPA 친화적인 Entity는 Java로, 비즈니스 로직은 Kotlin으로 분리한 이유와 구성을 소개했습니다. 자체 nullability 어노테이션과 ArchUnit으로 Java-Kotlin 간 null 안전성을 보완했습니다.

선택 이유

  • Java의 JPA·QueryDSL 친화성과 Kotlin의 null safety·편의 문법 동시 활용
  • TypeScript 중심 개발 경험을 가진 구성원의 Kotlin 학습 부담 완화
  • Kotlin 단독 사용 시 JPA의 변경 감지·지연 로딩과 불변성 지향의 충돌 고려

구조와 흐름

  • Entity를 포함한 core 모듈은 Java, 비즈니스 로직 모듈은 Kotlin으로 분리
  • Java Entity의 Lombok getter를 Kotlin에서 참조하지 않도록 core 내부 의존 방향 제한
  • JPA Entity와 복잡한 조회 영역의 Java 기반 호환성 유지

해결 방법

  • Java Entity의 필드·메서드·인자에 자체 @NonNull·@Nullable 어노테이션 적용
  • RUNTIME retention으로 Kotlin의 Platform Type null 안전성과 Fixture Monkey의 null 주입 동시 지원
  • ArchUnit 테스트로 @Column 필드와 Entity 메서드의 nullability 어노테이션 누락 검증

주의할 점

  • JetBrains nullability 어노테이션은 CLASS retention이어서 런타임 리플렉션 기반 도구에서 확인 불가
  • Java와 Kotlin 혼합 모듈에서 Lombok 어노테이션 처리보다 Kotlin 컴파일이 먼저 실행되는 순서 문제
  • 공통 core 모듈의 Spring 등 외부 패키지 의존 최소화 필요

다음 읽기

#Kotlin 주제를 다룬 다른 회사 글

우당탕탕 Kotlin 전환기

Java 백엔드 프로젝트를 Kotlin으로 전환하며 겪은 전략, 호환성 이슈, 실무 적용 포인트를 정리했습니다. 전환 후 가독성과 간결함이 좋아졌지만, 리뷰와 DB 기본값 같은 운영 이슈도 함께 살펴보았습니다.

딜리셔스
딜리셔스
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...