💻 [Java] 단일 vs 멀티 스레드, 직접 실험해본 성능 차이
2025. 7. 1. 18:15

🎯 개요

실무에서는 엑셀 업로드나 대량 데이터 저장 작업 시,
멀티 스레드나 비동기 처리를 적용해 성능을 개선한 경험이 종종 있었습니다.

하지만 실제로 "얼마나 빨라지는 걸까?" 라는 궁금증이 들어,
직접 더미 데이터를 만들어 단일 스레드 vs 멀티 스레드 처리 시간을 비교해보는 실습을 진행해보았습니다.


1️⃣ 실습 목표

✔ 단일 스레드와 멀티 스레드 처리 시간 비교
✔ ExecutorService 기반 병렬 처리 실습
✔ 데이터는 10,000건의 가짜 문자열
✔ 저장 로직은 1ms sleep으로 I/O 시뮬레이션


2️⃣ 실습 코드 요약

List<String> dataList = new ArrayList<>();
for (int i = 0 ; i < 10000; i++) {
    dataList.add("Data_" + i);
}

 

✅ 단일 스레드 처리

long start = System.currentTimeMillis();
for (String data : dataList) {
    simulateSave(data); // Thread.sleep(1)
}
long end = System.currentTimeMillis();
System.out.println("단일 스레드 처리 시간: " + (end - start) + "ms");​

 

✅ 멀티 스레드 처리

ExecutorService executor = Executors.newFixedThreadPool(4);
List<Future<?>> futures = new ArrayList<>();

// 데이터 청크 분할 및 병렬 처리
for (int i = 0; i < 4; i++) {
    List<String> chunk = ...; // 각 스레드에 1/4씩 나눔
    futures.add(executor.submit(() -> {
        for (String data : chunk) simulateSave(data);
    }));
}
for (Future<?> f : futures) f.get();
executor.shutdown();

 

✅ 저장 시뮬레이션 함수

private static void simulateSave(String data) {
    Thread.sleep(1); // I/O 지연 시뮬레이션
}

3️⃣ 실습 결과

(테스트 환경에 따라 결과는 다를 수 있습니다)

==== 단일 스레드 처리 ====
단일 스레드 처리 시간: 10062ms

==== 멀티 스레드 처리 ====
멀티 스레드 처리 시간: 2637ms

➡ 약 70% 이상 처리 시간 단축
➡ 스레드 수(threadCount)를 조정하면 더 다양한 실험 가능


🚀 회고 및 팁

  • 실무에서 @Async나 메시지 큐 기반 처리도 써봤지만,
    이렇게 직접 실습해보니 멀티 스레드의 성능 차이가 체감되었습니다.
  • 스레드 개수는 CPU 코어 수 또는 작업 유형(IO or CPU)에 따라 조절해야 최적화됩니다.
  • 실무에서는 반드시 스레드 풀 설정값(corePoolSize, queueCapacity)도 함께 튜닝해야 하며,
    트랜잭션 분리, 예외 처리 구조도 고려해야 합니다.
  • 단순 반복 로직이라도, 데이터를 잘게 나누어 병렬 처리하면 체감 성능이 확연히 좋아지는 구조라는 걸 다시 확인했습니다.

📚 추가 자료

전체 예제 코드는 👉 GitHub - mingstagram/daily-cs-study/blob/main/src/thread/MultiThreadTest.java 에 정리되어 있습니다.