이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
|
1장. JPA 소개1.1 SQL과 문제점1.1.1 반복, 반복 그리고 반복1.1.2 SQL에 의존적인 개발1.1.3 JPA와 문제 해결1.2 패러다임의 불일치1.2.1 상속1.2.2 연관관계1.2.3 객체 그래프 탐색1.2.4 비교1.2.5 정리1.3 JPA란 무엇일까?1.3.1 JPA 소개1.3.2 왜 JPA를 사용해야 하는가?1.4 정리2장. JPA 시작2.1 이클립스 설치와 프로젝트 불러오기2.2 H2 데이터베이스 설치2.3 라이브러리와 프로젝트 구조2.3.1 메이븐과 사용 라이브러리 관리2.4 객체 매핑 시작2.5 persistence.xml 설정2.5.1 데이터베이스 방언2.6 애플리케이션 개발2.6.1 엔티티 매니저 설정2.6.2 트랜잭션 관리2.6.3 비즈니스 로직2.6.4 JPQL2.7 정리3장. 영속성 관리3.1 엔티티 매니저 팩토리와 엔티티 매니저3.2 영속성 컨텍스트란?3.3 엔티티의 생명주기3.4 영속성 컨텍스트의 특징3.4.1 엔티티 조회3.4.2 엔티티 등록3.4.3 엔티티 수정3.4.4 엔티티 삭제3.5 플러시3.5.1 플러시 모드 옵션3.6 준영속3.6.1 엔티티를 준영속 상태로 전환: detach( )3.6.2 영속성 컨텍스트 초기화: clear( )3.6.3 영속성 컨텍스트 종료: close( )3.6.4 준영속 상태의 특징3.6.5 병합: merge( )3.7 정리4장. 엔티티 매핑4.1 @Entity4.2 @Table4.3 다양한 매핑 사용4.4 데이터베이스 스키마 자동 생성4.5 DDL 생성 기능4.6 기본 키 매핑4.6.1 기본 키 직접 할당 전략4.6.2 IDENTITY 전략4.6.3 SEQUENCE 전략4.6.4 TABLE 전략4.6.5 AUTO 전략4.6.6 기본 키 매핑 정리4.7 필드와 컬럼 매핑: 레퍼런스4.7.1 @Column4.7.2 @Enumerated4.7.3 @Temporal4.7.4 @Lob4.7.5 @Transient4.7.6 @Access4.8 정리실전 예제 1. 요구사항 분석과 기본 매핑요구사항 분석도메인 모델 분석테이블 설계엔티티 설계와 매핑데이터 중심 설계의 문제점5장. 연관관계 매핑 기초5.1 단방향 연관관계5.1.1 순수한 객체 연관관계5.1.2 테이블 연관관계5.1.3 객체 관계 매핑5.1.4 @JoinColumn5.1.5 @ManyToOne5.2 연관관계 사용5.2.1 저장5.2.2 조회5.2.3 수정5.2.4 연관관계 제거5.2.5 연관된 엔티티 삭제5.3 양방향 연관관계5.3.1 양방향 연관관계 매핑5.3.2 일대다 컬렉션 조회5.4 연관관계의 주인5.4.1 양방향 매핑의 규칙: 연관관계의 주인5.4.2 연관관계의 주인은 외래 키가 있는 곳5.5 양방향 연관관계 저장5.6 양방향 연관관계의 주의점5.6.1 순수한 객체까지 고려한 양방향 연관관계5.6.2 연관관계 편의 메소드5.6.3 연관관계 편의 메소드 작성 시 주의사항5.7 정리실전 예제 2. 연관관계 매핑 시작일대다, 다대일 연관관계 매핑객체 그래프 탐색6장. 다양한 연관관계 매핑6.1 다대일6.1.1 다대일 단방향 [N:1]6.1.2 다대일 양방향 [N:1, 1:N]6.2 일대다6.2.1 일대다 단방향 [1:N]6.2.2 일대다 양방향 [1:N, N:1]6.3 일대일 [1:1]6.3.1 주 테이블에 외래 키6.3.2 대상 테이블에 외래 키6.4 다대다 [N:N]6.4.1 다대다: 단방향6.4.2 다대다: 양방향6.4.3 다대다: 매핑의 한계와 극복, 연결 엔티티 사용6.4.4 다대다: 새로운 기본 키 사용6.4.5 다대다 연관관계 정리6.5 정리실전 예제 3. 다양한 연관관계 매핑일대일 매핑다대다 매핑7장. 고급 매핑7.1 상속 관계 매핑7.1.1 조인 전략7.1.2 단일 테이블 전략7.1.3 구현 클래스마다 테이블 전략7.2 @MappedSuperclass7.3 복합 키와 식별 관계 매핑7.3.1 식별 관계 vs 비식별 관계7.3.2 복합 키: 비식별 관계 매핑7.3.3 복합 키: 식별 관계 매핑7.3.4 비식별 관계로 구현7.3.5 일대일 식별 관계7.3.6 식별, 비식별 관계의 장단점7.4 조인테이블7.4.1 일대일 조인테이블7.4.2 일대다 조인테이블7.4.3 다대일 조인테이블7.4.4 다대다 조인테이블7.5 엔티티 하나에 여러 테이블 매핑7.6 정리실전 예제 4. 상속 관계 매핑상속 관계 매핑@MappedSuperclass 매핑8장. 프록시와 연관관계 관리8.1 프록시8.1.1 프록시 기초8.1.2 프록시와 식별자8.1.3 프록시 확인8.2 즉시 로딩과 지연 로딩8.2.1 즉시 로딩8.2.2 지연 로딩8.2.3 즉시 로딩, 지연 로딩 정리8.3 지연 로딩 활용8.3.1 프록시와 컬렉션 래퍼8.3.2 JPA 기본 페치 전략8.3.3 컬렉션에 FetchType.EAGER 사용 시 주의점8.4 영속성 전이 - CASCADE8.4.1 영속성 전이: 저장8.4.2 영속성 전이: 삭제8.4.3 CASCADE의 종류8.5 고아 객체8.6 영속성 전이 + 고아 객체, 생명주기8.7 정리실전 예제 5. 연관관계 관리글로벌 페치 전략 설정영속성 전이 설정9장. 값 타입9.1 기본값 타입9.2 임베디드 타입(복합 값 타입)9.2.1 임베디드 타입과 테이블 매핑9.2.2 임베디드 타입과 연관관계9.2.3 @AttributeOverride: 속성 재정의9.2.4 임베디드 타입과 null9.3. 값 타입과 불변 객체9.3.1 값 타입 공유 참조9.3.2 값 타입 복사9.3.3 불변 객체9.4. 값 타입의 비교9.5. 값 타입 컬렉션9.5.1 값 타입 컬렉션 사용9.5.2 값 타입 컬렉션의 제약사항9.6 정리실전 예제 6. 값 타입 매핑실전 예제 정리10장. 객체지향 쿼리 언어10.1 객체지향 쿼리 소개10.1.1 JPQL 소개10.1.2 Criteria 쿼리 소개10.1.3 QueryDSL 소개10.1.4 네이티브 SQL 소개10.1.5 JDBC 직접 사용, 마이바티스 같은 SQL 매퍼 프레임워크 사용10.2 JPQL10.2.1 기본 문법과 쿼리 API10.2.2 파라미터 바인딩10.2.3 프로젝션10.2.4 페이징 API10.2.5 집합과 정렬10.2.6 JPQL 조인10.2.7 페치 조인10.2.8 경로 표현식10.2.9 서브 쿼리10.2.10 조건식10.2.11 다형성 쿼리10.2.12 사용자 정의 함수 호출(JPA 2.1)10.2.13 기타 정리10.2.14 엔티티 직접 사용10.2.15 Named 쿼리: 정적 쿼리10.3 Criteria10.3.1 Criteria 기초10.3.2 Criteria 쿼리 생성10.3.3 조회10.3.4 집합10.3.5 정렬10.3.6 조인10.3.7 서브 쿼리10.3.8 IN 식10.3.9 CASE 식10.3.10 파라미터 정의10.3.11 네이티브 함수 호출10.3.12 동적 쿼리10.3.13 함수 정리10.3.14 Criteria 메타 모델 API10.4 QueryDSL10.4.1 QueryDSL 설정10.4.2 시작10.4.3 검색 조건 쿼리10.4.4 결과 조회10.4.5 페이징과 정렬10.4.6 그룹10.4.7 조인10.4.8 서브 쿼리10.4.9 프로젝션과 결과 반환10.4.10 수정, 삭제 배치 쿼리10.4.11 동적 쿼리10.4.12 메소드 위임10.4.13 QueryDSL 정리10.5 네이티브 SQL10.5.1 네이티브 SQL 사용10.5.2 Named 네이티브 SQL10.5.3 네이티브 SQL XML 에 정의10.5.4 네이티브 SQL 정리10.5.5 스토어드 프로시저(JPA 2.1)10.6 객체지향 쿼리 심화10.6.1 벌크 연산10.6.2 영속성 컨텍스트와 JPQL10.6.3 JPQL과 플러시 모드10.7 정리11장. 웹 애플리케이션 제작11.1 프로젝트 환경설정11.1.1 프로젝트 구조11.1.2 메이븐과 사용 라이브러리 관리11.1.3 스프링 프레임워크 설정11.2 도메인 모델과 테이블 설계11.2.1 요구사항 분석11.2.2 도메인 모델 설계11.2.3 테이블 설계11.2.4 연관관계 정리11.2.5 엔티티 클래스11.3 애플리케이션 구현11.3.1 개발 방법11.3.2 회원 기능11.3.3 상품 기능11.3.4 주문 기능11.3.5 웹 계층 구현11.4 정리12장. 스프링 데이터 JPA12.1 스프링 데이터 JPA 소개12.1.1 스프링 데이터 프로젝트12.2 스프링 데이터 JPA 설정12.3 공통 인터페이스 기능12.4 쿼리 메소드 기능12.4.1 메소드 이름으로 쿼리 생성12.4.2 JPA NamedQuery12.4.3 @Query, 리파지토리 메소드에 쿼리 정의12.4.4 파라미터 바인딩12.4.5 벌크성 수정 쿼리12.4.6 반환 타입12.4.7 페이징과 정렬12.4.8 힌트12.4.9 Lock12.5 Specifications(명세)12.6 사용자 정의 리파지토리 구현12.7 Web 확장12.7.1 설정12.7.2 도메인 클래스 컨버터 기능12.7.3 페이징과 정렬 기능12.8 스프링 데이터 JPA가 사용하는 구현체12.9 JPA 샵에 적용12.9.1 환경 설정12.9.2 리파지토리 리팩토링12.9.3 명세 적용12.10 스프링 데이터 JPA와 QueryDSL 통합12.10.1 QueryDslPredicateExecutor 사용12.10.3 QueryDslRepositorySupport 사용12.11 정리13장. 웹 애플리케이션과 영속성 관리13.1 트랜잭션 범위의 영속성 컨텍스트13.1.1 스프링 컨테이너의 기본 전략13.2 준영속 상태와 지연 로딩13.2.1 글로벌 페치 전략 수정13.2.2 JPQL 페치 조인13.2.3 강제로 초기화13.2.4 FACADE 계층 추가13.2.5 준영속 상태와 지연 로딩의 문제점13.3 OSIV13.3.1 과거 OSIV: 요청 당 트랜잭션13.3.2 스프링 OSIV: 비즈니스 계층 트랜잭션13.3.3 OSIV 정리13.4 너무 엄격한 계층13.5 정리14장. 컬렉션과 부가 기능14.1 컬렉션14.1.1 JPA와 컬렉션14.1.2 Collection, List14.1.3 Set14.1.4 List + @OrderColumn14.1.5 @OrderBy14.2 @Converter14.2.1 글로벌 설정14.3 리스너14.3.1 이벤트 종류14.3.2 이벤트 적용 위치14.4 엔티티 그래프14.4.1 Named 엔티티 그래프14.4.2 em.find( )에서 엔티티 그래프 사용14.4.3 subgraph14.4.4 JPQL에서 엔티티 그래프 사용14.4.5 동적 엔티티 그래프14.4.6 엔티티 그래프 정리14.5 정리15장. 고급 주제와 성능 최적화15.1 예외 처리15.1.1 JPA 표준 예외 정리15.1.2 스프링 프레임워크의 JPA 예외 변환15.1.3 스프링 프레임워크에 JPA 예외 변환기 적용15.1.4 트랜잭션 롤백 시 주의사항15.2 엔티티 비교15.2.1 영속성 컨텍스트가 같을 때 엔티티 비교15.2.2 영속성 컨텍스트가 다를 때 엔티티 비교15.3 프록시 심화 주제15.3.1 영속성 컨텍스트와 프록시15.3.2 프록시 타입 비교15.3.3 프록시 동등성 비교15.3.4 상속관계와 프록시15.4 성능 최적화15.4.1 N+1 문제15.4.2 읽기 전용 쿼리의 성능 최적화15.4.3 배치 처리15.4.4 SQL 쿼리 힌트 사용15.4.5 트랜잭션을 지원하는 쓰기 지연과 성능 최적화15.5 정리16장. 트랜잭션과 락, 2차 캐시16.1 트랜잭션과 락16.1.1 트랜잭션과 격리 수준16.1.2 낙관적 락과 비관적 락 기초16.1.3 @Version16.1.4 JPA 락 사용16.1.5 JPA 낙관적 락16.1.6 JPA 비관적 락16.1.7 비관적 락과 타임아웃16.2 2차 캐시16.2.1 1차 캐시와 2차 캐시16.2.2 JPA 2차 캐시 기능16.2.3 하이버네이트와 EHCACHE 적용16.3 정리
|
|
★ 이 책에서 다루는 내용 ★■ JPA 기초 이론과 핵심 원리■ JPA로 도메인 모델을 설계하는 과정을 예제 중심으로 설명■ 다양한 객체 지향 쿼리 언어 설명■ JPA와 스프링 프레임워크를 함께 사용해서 웹 애플리케이션을 개발하는 방법■ 스프링 데이터 JPA, QueryDSL 소개 및 활용■ 실무에서 JPA를 사용할 때 성능을 최적화하는 다양한 방법★ 이 책의 대상 독자 ★이 책은 JPA를 사용해서 엔터프라이즈 애플리케이션을 개발하려는 모든 자바 개발자를 대상으로 한다. 이 책의 내용을 이해하려면 자바 언어와 JDBC를 사용한 데이터베이스 프로그래밍, 그리고 객체지향 프로그래밍과 관계형 데이터베이스에 대해 어느 정도 알고 있어야 한다. 추가로 3부는 웹 개발과 스프링 프레임워크에 대한 기초 지식이 필요하며 JUnit을 다룰 수 있어야 한다. 그리고 예제 코드를 실행하려면 메이븐에 대해서도 약간의 지식이 필요하다.★ 이 책의 구성 ★JPA는 크게 객체와 테이블을 어떻게 매핑해야 하는지에 관한 설계 부분과 설계한 모델을 실제 사용하는 부분으로 나눌 수 있다. 책의 앞부분에서는 기초 이론과 설계 방법을 학습하고 뒷부분에서는 학습한 이론을 바탕으로 JPA를 활용해서 실제 웹 애플리케이션을 개발한다.이 책은 크게 네 부분으로 나뉘어 있다.1장에서 9장은 이론 편이다. 객체와 테이블을 매핑하는 방법과 JPA의 핵심 기능들을 알아본다. 4장부터 9장까지는 각 장의 마지막에 점진적으로 도메인 모델을 설계해 나가는 실전 예제가 있어서 학습한 내용을 실제로 적용해볼 수 있게 했다.10장은 객체지향 쿼리 언어에 대한 내용이다. JPA가 제공하는 객체지향 쿼리 언어인 JPQL(Java Persistence Query Language)부터 직접 SQL을 작성하는 네이티브 SQL까지 알아본다.11장과 12장은 실무에서 JPA를 사용하기 위한 활용편이다. 스프링 프레임워크와 JPA를 사용해서 어떻게 웹 애플리케이션을 개발하는지 학습하고 스프링 데이터 JPA와 QueryDSL이라는 혁신적인 오픈소스도 사용해본다.13장에서 16장은 트랜잭션과 락, 캐시, 성능 최적화 등 JPA의 다양한 고급 주제들을 다룬다.★ 온라인 강의 ★지금까지 다양한 실무 프로젝트에 JPA를 도입했다. 작게는 단순한 웹 서비스부터 크게는 조 단위의 거래 금액을 처리하는 주문, 결제, 정산 시스템까지 JPA로 직접 설계하고 개발했다. JPA를 처음 실무에 도입할 때는 좌충우돌 했지만, 개발 생산성과 유지보수가 확연히 좋아졌고 코드 품질과 테스트에 더 많은 시간을 할애할 수 있었다. 무엇보다 JPA를 사용해본 동료들은 이전으로 돌아가고 싶어하지 않았다. 하지만 JPA에 관한 국내 자료가 부족해서 어려움이 많았다. 그래서 2015년 직접 이 책을 썼다.책과 함께 볼 수 있는 유료 온라인 강의를 제공한다. 책을 출간한 뒤 네이버, 카카오 같은 인터넷 비즈니스 회사부터 우아한형제들, 11번가 등 e커머스 회사까지 JPA를 사용 중이거나 도입하려는 많은 회사에서 강연했다. 책에서 이해하기 어렵던 부분은 강의를 통해 보다 쉽게 이해했다는 개발자들의 이야기를 듣고 온라인 강의를 개설했다. (JPA 강의 활용편 2는 준비 중이다.)실무에서도 JPA를 자신 있게 활용할 수 있기를 바란다.★ 지은이의 말 ★JPA를 처음 접했을 때의 놀라움은 아직도 잊혀지지 않는다. 지금까지 관계형 데이터베이스에서 객체를 관리하려고 작성했던 무수한 CRUD 코드와 SQL들이 머릿속을 스쳐 지나갔다. 마치 시골에서 직접 모내기를 하다가 최신 트랙터를 만난 기분이었다.객체를 관계형 데이터베이스에 저장하려면 많은 시간과 코드를 소비해야 한다. 예를 들어 객체를 SQL로 변환하는 단순한 일부터, 객체의 상속 구조를 테이블에 저장하는 복잡한 일까지, 개발자는 객체와 데이터베이스 사이에서 무수한 매핑 코드와 SQL을 작성해야 한다. 자바 진영에서는 이런 문제를 해결하기 위해 JPA라는 표준 기술을 제공한다. 자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 그간 실무에 JPA를 도입하면서 처음에는 좌충우돌하기도 했지만, 개발 생산성과 유지보수가 확연히 좋아졌고, 남은 시간에 코드 품질과 테스트에 더 많은 시간을 쏟을 수 있었다. 그리고 JPA를 사용해본 동료들은 전으로 돌아가고 싶어하지 않았다. 하지만 JPA에 대한 국내 자료가 부족했고, 대부분이 원서여서 어려운 점이 많았다. 그래서 때가 되면 JPA에 대한 책을 쓰고 싶다고 어렴풋하게 생각했는데, 마침 『토비의 스프링 3』과 『토비의 스프링 3.1』을 저술하신 이일민 님께서 JPA에 관한 책 쓰기를 권유하셨다. 6개월 정도면 충분하겠지 생각하고 책을 쓰기로 했는데, 어느덧 시간이 화살처럼 빠르게 지나 2년이 지나버렸다.이 책에서는 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다루는 데 주력했다. 또한, 스프링 프레임워크와 JPA를 함께 사용하는 방법을 설명하고, 스프링 데이터 JPA, QueryDSL 같은 혁신적인 오픈 소스를 활용해서 자바 웹 애플리케이션을 효과적으로 개발하는 방법을 설명했다.돌이켜보니 보잘것없는 사람의 책을 기다리고 응원해주신 분들 덕분에 여기까지 온 것 같다. 진심으로 정말 큰 힘이 되었기에, 그 모든 분께 감사를 전한다. 이 책이 JPA를 시작하는 분들께 조금이나마 도움이 되길 바란다.
|