본문 바로가기

Note3

[Note] 혼합 워크로드 환경에서의 처리 전략 들어가기 전배치 애플리케이션을 설계할 때 흔히 저지르는 첫 번째 오류는, 모든 작업을 하나의 성격으로 간주하는 것이다. 실제 운영 환경에서의 배치는 대개 순수한 I/O 바운드도 아니고 순수한 CPU 바운드도 아니다. 두 특성이 단계적으로, 혹은 동시에 교차한다. 문제는 이 혼합 상태를 단일 실행 모델로 처리하려 할 때 발생한다. 예를 들어 Reader는 DB에서 이미지 메타데이터를 조회하고, Processor는 외부 HTTP API를 호출하여 이미지를 분석한 뒤, 추가적으로 로컬에서 feature 계산을 수행하며, Writer는 결과를 upsert한다. 이 구조는 전형적인 혼합 워크로드다. HTTP 호출은 I/O Burst이고, feature 계산은 CPU Burst다. Writer는 다시 JDBC ba.. 2026. 2. 24.
[Note] 성능 개선 전략: 인덱스, 역정규화 들어가기 전성능 개선을 이야기할 때 가장 흔하게 등장하는 단어는 인덱스다.쿼리가 느리면 인덱스를 추가하고 그래도 느리면 인덱스를 하나 더 추가한다.하지만 실무에서는 인덱스를 아무리 추가해도 성능이 거의 개선되지 않는 경우가 분명히 있을 뿐더러 오히려 무분별한 인덱스 추가는 쓰기 성능 저하, 저장 공간 증가, 인덱스 유지·관리 비용 상승 같은 부작용을 낳을 수 있다.이 글은 그런 상황에서 출발한다.호텔을 검색할 때 전형적인 읽기 중심 도메인을 기준으로 정규화된 모델이 왜 느려지는지 그 문제를 해결하기 위해 왜 역정규화를 먼저 선택하게 되는지 그 이후 인덱스와 비트맵 설계가 어떤 역할을 맡게 되는지를 순서대로 정리한다.핵심은 "어떤 기법이 빠르다"가 아니라 "어떤 문제에 어떤 순서로 접근해야 하는가" 다.1.. 2026. 2. 2.
[Note] 대량 Delete 작업 중 발생한 lock 문제 분석 1.문제 상황Spring Batch 기반의 백엔드 시스템에서 멀티 스레드로 대용량 삭제 작업을 수행하는 중 지속적으로 락 대기 시간 초과(Lock wait timeout) 이 발생하였습니다. 해당 배치 작업은 총 10개의 스레드가 병렬로 실행되며 대부분의 데이터를 미리 Processor 레벨에서 가공하여 삭제 -> insert 하는 방식으로 실행되었는데 예를 들어 tb_order_item 테이블에서 특정 order_id 목록에 해당하는 행들을 한꺼번에 삭제하는 형태였습니다.-- 예시: 하나의 스레드가 실행하는 삭제 쿼리 (IN 절에 다수의 ID 포함)deletefrom tb_order_itemwhere order_id in (101, 102, ..., 250);대게 그렇듯이 다른 테이블들도 유사한 패턴으.. 2026. 1. 6.