본문 바로가기

Spring JPA 관련 어노테이션 정리 본문

개발/Spring

Spring JPA 관련 어노테이션 정리

Louisus 2021. 8. 12. 16:21
728x90

@ToString()

  • 엔티티 간에 연관관계를 지정하는 경우 항상 @ToString() 주의! @ToString은 해당 클래스의 모든 멤버 변수를 출력.
  • 연관관계가 있는 엔티티 클래스의 경우 @ToString을 할 때는 습관적으로 exclude 속성을 사용하는 것이 좋음. exclude는 해당 속성값으로 지정된 변수는 toString()에서 제외.

지연 로딩의 장/단점

장점:

  • 지연 로딩은 조인을 하지 않기 때문에 단순하게 하나의 테이블을 이용하는 경우 빠른 속도의 처리가 가능.

단점:

  • 필요한 순간에 쿼리를 실행해야 하기 때문에 연관관계가 복잡한 경우에는 여러 번의 쿼리가 실행된다.

⇒ 보편적인 코딩 가이드는 '지연 로딩을 기본으로 사용하고, 상황에 맞게 필요한 방법을 찾는다'

JPQL / left (outer) join

findById() vs getOne()

  • getOne()은 필요한 순간까지 로딩을 지연하는 방식

M:N 관계

  • 다대다 관계 설정은 중간에 매핑 테이블이 하나 추가되는 형태
  • 매핑 테이블의 작성 이전 다른 테이블들이 먼저 존재해야 함.
  • 매핑 테이블은 주로 '명사'가 아닌 '동사', '히스토리'에 대한 데이터를 보관!
  • 매핑 테이블은 중간에서 양쪽의 PK를 참조하는 형태
  • @ManyToMany or 별도의 엔티티 설계 후 @ManyToOne을 이용해서 처리
  • 양방향 참조를 주로 이용. 양방향 참조 시 현재 메모리상(컨텍스트)의 엔티티 객체들의 상태와 데이터 베이스의 상태를 동기화 시키는 것. 하나의 객체를 수정하는 경우 다른 객체의 상태를 매번 일치 하도록 변경하기 어려움. 때문에 가능하면 단방향 참조를 위주로 개발진행!
  • 중간에 직접 매핑 테이블을 설계하고, 직접 매핑 관계를 연결 시키는 방식으로 설계 → 연관 관계 조회시 left (outer) join 등을 활용

COALSESCE 함수

  • 나열된 값을 순차적으로 체크하여 NULL이 아닌 첫번째 인수를 반환

@EntityGraph

  • 엔티티의 특정한 속성을 같이 로딩하도록 표시하는 어노테이션.
  • JPA 이용시 연관 관계의 FATCH 속성값은 LAZY로 지정하는 것이 일반적. 이런 상황에서 특정 기능을 수행할 때만 EAGER 로딩을 하도록 지정할 수 있음.
  • attributePaths 속성, type 속성

attributePaths: 로딩 설정을 변경하고 싶은 속성의 이름을 배열로 명시

type: @EntityGraph를 어떤 방식으로 적용할 것인지 설정

FATCH 속성값은 attributePaths에 명시한 속성은 EAGER로 처리하고 나머지는 LAZY로 처리

LOAD 속성값은 attributePaths에 명시한 속성은 EAGER로 처리하고 나머지는 엔티티 클래스에 명시되거나 기본 방식으로 처리

'개발 > Spring' 카테고리의 다른 글

스프링 어노테이션 정리  (0) 2021.08.12
Spring profile 설정  (0) 2021.08.12
OAuth 2.0 파라미터 정리  (0) 2021.08.06
OAuth 2.0 개념 정리  (0) 2021.08.06
Spring Security 구조  (0) 2021.08.06
Comments