본문 바로가기

Project

[Side Project] application.yml설정 & default_batch_fetch_size & OSIV

 

✅application.yml 설정

  • yml파일을 통해 프로젝트 설정 값을 관리
  • application.yml : default 프로젝트 설정 값
  • application-dev.yml : 개발 환경에서의 프로젝트 설정 값
  • application-prod.yml : 운영 환경에서의 프로젝트 설정 값
  • application-test.yml : 테스트 환경에서의 프로젝트 설정 값

  • 실행하는 profile에 따라서 yml에 default로 설정해둔 값이 오버라이드됨

 

✅ Spring.jpa.hibernate.ddl-auto 옵션

create 애플리케이션 실행 시 기존 테이블 삭제 후 테이블 새로 생성 (default) 개발 초기 단계 사용
create-drop 애플리케이션 실행 시 테이블 생성 후 애플리케이 션 종료 시점에 테이블 drop 개발 초기 단계 사용
update 변경된 스키마 반영 개발 초기 단계 사용
validate 애플리케이션 실행 시 엔티티와 테이블 정상 매핑 확인 dev, prod 환경에서 사용
none 사용하지 않음 dev, prod 환경에서 사용

 

 

✅ default_batch_fetch_size

  • OneToMany 관계의 컬렉션 조회 최적화 시 사용

  • default_batch_fetch_size를 적용하지 않았을 경우 order_item을 가져올 때 order의 개수만큼 order_item을 가져오는 쿼리 실행

  • default_batch_fetch_size를 적용했을 경우 order_item을 가져올 때 in 쿼리로 주문 엔티티와 연관된 주문 상품 엔티티들을 쿼리 1번으로 조회
  • 100 ~ 1000 권장 => DB와 애플리케이션 부하 고려
  • 오라클의 경우 in 절에 들어갈 수 있는 최대 파라미터의 개수는 1000개


 

✅ OSIV (Open-Session-In-View)

  • OSIV 설정 값 : true (default)
  • View 렌더링 또는 API 요청일 경우 클라이언트 응답까지 영속성 컨텍스트 생존

 

 

  • OSIV 설정 값 : false
  • 트랜잭션 종료 시점 시 영속성 컨텍스트 닫침 => 컨트롤러에서 지연로딩으로 연관된 엔티티 가지고 오려고하면 에러 발생
  • 영속성 컨텍스트를 오래 유지하면 DB Connection도 오래 가지고 있으므로 DB Connection이 부족할 수 있음 => 실시간 트래픽이 중요한 API 애플리케이 션에서는 false로 유지

 

✏️공부한 내용

  • OSIV를 `false`로 하면 영속성 컨텍스트 범위가 트랜잭션으로 제한되어 DB 커넥션 유지를 짧게 가져가 커넥션 풀 고갈 위험을 줄이는 데 도움이 된다.
  • `default-batch-fetch-size`는 N+1 문제를 해결하기 위해 연관된 데이터를 In 절을 사용하여 배치로 한 번에 가져와 쿼리 수를 줄여 성능을 높여준다

'Project' 카테고리의 다른 글

[Side Project] 에러처리  (0) 2025.05.20
[Side Project] CORS 설정 & Preflight  (0) 2025.05.18
[Side Project] Health Check API - 서버 상태 체크  (1) 2025.05.17