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

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