이책에서다루는내용
스프링,스프링부트,하이버네이트를사용해자바에서데이터유지하는방법
더티트래킹활성화방법
다대다연관관계를효율적으로구성하고List와Set선택을결정하는방법
MySQL을통한데이터스트리밍방법
단일SELECT로부모측과연관관계를효율적으로가져오는방법
포크(fork)/조인(join)프레임워크를통한배치파일처리방법
컬렉션및커넥션작업방법
쿼리,잠금,스키마,하이버네이트타입에대한처리방법
지은이의말
간단히말해이책은스프링부트애플리케이션의자바영속성(Persistence)성능에대한모범사례모음집이다.모범사례는120개이상의항목을통해제공되며,다음과같이3가지범주로분류된다.
첫째,엔터티정의,관계매핑,쿼리작성,데이터가져오기,식별자(identifier)생성기(generator)선택등에대한모범사례를다룬다.주로스프링부트기본제공아티팩트(artifact)로도움을받을수없는영역과수정이어렵고도메인모델에상당한변경을필요로하는심각한성능저하방지를다룬다.
둘째,스프링부트지원기능(더정확하게는스프링데이터)사용을위한모범사례를다룬다.기본지원기능의묘책을활용하다보면성능이저하될수있다.예를들어OSIV(OpenSessioninView),오프셋페이지네이션(offsetpagination),커밋후후크(post-commitshook),@Transactional에대한오해는다루는주제중일부에불과하다.여러분은이범위항목들에뛰어들준비가돼있고흥미를느낄것이라확신한다.
셋째,애플리케이션의성능을유지할수있는몇가지하이버네이트기능을자세히알아본다.기본적으로스프링데이터는영속성공급자로,하이버네이트를사용하기에스프링데이터를통해하이버네이트를활용할수있을뿐만아니라하이버네이트자체로도활용할수있다.하이버네이트프록시(proxy)를통한자식측부모연관관계채우기(populating),더티트래킹(DirtyTracking),커넥션(connection)획득지연,지연로딩(lazyloading)속성,자연키(naturalkey)사용과같은좋은기능은다루는항목중일부에불과하다.
이책의전제조건은매우명확하다.IDE(예:NetBeans,Eclipse,IntelliJIDEA,VisualStudio등),MySQL및PostgreSQL이필요하다.선택적으로다른데이터베이스벤더(예:오라클,SQL서버등)를설치하거나사용할수있다.
옮긴이의말
스프링프레임워크,특히최근클라우드네이티브(cloud-native)기반애플리케이션구축에많이사용되는스프링부트기반에서데이터액세스기술로인기를끌고있는것이바로JPA(JavaPersistenceAPI)다.개별데이터베이스시스템마다네이티브(native)쿼리를작성해야하는MyBatis나코드에직접쿼리를작성하는JDBC기반개발은DBMS대상을확대하기가쉽지않지만,JPA의경우간단한설정변경만으로여러DBMS와버전을손쉽게지원하는특징을갖는다.무엇보다도SQL중심이아닌객체지향적설계및개발방식을지원한다.
그러나JPA는기존에익숙하던방식이나직관적인다른데이터액세스기술과는달리내부적인처리메커니즘을어느정도알고동작방식을이해해야어려움없이활용할수있다.즉,학습곡선(learningcurve)이가파르다.특히잘못설계된엔터티(entity)는성능에많은영향을주기도하고,정확하게설정되지않은연관관계(association)는예외가발생하는등의난항을겪는경우가많다.
이책은JPA에대한다양한측면,특히성능과관련된이슈와이에대한해결방법을다룬다.다만JPA의기초를다루지않고JPA사용에대한기본지식을갖고있어야볼수있는수준으로,JPA를이미사용하고있는개발자를위한레시피(recipe)와모범사례(bestpractices)를모았다.실용적인레시피를중심으로구성되고,각레시피는성능사례또는성능관련사례를중점적으로다루고있으며여러스타일(순수하이버네이트사용,스프링데이터JPA등)로작성된온전한많은예제를포함하고있다.