본문 바로가기
백엔드/Spring

[JPA] 최범균님 <JPA 기초> 내용 정리하기

by 작은소행성 2022. 9. 7.

최범균님의 유튜브 강의를 들으면서 마지막에 나오는 정리 부분을 텍스트로 정리해 보았다. 

강의 내용 참고나 키워드를 보면서 공부를 진행하면 좋을 것 같다. 

https://www.youtube.com/playlist?list=PLwouWTPuIjUi9Sih9mEci4Rqhz1VqiQXX

 

기본 구조

  • EntityManagerFactory 초기화
  • DB 작업이 필요할 때마다
    • EntityManager 생성
    • EntityManager로 DB조작
    • EntityTransaction으로 트랜잭션 관리
  •  스프링과 연동할 때는 대부분 스프링이 대신 처리하므로 매핑 설정 중심으로 작엄

 

영속 컨택스트 

  • 엔티티를 메모리에 보관
  • 변경을 추적해서 트랜잭션 커밋 시점에 DB에 반영 

 

JPA CRUD

  • EntityManager 를 사용해서 엔티티 단위로 CRUD처리 
  • 변경은 트랜잭션 범위 안에서 실행
    • persist()
    • 수정
    • remove()

 

엔티티 매핑

  • 기본 어노테이션
    • @Entity
    • @Table
    • @Id
    • @Column
    • @Enumerated 
  • @Temporal
  • @Basic

 

@Embeddable

  • @Embeddable 을 사용하면 모델을 더 잘 표현할 수 있음 
    • 개별 속성을 모아서 이해 -> 타입으로 더 쉽게 이해 
      • (addr1, addr2, zipcode) 를 모아서 주소 파악 -> address 하나만 보고 주소 파악
  • 방법 1 : @SecondaryTable + 테이블명 
    • 다른 테이블에 저장된 데이터를 @Embeddable로 매핑 가능
    • 다른 테이블에 저장된 데이터가 개념적으로 밸류(값)일 때 사용
      • 1-1 관계인 두 테이블을 매핑할 때 종종 출현
  • 방법 2 : @SecondaryTable + @AttributeOverride

 

값 콜렉션 Set

  • 콜렉션 테이블을 이용한 값 Set 매핑
    • @ElementCollection과 @CollectionTable이면 끝
  • @ElementCollection(fetch = FetchType.LAZY) : LAZY가 기본값
  • @ElementCollection(fetch = FetchType.EAGER) 
  • 주의사항
    • 성능 문제 -> CQRS (Command Query Responsibility Seg)
    • 변경기능을 위한 모델과 조회 기능을 윙한 모델을 분리 
      • 변경 기능 - JPA 활용
      • 조회 기능 - Mybatis/JdbcTemplate/JPA 중 알맞은 기술 사용 
    • 모든 기능을 JPA로 구현할 필요 없음
    • JPA로 다 하겠다는 생각 하지 말기
      • 명령 모델(상태 변경)과 조회 모델을 구분하면 좋음  

 

영속 컨텍스트

  • JPA는 영속 엔티티(객체)를 영속 켄텏트에 담아 변경 추적
    • 트랜잭션 커밋 시점에 변경 반영
  • 대량 변경은 굳이 JPA로 할 필요 없음
    •  (배치류에는)직접 쿼리가 나음
  • 분리된 상태는 변경을 추적하지 않음

 

엔티티 연관 매핑

  • 1-1 연관 단방향, N-1 단방향, 1-N 단방향, 양방향, M-N 연관
  • 양방향, M-N 은 거의 사용 안함 
    • 이유1. 벨류(Embeddable타입)로 매핑
    • 이유2. 조회는 쿼리 직접 사용할 때가 많음

 

엔티티 연관 고려사항

  •  연관 대신에 ID값으로 참조 고려 
    • 객체 탐색이 쉽다고 연관 쓰기 없기 
  • 조회는 전용 쿼리나 구현 사용 고려 (CQRS)
  • 엔티티가 아닌 벨류인지 확인
    • 1-1, 1-N 관계에서 특히 
  • 1-N보다는 N-1 (어쩔 수 없이 사용해야 한다면) 
  • 양방향은 쓰지말자

 

반응형