🎯 개요
실무에서는 엑셀 업로드나 대량 데이터 저장 작업 시,
멀티 스레드나 비동기 처리를 적용해 성능을 개선한 경험이 종종 있었습니다.
하지만 실제로 "얼마나 빨라지는 걸까?" 라는 궁금증이 들어,
직접 더미 데이터를 만들어 단일 스레드 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 에 정리되어 있습니다.
'프로그래밍 > Java' 카테고리의 다른 글
💻 [Java & Spring] 비동기 처리와 스레드, 언제 쓰고 어떻게 써야 할까? (0) | 2025.07.01 |
---|---|
📌 [Java] Virtual Thread vs 일반 Thread – 직접 비교해봤습니다 (1) | 2025.04.16 |
📌 [Java] 요즘 핫한 Virtual Thread를 알아보자 ☕ (0) | 2025.04.16 |
📌 [Spring Security] Spring Boot + JWT 인증 시스템 구현 가이드 (1) | 2025.03.27 |
📌 [Java & React] Spring AI + Ollama + Redis를 활용한 미니 챗봇 개발 - 3탄 : 대화 기록 저장 및 Redis 캐싱 (0) | 2025.03.13 |