본문 바로가기
Spring 7기 프로젝트/모임 플렛폼 프로젝트

JPA와 데이터베이스 설정 최적화

by JuNo_12 2025. 8. 17.

HikariCP 커넥션 풀 설정

커넥션 풀 크기 조정

minimum-idle: 5               # 최소 유지 커넥션
maximum-pool-size: 10         # 최대 커넥션 풀 크기

개발 및 중간 규모 애플리케이션에 적합하도록 커넥션 풀 크기를 보수적으로 설정했습니다. 과도한 커넥션은 메모리 사용량을 증가시키고 데이터베이스 부하를 가중시킬 수 있기 때문입니다.

 

타임아웃 설정

connection-timeout: 20000     # 20초
idle-timeout: 600000          # 10분

커넥션 획득 대기 시간과 유휴 커넥션 유지 시간을 적절히 설정하여 리소스 효율성을 확보했습니다.

 

MySQL 연결 최적화

data-source-properties:
  characterEncoding: UTF-8
  useUnicode: true
  serverTimezone: Asia/Seoul
  useSSL: true
  allowPublicKeyRetrieval: true

한국 시간대 설정과 UTF-8 인코딩, SSL 보안 연결을 기본으로 적용했습니다.


JPA/Hibernate 성능 최적화

DDL 관리

hibernate:
  ddl-auto: none

Flyway를 사용한 마이그레이션 관리를 위해 Hibernate의 자동 DDL 생성을 비활성화했습니다. 이는 프로덕션 환경에서 데이터베이스 스키마 변경을 안전하게 관리하기 위한 설정입니다.

 

N+1 문제 해결

default_batch_fetch_size: 16

연관 엔티티 조회 시 발생할 수 있는 N+1 문제를 완화하기 위해 배치 페치 크기를 설정했습니다. 이 설정으로 여러 연관 엔티티를 한 번의 쿼리로 가져올 수 있어 성능이 향상됩니다.

 

배치 처리 최적화

jdbc:
  batch_size: 20
  order_inserts: true
  order_updates: true

 

대량의 INSERT/UPDATE 작업 시 성능을 향상시키기 위한 설정입니다. batch_size는 한 번에 처리할 SQL 문의 개수를 지정하며, order 설정들은 SQL 실행 순서를 최적화하여 데이터베이스 성능을 개선합니다.

 

OSIV 비활성화

open-in-view: false

Open Session In View 패턴을 비활성화하여 불필요한 데이터베이스 연결 유지를 방지했습니다. 이는 메모리 사용량을 줄이고 성능을 향상시키는 중요한 설정입니다.


Flyway 마이그레이션 설정

안전한 마이그레이션 관리

flyway:
  enabled: true
  locations: classpath:db/migration
  validate-on-migrate: true
  clean-disabled: true
  baseline-on-migrate: true

데이터베이스 스키마 변경을 안전하게 관리하기 위해 Flyway를 활성화했습니다. validate-on-migrate 설정으로 마이그레이션 파일의 무결성을 검증하고, clean-disabled 설정으로 운영 환경에서의 데이터 손실을 방지했습니다.


설정 최적화 원칙

이번 설정 최적화에서는 다음과 같은 원칙을 적용했습니다.

1. 단순성 우선: 복잡한 고급 설정보다는 검증된 기본 설정을 중심으로 구성했습니다.

2. 성능과 안정성 균형: 과도한 성능 최적화보다는 안정적인 운영이 가능한 수준에서 최적화했습니다.

3. 운영 환경 고려: 개발 환경뿐만 아니라 프로덕션 환경에서도 안전하게 사용할 수 있는 설정을 선택했습니다.

4. 유지보수성: 설정의 의도를 명확히 하고 불필요한 복잡성을 제거하여 유지보수가 용이하도록 구성했습니다.