기타

[1차시] 스프링 부트 성능 최적화 전략 : 기본 개념부터 핵심 원칙까지

킨글 2025. 3. 17. 20:34

 

  • 외부 서비스 의존성
    • 외부 API 호출 지연으로 인해 애플리케이션 응답 지연
    • 네트워크 장애 시 외부 서비스의 불안정성으로 인한 성능 저하
    • 재시도 로직 미흡으로 인한 시스템 부하
    • Circuit Breaker 미사용으로 장애가 전체 시스템에 파급
  • 자바 - JVM 메모리 관리 및 GC 튜닝
    • 적절한 Heap 메모리 크기 설정 (-Xms, -Xmx)
      • 최소, 최대 크기 설정
    • GC 알고리즘 선택 (G1 GC, ZGC 등)
      • G1 GC는 대규모 어플리케이션에 적합
      • ZGC 지연 시간 최소화에 강점
    • 메모리 누수 방지 및 GC 로그 분석 
  • 자바-멀티스레드 및 동시성 처리 최적화
    • 스레드 풀 크기 조정(Executor Service, Fork Join Pool)
    • 비동기 처리 및 병렬 스트림 사용
      • 대용량 처리 시 병렬 스트림 사용
    • 스레드와 동시성 문제 해결 
      • 정확한 동기화와 병목 구간 점검
  • 자바-네트워크 성능 최적화 
    • HTTP Keep-Alive 설정
      • 새로운 연결을 활성화 하지 않고 기존 연결을 재활용 
    • GZIP 압축을 통한 데이터 전송 최적화
      • 대역폭 절약 및 전송 속도 증가 
    • 비동기 I/O (NIO, Netty) 활용 
      • 네트워크가 대기 상태로 멈춰 있지 않도록 함
  • 스프링 부트-내장 서버(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 튜닝, 캐싱
    • 데이터베이스 최적화 -> 인덱스 추가, 쿼리 개선