Skip to content

Latest commit

 

History

206 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

인프런 스프링 부트와 JPA 실무 완전 정복 로드맵 공부 💪

자바 ORM 표준 JPA 프로그래밍 - 기본편

  • Section2 JPA 시작하기
    • H2DB 설정, DB 방언(dialect), EntityManagerFactory, EntityManager
  • Section3 영속성 - 내부 동작 방식
    • 영속성 컨텍스트 상태(영속, 준영속), 영속성 컨텍스트 기능, 1차 캐시, 스냅샷, 플러시
  • Section4 엔티티 매핑
  • Section5 연관관계 매핑 기초
    • @OneToMany, @ManyToOne, @JoinColumn, mappedBy, 관계의 주인, 객체 모델링과 테이블 모델링 패러다임 일치, 단방향, 양방향
  • Section6 다양한 연관관계 매핑
  • Section7 고급매핑
    • @Inheritance, 3가지 전략: JOINED, SINGLE_TABLE, TABLE_PER_CLASS, @DiscriminatorColumn, @DiscriminatorValue
    • @MappedSuperclass, 매핑 정보 상속, 베이스 엔티티
  • Section8 프록시와 연관관계 관리
    • 프록시, 프록시 초기화 과정, 프록시 관련 편의 메서드, 즉시 로딩(EAGER), 지연 로딩(LAZY)
    • 영속성 전이(CASCADE), 고아 객체(orphanRemoval = true)
  • Section9 값 타입
    • 임베디드 타입: @Embeddable, @Embedded, @AttributeOverride, @AttributeOverrides
    • 값 타입 & 불변 객체: 부작용(side effect)
    • 값 타입의 비교: 동일성 & 동등성(equals(), hashcode())
    • 값 타입 컬렉션: @ElementCollection, @CollectionTable, 값 타입 컬렉션의 제약사항
  • Section10 JPQL 기본 문법
    • TypeQuery, Query, 파라미터 바인딩(이름 기준, 위치 기준)
    • 프로젝션(엔티티, 임베디드, 스칼라 타입), 여러 값 조회(Query 타입, Object[] 타입, new 명령어)
    • 페이징 API - setFirstResult(), setMaxResults
    • 조인, 서브 쿼리, JPQL 타입 표현
    • 조건식 - CASE, 기본 함수, 사용자 정의 함수
  • Section11 JPQL 중급 문법
    • 경로 표현식: 상태 필드, 연관 필드, 단일 값 연관 경로, 컬렉션 연관 경로
    • 페치 조인: 페치 조인 특징 & 한계, @BatchSize(), N+1 문제, 컬렉션 패치 조인과 페이징 문제
    • 다형성 쿼리(TYPE(), TREAT()), 엔티티 직접 사용(엔티티 식별자(pk))
    • 네임드 쿼리: @NamedQuery, createNamedQuery()
    • 벌크 연산: executeUpdate(), 벌크 연산 주의점(영속성 컨텍스트), Dirty Checking vs 벌크 연산

스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

  • Section1 프로젝트 환경 설정
    • 라이브러리 체크, View 환경 설정(타임리프), spring-boot-devtools - 서버 재시작❌ View 파일 변경
    • H2 데이터베이스 설치
    • JPA 설정 & DB 설정 - Yaml, Build.gradle
  • Section2 도메인 분석, 설계
    • 요구사항 분석, 도메인 모델과 테이블 설계, 엔티티 클래스 개발
    • 엔티티 설계시 주의점(연관관계 편의 메서드, @Setter, Cascade, 즉시로딩(EAGER), 컬렉션 필드 초기화)
  • Section3 애플리케이션 구현 준비
    • 구현 요구사항, 애플리케이션 아키텍처 설명
  • Section4 회원 도메인 개발
    • 회원 리포지토리, 회원 서비스 개발
    • 회원 기능 테스트
  • Section5 상품 도메인 개발
    • 상품 엔티티(비즈니스 로직 추가): 재고 추가, 재고 감소
    • 상품 (리포지토리, 서비스) 개발
  • Section6 주문 도메인 개발
    • 주문, 주문 상품(엔티티, 리포지토리, 서비스) 개발
    • 연관관계 편의 메서드 + 정적 펙토리 메서드(객체 생성 feat 생성자, @Builder)
    • @NoArgsConstructor(access = AccessLevel.PROTECTED)
    • 도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
    • 주문 기능 테스트
    • 동적 쿼리(순수 JPQL, JPA 표준 스펙 - Criteria)
  • Section7 웹 계층 개발
    • 타임리프 레이아웃 아키텍처 Include-style layouts vs Hierarchical-style layouts
    • bootstrap(JS, CSS) 적용
    • 도메인 기능 구현
    • ⭐️ 변경 감지 vs 병합(merge)

스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

  • Section1 API 개발 기본
    • DTO 사용으로 엔티티와 프레젠테이션 계층을 분리
    • response : 스트림 연산 & 제네릭 활용
    • 회원 등록, 수정, 조회 API 개발
    • CQS 패턴 - Command - Query - Separation
  • Section2 API 개발 고급 - 준비
    • 조회용 샘플 데이터 입력
  • Section3 API 개발 고급 - 지연 로딩과 조회 성능 최적화
    • 엔티티를 직접 노출(V1): N+1 문제, 화면 계층과 엔티티 강한 결합 문제, 양방향 연관관계 무한 순환 문제(@JsonIgnore), Json 프록시 객체 변환 문제(Hibernate5JakartaModule)
    • 엔티티를 DTO로 변환(V2): N+1 문제
    • 엔티티를 DTO로 변환 + 패치 조인 활용(V3): N+1 문제 해결
    • JPA에서 DTO로 바로 조회(V4): N+1 문제 해결 + V3 보다 성능 개선, 재사용성이 떨어지는 문제, 트레이드 오프 & 권장하는 스타일
  • Section4 API 개발 고급 - 컬렉션 조회 최적화
    • 엔티티를 직접 노출(V1)
    • 엔티티를 DTO로 변환(V2)
    • 엔티티를 DTO로 변환 + 패치 조인 활용(V3): N+1 문제 해결
    • 엔티티를 DTO로 변환 + 패치 조인 활용(V3-1): N+1 문제 해결 + 페이징 문제 해결: @BatchSize, hibernate.default_batch_fetch_size
    • JPA에서 DTO로 바로 조회(V4): N+1 문제
    • JPA에서 DTO로 바로 조회(V5): 컬렉션 조회 최적화 IN 절을 활용해서 메모리에 미리 조회해서 최적화
    • JPA에서 DTO로 바로 조회(V6): JOIN 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환
      • stream 연산 : (groupingBy, mapping), toMap() + 병합합수
  • Section5 API 개발 고급 - 실무 필수 최적화
    • OSIV - Open Session In View, 성능 최적화

스프링 데이터 JPA

  • Section1 프로젝트 환경설정
    • 쿼리 파라미터 로그 남기기(외부 라이브러리), application.yaml 설정, 라이브러리 체크
  • Section2 예제 도메인 모델
    • JPA 복습(연관관계 편의 메서드, 지연 로딩, 롬복)
  • Section3 공동 인터페이스 기능
    • JPA 리포지토리 VS Spring Data Jpa 리포지토리, 공통 인터페이스 설정 & 적용, 공통 인터페이스 기능 분석
  • Section4 쿼리 메소드 기능
    • 메소드 이름으로 쿼리 생성
    • JPA NamedQuery
    • @Query, DTO 조회하기
    • 파라미터 바인딩, 반환타입
    • 순수 JPA 페이징과 정렬, 스프링 데이터 JPA 페이징과 정렬
    • 벌크성 수정 쿼리 - @Modifying(clearAutomatically = true)
    • 페치 조인 & @EntityGraph
    • JPA Hint & Lock
  • Section5 확장 기능
    • 사용자 정의 리포지토리
    • Auditing - @PrePersist, @PreUpdate, @EnableJpaAuditing, @EntityListeners(AuditingEntityListener.class), AuditorAware, @CreatedBy, @LastModifiedBy, @CreatedDate, @LastModifiedDate
    • 도메인 클래스 컨버터 - HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티 객체를 찾아서 바인딩
    • 페이징과 정렬 - Pageable, PageableRequest, @PageableDefault
  • Section6 스프링 데이터 JPA 분석
    • SimpleJpaRepository 분석, save() 메서드 로직 merge() vs persist(), Persistable 인터페이스 활용하기
  • Section7 나머지 기능들
    • Query By Example - Probe, ExampleMatcher, Example
    • Projections - 인터페이스 기반 & 클래스 기반 , 동적 Projections, 중첩 구조 처리와 최적화
    • 네이티브 쿼리 - 네이티브 쿼리 & DTO 반환 Projections 활용

Querydsl

  • Section1 프로젝트 환경설정
  • Section2 예제 도메인 모델
  • Section3 기본 문법
    • Q-Type 활용 - static import
    • 결과 조회 - fetch(), fetchOne(), fetchFirst(), fetchResults(), fetchCount()
    • 정렬 - desc(), asc(), nullsFirst(), nullsLast()
    • 페이징 - offset(), limit(), fetchResults()
    • 조인 - 기본 조인, on절 활용, 페치 조인(fetchJoint())
    • 서브 쿼리 - JPAExpressions, Case 문 - CaseBuilder, 상수 - Expressions.constant, 문자 더하기 - concat(), stringValue()
  • Section4 중급 문법
    • 프로젝션 결과 반환 - 기본 반환, 2개 이상(tuple) 반환, DTO 조회(Projections.(xxx)), 별칭(ExpressionUtils.as), @QueryProjection
    • 동적 쿼리 - BooleanBuilder, where 다중 파라미터, BooleanExpression
    • 수정, 삭제 벌크 연산
    • SQL function & querydsl 내장 function
  • Section5 순수 JPA와 Querydsl
    • 순수 JPA 리포지토리 & Querydsl - JPAQueryFactory 동시성 문제와 스프링
    • 동적 쿼리와 성능 최적화 조회 - BooleanBuilder & where 절 파라미터 사용
    • 조회 API 컨트롤러 개발 - profile
  • Section6 실무 활용 - 스프링 데이터 JPA와 Querydsl
    • 순수 JPA 리포지토리 ➡️ 스프링 데이터 JPA 리포지토리 변환 - 사용자 정의 리포지토리 for Querydsl
    • Querydsl 페이징 fetchResults() PageImpl, 카운트 쿼리 분리 fetchCount(), 카운트 쿼리 분리 최적화 PageableExecutionUtils
  • Section7 스프링 데이터 JPA가 제공하는 Querydsl 기능

About

JPA Study

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages