메시지 처리율 12%, 48,573건 유실. Queue 분리와 파티셔닝으로 Delivery avg 0.33ms를 달성한 과정.
동기 호출로 연결된 매칭-채팅 서비스에서 장애 전파와 채팅방 누락이 발생했다. Outbox Pattern과 Redis Streams로 서비스를 격리하고 이벤트 유실 0건을 달성한 과정.
인덱스 추가만으로는 실행 계획이 바뀌지 않았다. 데이터 분포를 근거로 WHERE 조건을 재작성하여 2683ms → 829ms, 69% 개선을 달성한 과정.
EXPLAIN ANALYZE로 gym_booking의 활성 회원 집계 쿼리가 왜 느린지 증명하고, 병목을 찾는 절차를 정리한다.
쿼리 튜닝의 전제 조건인 백만 단위 더미 데이터를 생성하고, 데이터 분포 특성이 인덱스 설계 방향을 결정하는 과정.
A→B, B→A 동시 스와이프 시 중복 매칭과 데드락이 발생하는 구조적 문제를 Redisson 분산 락과 ID 정렬 기반 단일 락 키로 해결한 과정.
gym_booking 스키마의 ERD와 조인 경로를 분석하고, 성능 병목의 중심인 user_memberships 테이블을 파악한다.
gym_booking DB 구성부터 더미 데이터, EXPLAIN 분석, 인덱스 최적화까지 전 과정을 기록한 SQL 튜닝 시리즈 개요.
k6로 1,000 VU를 쏟아부은 부하 테스트에서는 문제가 없었습니다. 그런데 실제 100명의 학생이 동시에 버튼을 누르는 순간, Grafana에는 어떤 그래프가 그려졌을까요?
GPS 좌표 하나로는 '어디'인지 알 수 없습니다. 행정구역, POI, 도로 정보를 PostGIS 공간 쿼리로 통합하고, GiST 인덱스 최적화로 1500ms → 45ms까지 개선한 역지오코딩 시스템 구축 과정을 공유합니다.
Redis ZSet의 ZPOPMIN 하나로 재고 차감과 티켓 번호 부여를 원자적으로 해결하고, MySQL 조건부 UPDATE와 Unique Constraint로 3중 안전장치를 구성하여 overselling 0건을 달성한 과정을 공유합니다.