식별자 (Identifiers), 관계 (Relationships)
JPA의 ID 생성 전략과 OneToMany, OneToOne, ManyToMany 연관관계 매핑에서 성능을 고려한 실무 선택 기준을 정리합니다.
JPA의 ID 생성 전략과 OneToMany, OneToOne, ManyToMany 연관관계 매핑에서 성능을 고려한 실무 선택 기준을 정리합니다.
JPA의 상속 매핑 전략인 SINGLE_TABLE, JOINED, TABLE_PER_CLASS, MappedSuperclass를 비교하고 실무 선택 기준과 성능 최적화 팁을 정리합니다.
JPA·Hibernate 기반 데이터 액세스 계층에서 SQL 로깅, 스키마 관리, 커넥션 풀 모니터링 등 성능을 좌우하는 요소들을 정리합니다.
JPA 영속성 컨텍스트의 캐싱·더티 체킹·쓰기 지연 동작 원리와 플러시 발생 시점을 정리하고, 배치 처리와 플러시 모드를 활용한 성능 최적화 방법을 소개합니다.
도메인 주도 개발 시작하기 4장을 정리하며, 밸류 타입의 JPA 매핑 방법과 애그리거트를 완전한 상태로 저장·조회하는 전략을 다룹니다.
애그리거트를 동시에 수정할 때 발생하는 일관성 문제를 선점 잠금과 비선점 잠금으로 해결하는 방법을 JPA 구현 예시와 함께 정리합니다.
일급컬렉션에 Cascade를 적용했을 때 자식 엔티티 Id가 null로 저장되는 문제와 CascadeType.MERGE로 해결하는 방법을 소개합니다.
배치에서 Quartz로 실행할 때만 FetchType.LAZY 객체를 불러오지 못하고 LazyInitializationException이 발생한 원인과 해결 방법을 정리합니다.
Querydsl 학습을 위해 스프링 부트 프로젝트를 생성하고, Gradle 빌드 설정과 H2 데이터베이스, 쿼리 로그 확인 방법을 정리합니다.
Querydsl의 프로젝션과 DTO 조회 방법, BooleanBuilder와 Where절을 활용한 동적 쿼리, 벌크 연산과 SQL Function 호출법을 정리합니다.
순수 JPA 리포지토리에 Querydsl을 도입하고, BooleanBuilder와 Where절 파라미터로 동적 쿼리를 최적화한 뒤 조회 API를 만드는 과정을 정리합니다.
스프링 데이터 JPA 리포지토리에 Querydsl을 결합하는 사용자 정의 리포지토리 패턴과, 카운트 쿼리를 최적화한 페이징 처리 방법을 정리합니다.
스프링 데이터 JPA 실습 프로젝트의 Gradle 설정, 라이브러리 구성, H2 데이터베이스 연동과 기본 동작 확인 과정을 정리합니다.
실습에 사용할 Member, Team 엔티티와 양방향 연관관계를 정의하고, 순수 JPA로 저장·조회 동작을 확인합니다.
순수 JPA로 기본 CRUD 리포지토리를 만들어본 뒤, 스프링 데이터 JPA의 공통 인터페이스 JpaRepository로 대체하는 과정을 정리합니다.
메소드 이름으로 쿼리를 생성하는 방법부터 @Query, 파라미터 바인딩, 페이징과 정렬, 벌크 연산, @EntityGraph까지 쿼리 메소드 기능을 정리합니다.
사용자 정의 리포지토리 구현, Auditing, 도메인 클래스 컨버터, 웹 페이징·정렬 등 스프링 데이터 JPA의 확장 기능을 정리합니다.
스프링 데이터 JPA 공통 인터페이스 구현체 SimpleJpaRepository의 동작과 save() 메서드의 신규 엔티티 판단 로직을 정리합니다.
JPA 프로젝트에 필요한 라이브러리 설정부터 EntityManager로 엔티티를 저장·조회하는 기본 동작 방식, JPQL 사용법까지 정리합니다.
@Entity, @Table, @Column 등 엔티티와 테이블을 매핑하는 어노테이션과 IDENTITY·SEQUENCE·TABLE 기본 키 생성 전략을 정리합니다.
객체의 상속 구조를 테이블로 옮기는 세 가지 전략을 비교하고, 공통 매핑 정보를 모으는 @MappedSuperclass의 쓰임을 정리합니다.
JPA 프록시 객체가 만들어지고 초기화되는 과정을 em.getReference() 예제로 살펴보고, 프록시 사용 시 주의할 점을 정리합니다.
지연 로딩과 즉시 로딩의 동작 차이를 프록시 조회 관점에서 정리하고, 실무에서 지연 로딩을 써야 하는 이유를 짚습니다.
JPA CASCADE 옵션으로 부모와 자식 엔티티를 함께 영속화하는 방법과 orphanRemoval로 고아 객체를 제거하는 원리를 정리합니다.
JPA의 값 타입 개념과 기본값 타입, 임베디드 타입의 사용법, @AttributeOverride로 컬럼명을 재정의하는 방법을 정리합니다.
값 타입을 공유할 때 발생하는 부작용과 불변 객체 설계, 값 타입 컬렉션의 제약과 이를 엔티티로 대체하는 실무 방법을 정리합니다.
JPQL의 기본 문법과 TypedQuery, 파라미터 바인딩, 프로젝션, 페이징, 조인, 서브쿼리, CASE 식 등 자주 쓰는 문법을 정리합니다.
JPQL 경로 표현식에서 명시적 조인과 묵시적 조인의 차이를 정리하고, 페치 조인의 동작 방식과 페이징·DISTINCT 관련 한계를 설명합니다.
회원 등록·수정·조회 API를 예제로, 엔티티 대신 DTO를 사용해 API 스펙과 엔티티를 분리하는 방법을 정리합니다.
엔티티 직접 노출부터 DTO 변환, 페치 조인, DTO 직접 조회까지 주문 조회 API의 성능을 단계적으로 최적화하는 방법을 정리합니다.
일대다 컬렉션을 포함한 주문 조회 API를 엔티티 노출부터 페치 조인, 배치 사이즈, DTO 직접 조회, 플랫 데이터까지 단계별로 최적화하는 방법을 정리합니다.
OSIV를 켰을 때와 껐을 때의 트레이드오프를 살펴보고, Command와 Query를 분리해 복잡성을 관리하는 방법을 정리합니다.
JPA 엔티티 매핑과 EntityManager 기반 리포지토리를 구현하고, SpringConfig의 빈 설정만 바꿔 JDBC 구현체를 JPA로 교체하는 과정을 정리합니다.