#2 of Spring - Spring Boot and JPA when API 개발

Spring Boot + JPA

성능 최적화

  • 핵심사항
    • 쿼리 실행 횟수를 최대한 줄이는 것이 가장 중요한 포인트
    • 특히, 조회 (select)

지연로딩 (Lazy Loading)

  • 정의
    • 일종의 조회용 proxy 객체를 만들어 놓음 = 초기화
      • 이 상태에서 get() 함수로 실제 데이터 호출하면 그 순간 쿼리 실행하게 됨
    • https://ict-nroo.tistory.com/132
  • 적용이유
    • 수건의 @XXXToOne 과 같은 관계를 가진 엔티티 조회 시 효율성 보장
      • API 스펙에 맞는 데이터만 선별할 수 있음
        • 엔티티 컬럼을 그대로 외부에 노출하는 것은 좋지 않음
        • 별도의 dto 객체로 변환해서 뷰단에 노출시키는 방식 활용
      • getter 함수로 실제 데이터 사용하는 순간, 추가적인 조회 쿼리 실행
      • 즉시 로딩 과정에서 남발되는 쿼리 횟수를 줄일 수 있음
    • 따라서, 엔티티에 @XXXToOne 으로 걸려있는 관계가 있다면
      • FetchType.LAZY 로 지정해놓는 것이 좋음
      • 즉시 로딩의 경우, 성능 최적화 자체를 시도하기가 매우 어려움
        • 지연 로딩 -> fetch join 으로 해결 가능
  • 문제점
    • 사실상, 즉시 로딩하는 케이스와 성능 차이가 크게 없음

관련 용어정리


References

댓글