메인 콘텐츠로 이동하기

Java Persistence with Spring Data and Hibernate

저자 : Cătălin Tudose
출간일 : 2023년 1월

주제 #

자바 영속성을 하이버네이트와 Spring Data 기반으로 설명한다.책에 기대했던 내용은 영속성을 다루는 실무 위주의 다양한 패턴을 기대했지만 그보다 영속성 도구인 하이버네이트와 Spring Data를 깊이 있게 다루는 책이다. 물론 기본적인 개념들은 모두 포함하고 있다.

다루는 내용 #

국내의 자바 ORM 표준 JPA 프로그래밍 - 김영한, ‘JPA 프로그래밍 입문’ - 최범균 두 책에서 잘 다루고 있는 매핑과 같이 겹치는 내용은 제외했다.

영속성을 다루는 강의나 책은 Spring Boot를 시작으로 H2, MySQL을 JDBC와 JPA, Spring Data JPA 순으로 다루는 경우가 대부분이지만 이 책은 이론과 개념을 더 다룬다. 관계형 데이터베이스와 OOP의 임피던스 불일치를 설명하고, 대량의 데이터를 다룰 때 Spring Data 도구가 Hibernate와 JPA에 비해 성능이 불리하므로 생산성과 성능 사이에서 상황에 맞게 선택하는 것을 제안한다.

특히 읽는데 오래 걸리고 마음에 들었던 부분은 트랜잭션과 영속성 컨텍스트와 영속성 캐시를 함께 설명해주는 부분이었다.

JDBC를 직접 다루는 것과 JdbcTemplate을 사용하는 것은 종종 사용해봤지만 Spring Data JDBC는 이 책으로 처음 접했다. 당연히 JdbcTemplate을 편하게 다루는 도구라고 생각했는데 Spring Data JPA처럼 편의성을 더한 JDBC 도구였다. 이 책은 JdbcTemplate을 다루지 않는다.

이 책에서는 관계 매핑에 대한 페치 전략을 ‘자바 ORM 표준 JPA 프로그래밍’ 책의 설명처럼 전체를 Lazy로 설정하고 필요할 때 튜닝하는 방향으로 권장한다. 최범균님은 유튜브 영상에서 관계를 최소한으로 줄이고 임베디드를 적극 사용 중이라고 공유하셨다.

예제 코드 #

실습은 자바 프로젝트에 하이버네이트 구성을 붙여 영속성 레이어를 만든 후, 간단한 테스트 메서드를 클라이언트 코드로 사용하여 검증하고, Spring Data JPA로 동일한 동작을 만들어 줄어든 코드와 구성을 확인한다. 하이버네이트에서 JPA 스펙을 벗어난 세밀한 조정을 다루기도 한다.

책의 코드는 자바 17, 스프링 부트 2.x를 기준으로 되어있다.

영속성 레이어의 동작을 확인하기 위한 테스트 코드들이 잘 작성되어 있다. 쿼리가 실행되는 부분을 보면 테스트 코드를 약간 수정해야 의도한 검증을 수행해볼 수 있는 부분도 있다.

마무리 #

위키북스에서 출간한 자바 퍼시스턴스 프로그래밍 완벽 가이드 - 트랜스메이트 역 번역서가 존재한다. 약간 충동적으로 읽은 책인데 국내 서적과 조금 다른 부분을 다뤄서 만족스러웠다.

C#과 LINQ, EF를 사용했던 경험으로 JPA와 쿼리 작성 경험을 비교해봤다. Spring Data JPA는 코드양을 대폭 줄여주고 더 나은 경험을 제공해준다. 큰 장점이지만 성능 비교를 보니 Spring Data JPA 마법을 사용했다면 성능 모니터링이 필수라고 생각됐다.

스프링 부트2로 진행했던 프로젝트에서 쿼리 작성에 Querydsl이 큰 도움을 줬었다. LINQ에 비해 아쉽지만 가려운 부분을 해소해주기엔 충분했다. 그런데 유지보수가 느리고 새로 포크된 OpenFeign에서 관리하는 버전은 업데이트가 활발하지만 지속될지 의문이 생긴다.

Querydsl을 사용하지 않고 SQL 쿼리를 작성하는 유형을 종종 눈여겨봤었다. Java 15 이상에서 Text Blocks과 함께 JdbcTemplate을, 또 다른 유형은 MyBatis를, 그리고 아주 작지만 jOOQ을 사용하는 유형이 있었다. 이 중 관심있는 부분은 JdbcTemplate과 jOOQ인데 책에서 이 내용들을 다루지 않아서 조금 아쉬웠다.