기타
[1차시] 스프링 부트 성능 최적화 전략 : 기본 개념부터 핵심 원칙까지
킨글
2025. 3. 17. 20:34
- 외부 서비스 의존성
- 외부 API 호출 지연으로 인해 애플리케이션 응답 지연
- 네트워크 장애 시 외부 서비스의 불안정성으로 인한 성능 저하
- 재시도 로직 미흡으로 인한 시스템 부하
- Circuit Breaker 미사용으로 장애가 전체 시스템에 파급
- 자바 - JVM 메모리 관리 및 GC 튜닝
- 적절한 Heap 메모리 크기 설정 (-Xms, -Xmx)
- 최소, 최대 크기 설정
- GC 알고리즘 선택 (G1 GC, ZGC 등)
- G1 GC는 대규모 어플리케이션에 적합
- ZGC 지연 시간 최소화에 강점
- 메모리 누수 방지 및 GC 로그 분석
- 적절한 Heap 메모리 크기 설정 (-Xms, -Xmx)
- 자바-멀티스레드 및 동시성 처리 최적화
- 스레드 풀 크기 조정(Executor Service, Fork Join Pool)
- 비동기 처리 및 병렬 스트림 사용
- 대용량 처리 시 병렬 스트림 사용
- 스레드와 동시성 문제 해결
- 정확한 동기화와 병목 구간 점검
- 자바-네트워크 성능 최적화
- HTTP Keep-Alive 설정
- 새로운 연결을 활성화 하지 않고 기존 연결을 재활용
- GZIP 압축을 통한 데이터 전송 최적화
- 대역폭 절약 및 전송 속도 증가
- 비동기 I/O (NIO, Netty) 활용
- 네트워크가 대기 상태로 멈춰 있지 않도록 함
- HTTP Keep-Alive 설정
- 스프링 부트-내장 서버(Tomcat, Jetty등) 튜닝
- 스레드 풀 크기 조정(`server.tomcat.threads.max`)
- Keep-Alive 설정 및 네트워크 설정
- HTTPS, HTTP/2 설정
- HTTP/2는 병렬 전송을 지원함
- 스프링 부트-Spring Boot Actuator를 통한 모니터링
- /actuator/metrics : JVM 메모리, CPU, GC 상태 모니터링
- /actuator/health : 어플리케이션 상태 확인
- Prometheus와 Grafana 연동을 통한 실시간 대시보드
- 스프링 부트-Auto-Confugration 튜닝
- EnableAutoConfiguration을 통한 불필요한 모듈 비활성화
- @SpringBootApplication(exlucde = ...)로 특정 기능 제외
- 성능을 위한 최소한의 자동 설정 유지
성능 문제 진단
- 모니터링 도구 사용
- VisualVM, JConsole, Spring Boot Actuator
- 성능 병목 지점 식별
- CPU 사용량, 메모리 사용량, 스레드 상태
- 성능 목표 설정
- 응답 시간 (Reponse Time) 기준 설정
- 처리량 (Through put) 증가 목표
- CPU, 메모리 등 자원 사용량 최적화
- 해결책 시도
- 코드 최적화 -> 알고리즘 개선, 비효율적 로직 제거
- 서버 설정 조정 -> 스레드 풀 크기, GC 튜닝, 캐싱
- 데이터베이스 최적화 -> 인덱스 추가, 쿼리 개선