성능 병목 현상 이해하기

Java 코드 최적화

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

성능 병목 현상이란 무엇일까요?

병목 현상은 애플리케이션의 속도와 효율성을 제한하는 제약 조건입니다.

깔때기에 물을 붓는 상황을 떠올려 보세요. 가장 좁은 부분이 흐르는 속도를 결정합니다!

깔때기를 통과하는 물

Java 코드 최적화

병목 현상의 유형

CPU 바운드 병목 현상

  • 복잡한 계산
  • 비효율적인 알고리즘

I/O 바운드 병목 현상

  • 데이터베이스 작업
  • 네트워크 호출
  • 파일 작업

메모리 바운드 병목 현상(이후 레슨에서 다룸)

Java 코드 최적화

System.nanoTime()으로 성능 측정하기

  • System.nanoTime() - 고정밀 시간 측정
    • 경과 시간 측정
    • long 타입 숫자로 나노초 반환(10억 = 1초)
  • System.currentTimeMillis()와 달리 벽시계 시간을 측정

$$

long startTime = System.nanoTime();
// Code to measure
long endTime = System.nanoTime();
long duration = endTime - startTime;
Java 코드 최적화

System.nanoTime() 사용하기

// Measuring ArrayList.contains() performance
import java.util.ArrayList;
import java.util.List;

List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
    numbers.add(i);
}

long startTime = System.nanoTime(); boolean found = numbers.contains(99999); // O(n) operation long endTime = System.nanoTime();
Java 코드 최적화

System.nanoTime() 사용하기

long duration = endTime - startTime;
System.out.println("Time taken: " + duration + " ns");
// Convert to milliseconds
System.out.println("Time taken: " + duration / 1_000_000.0 + " ms");
Time taken: 1239000000 ns
Time taken: 1239ms
  • ArrayList.contains()는 O(n) 연산입니다
Java 코드 최적화

성능 측정을 위한 모범 사례

  • 여러 번 측정 실행
Java 코드 최적화

여러 번 측정 실행하기

long totalTime = 0;
for (int i = 0; i < 3; i++) {
    long start = System.nanoTime();
    findElementLinear(data, target);
    long iterationTime = System.nanoTime() - start;
    totalTime += iterationTime;
    System.out.println("Run " + (i+1) + ": " + iterationTime + " ns");
}
double averageTime = totalTime / 3.0;
System.out.println("Average: " + (long)averageTime + " ns");
Run 1: 3245678 ns
Run 2: 3198432 ns
Run 3: 3301234 ns
Average: 3248448 ns
Java 코드 최적화

성능 측정을 위한 모범 사례

  • 여러 번 측정 실행
  • 상대적 성능 비교
// Assume we have calculated avgTimeA and avgTimeB already
System.out.println("Operation A is" + (avgTimeA / avgTimeB) + "x slower");
Operation A is 4x slower
Java 코드 최적화

연습해 봅시다!

Java 코드 최적화

Preparing Video For Download...