본문 바로가기
Java

성능 튜닝의 중요성

by AlbertIm 2024. 12. 15.

시작

성능 튜닝의 중요성에 대해 정리하고자 합니다.

본문

몇 가지 성능 용어 정리

  • 지연 시간(Latency): 요청을 보낸 후 응답을 받을 때까지 걸리는 시간
  • 처리량(Throughput): 단위 시간당 처리할 수 있는 요청의 수
  • 활용도(Utilization): 시스템의 자원을 얼마나 사용하고 있는지를 나타내는 지표
  • 효율성(Efficiency): 시스템이 자원을 얼마나 효율적으로 사용하고 있는지를 나타내는 지표
  • 용량(Capacity): 시스템이 처리할 수 있는 요청의 수
  • 확장성(Scalability): 시스템이 요청이 증가할 때 얼마나 많은 자원을 추가로 사용할 수 있는지
  • 성능 저하(Degradation): 시스템이 요청을 처리하는 데 걸리는 시간이 증가하는 현상

성능 튜닝에서의 시간

  • 시간의 정밀도: 최소 시간의 단위
  • 시간의 정확도: 시간의 측정값이 실제 시간과 얼마나 차이가 나는지
  • 시간의 측정값의 이해: 항상 시간의 측정값을 이해하고 분석해야 함(시간의 정밀도, 정확도)
  • 시간의 입상도(granularity) or 구별력(distinguishability): 다른 값과 구별할 수 있는 가장 짧은 시간
  • 분산 네트워크에서의 시간: 네트워크의 지연 시간, 분산 시스템 각각의 시간의 차이 등

성능 분석

성능 분석의 핵심은 아래와 같습니다.

  1. 측정 대상 알기 - 어떤 부분을 측정할 것인지 결정 (예: 응답 시간, 처리량)
  2. 측정 방법 알기 - 어떻게 측정할 것인지 결정 (예: 로그 분석, 모니터링)
  3. 성능 목표 알기 - 어떤 성능을 달성할 것인지 결정 (예: 동시 접속자 90명 이상, 응답 시간 1초 이하)
  4. 언제 멈춰야 할지 알기 - 언제 성능 튜닝을 멈출 것인지 결정 (예: 90%의 성능 목표 달성)
  5. 성능 튜닝 비용 알기 - 얼마나 비용을 투자할 것인지 결정 (예: 튜닝하는데 1주일, 1억 원, 1명의 개발자)
  6. 위험성 알기 - 성능 튜닝을 했을 때 발생할 수 있는 위험성을 알아야 함 (예: 성능 튜닝을 했을 때 시스템이 불안정해질 수 있음)

성능 문제가 무엇인지 알기

성능 문제는 하드웨어와 소프트웨어의 성능 간의 불균형, 폰 노이만 병목 현상 등이 있습니다. 뿐만 아니라 네트워크, 디스크, 데이터베이스, 알고리즘 등도 성능 병목의 원인이 될 수 있습니다.

하드웨어와 소프트웨어 성능 간의 불균형

  • 무어의 법칙은 인텔의 공동 설립자인 고든 무어가 1965년에 제시한 법칙으로 집적 회로(IC)의 트랜지스터 수가 약 2년마다 두 배로 증가한다는 관찰 결과입니다.
  • 무어의 법칙에 따라 성능도 두 배로 증가해야 하는 것 같지만 하드웨어의 성능은 소프트웨어의 성능을 대표할 수 없습니다.
  • 소프트웨어의 성능은 조금 더 복잡한 원인이 있습니다. 소프트웨어의 성능은 하드웨어의 성능과는 다르게 무한히 증가할 수 없습니다.

폰 노이만 병목 현상

폰 노이만 구조는 CPU와 메모리가 분리되어 있어 CPU가 메모리에 접근할 때 지연 시간이 발생하는 구조입니다. 이러한 구조적 한계로 인해 메모리 대역폭이 성능 병목의 주요 원인이 될 수 있습니다.

  • 레지스터: CPU 내부에 있는 메모리
    • L1 캐시: 0.5ns
    • L2 캐시: 7ns (14x L1 캐시)
  • 메인 메모리: CPU 외부에 있는 메모리
    • RAM: 100ns (20x L2 캐시, 200x L1 캐시)
  • 솔리드 스테이트 드라이브(SSD): 하드 디스크 대용으로 사용되는 저장 장치
    • SSD: 1ms ~1GB/s (4x 메인 메모리)
  • 하드 디스크: 데이터를 저장하는 저장 장치
    • HDD: 20ms (80x 메인 메모리, 2000x L1 캐시)

캐시 미스

캐시 미스는 캐시에 데이터가 없어서 메인 메모리에서 데이터를 가져오는 현상입니다. 새로 가져온 데이터를 저장하기 위해 기존 있던 캐시 항목 중 하나를 제거해야 합니다. 이때 교체할 캐시 항목을 결정하는 널리 사용되는
알고리즘은 다음과 같습니다.

  • LRU(Least Recently Used): 가장 오랫동안 사용하지 않은 캐시 항목을 제거
  • LFU(Least Frequently Used): 가장 적게 사용된 캐시 항목을 제거
  • FIFO(First In First Out): 가장 먼저 들어온 캐시 항목을 제거

하지만 그래도 캐시 미스가 발생하면 성능 저하가 발생할 수 있습니다.

자바 성능 튜닝의 어려움

자바는 가비지 컬렉션, 스레드 스케주링, JIT 컴파일 등의 기능을 제공하는 관리형 언어입니다. 이러한 기능은 개발자의 생산성을 높이지만 다른 C, C++과 같이 직접 관리하지 않기 때문에 성능 튜닝이 어려울 수
있습니다.

마무리

성능 분석 방법 및 성능 문제에 대해 알아보았습니다. 아직 성능 튜닝의 대행 깊이 있는 내용은 다루지 않았지만 성능 튜닝의 필요성을 알 수 있었습니다.

참조

'Java' 카테고리의 다른 글

메이븐  (0) 2024.12.30
가비지 컬렉션  (1) 2024.12.19
자바 동시성 기초  (1) 2024.12.14
클래스 로딩  (1) 2024.12.05
자바 17  (0) 2024.12.04

댓글