성능최적화(3)
-
Java ForkJoinPool의 Work-Stealing 알고리즘 완벽 가이드: 고성능 병렬 처리의 비밀
Java의 ForkJoinPool로 알아보는 Work-Stealing 동시성 모델이번 포스팅에서는 Java의 동시성 처리를 위한 ForkJoinPool과 Work-Stealing 알고리즘에 대해 알아보겠습니다. Java 7부터 도입된 이 기능은 멀티코어 환경에서 효율적인 병렬 처리를 가능하게 해주는 중요한 도구입니다."ForkJoinPool은 병렬 스트림과 CompletableFuture가 사용하는 실행 메커니즘이자, 고성능 작업 분할을 위한 핵심 프레임워크입니다."- Doug Lea (Java의 java.util.concurrent 패키지의 주요 설계자)ForkJoinPool의 필요성일반적인 ThreadPool만으로는 다음과 같은 한계가 있습니다:작업 분배의 불균형: 일부 스레드에 작업이 집중되는 현상..
2025.03.16 -
호텔 데이터 마이그레이션 최적화 - 인덱스 & UPSERT
들어가며: 호텔 표준 데이터 최신화의 시작"36GB의 호텔 데이터 마이그레이션 해주세요."호텔 표준 데이터 최신화 프로젝트에서 마주한 첫 번째 과제였습니다. 호텔 데이터는 단순한 flat한 구조가 아닌, 6개의 테이블로 분산되어 저장되어야 했습니다:제가 생각한 이 마이그레이션의 핵심 요구사항은 "데이터 정합성"이었습니다. 하나의 호텔 데이터가 이 6개 테이블에 모두 성공적으로 저장되거나, 아니면 전혀 저장되지 않아야 했습니다("All or Nothing").또한 기존 데이터가 있을 수 있어 INSERT가 아닌 UPSERT를 사용해야 했죠.메모리 한계를 고려해 batch size를 100으로 설정했습니다. 36GB 전체를 한 번에 처리하는 것은 현실적으로 불가능했고, 실패 시 복구도 용이해야 했기 때문입니..
2025.02.16 -
Kibana 로그 파묘 및 부검 후, 사수님 양지바른 곳으로 매장(?)해드리기
> 이 글은 Elastic APM이 Kibana에 수집하는 데이터를 바탕으로, transaction 및 span 같은 주요 이벤트의 종류와 의미를 분석하며, 이를 통해 성능 병목 문제를 어떻게 확인하고 해결할 수 있는지에 대해 설명합니다. 또한, 실제 사례를 통해 문제가 발생한 원인을 추적하는 과정을 공유합니다.배경최근에 회사에서 검색을 개선하기 위해 저는 Elasticsearch 를 도입했었습니다.그래서 매번 Elasticsearch 관련 이슈가 생길때마다 항상 제가 도맡아 작업을 하게 됐는데,이러다 보니 팀원들에게 이제 Elastic? —> 채훈님? 이라는 인식이 강하게 박혀있던 찰나, 일이 생겼습니다.금주 개발 서버가 갑자기 원인 모를 이유로 매우 아파하는 이슈가 있었습니다.그리고 그럴때마다 항상 ..
2024.11.24