Hipster
차트 공개 기준이 저장소마다 달라지던 문제 해결
배치가 끝나도 저장소마다 다른 버전이 노출될 수 있었습니다.
chart_publish_state.current_version을 단일 공개 기준으로 세우고,
모든 응답 경로가 같은 버전을 따르도록 맞췄습니다.
- 차트 공개 기준
- 공개 버전 한 기준으로 관리
- 차트 공개 기준 적용 범위
-
캐시, 검색 인덱스, 갱신 시각이 같은 결과를 따르도록 정리
사례 요약 보기
Hipster
역할 분리를 통한 차트 조회 성능 개선
단일 저장소 의존으로 인한 응답 지연을 방지하기 위해 조회 캐시, 검색, 메타데이터 조회를 분리하여 Read Path를 재설계했습니다.
- 차트 장르 필터 응답 시간
- 65,421ms → 178.37ms
- 차트 갱신 시각 응답 시간
- 4,732ms → 1.00ms
사례 요약 보기
SNS
EXPLAIN 분석을 통한 대용량 피드 조회 최적화
1억 4천만 건 조인 환경에서 임시 테이블과 정렬 병목을 해소하고 @BatchSize 조회 방식을 선제 적용했습니다.
- 피드 기본 조회 응답 시간
- 29,000ms → 45ms
- 피드 정렬 대상 row 수
- 7,236 → 1,091
사례 요약 보기
Hipster
비동기 파이프라인 및 자가 치유 구조를 통한 결과적 일관성 확보
메시지 큐 분리와 Anti-Entropy 배치 구현을 통해 동시 경합으로 발생하는 DB 커넥션 고갈 위협을 해소했습니다.
- 차트 재생성 배치 시간
- 약 87.9분 → 약 23.9분
- ES 재색인 총 시간
- 7,455.67ms → 953.67ms
사례 요약 보기
Hipster
원본 평점 테이블에 몰린 조회·갱신 부담 분리
원본 평점 테이블에 몰린 조회 책임과 쓰기 책임을 분리하고, 릴리즈
단위 집계 계층을 세워 조회와 차트의 기준 데이터를 분리했습니다.
- 평점 집계 조회 응답 시간
- 806ms → 20ms
- 평점 동시 등록 평균 응답 시간
- 126ms → 12.95ms
사례 요약 보기
Hipster
테이블 책임 분리를 통한 연쇄 쓰기 쿼리 최적화
유저 가중치 반영 시의 원본 평점 재기록 오류를 해결하고 점수 연산을 위임하여 무의미한 연쇄 쓰기를 차단했습니다.
- 유저 가중치 배치 시간
- 921,000ms → 359,200ms
- 유저 통계 계산 시간
- 10,420ms → 1,138ms
사례 요약 보기
SNS
DB 관통 방어를 위한 계층형 캐시 전략
정적, 가변 데이터를 계층 분리하여 캐싱하고 삭제된 데이터에 대해 Null Object 패턴을 반환하여 원본 조회 차단에 성공했습니다.
- 좋아요 평균 응답 시간
- 500ms → 169ms
- 좋아요 처리량
- 101.1건/s → 315.5건/s
사례 요약 보기
SNS
스레드 덤프 분석을 통한 커넥션 풀 사이즈 하향 튜닝
제한된 코어 내에서의 풀 증설이 스레드 경합 상태 악화를 유발함을 입증하고 서버 자원에 맞게 커넥션 상한치를 오히려 하향 최적화했습니다.
- 평균 응답시간 최적화
- 310ms → 234ms (24.5% 단축)
- 95% 응답시간 안정화
- 1,193ms → 880ms (26.2% 단축)
사례 요약 보기
Hipster
Outbox 패턴을 통한 비동기 적립 이벤트 재처리 아키텍처
2PC 분산 트랜잭션 수립이 어려운 환경에서, 로컬 DB 커밋과 보관 테이블을 구축하고 메시지 큐 이벤트의 멱등성을 검증했습니다.
- 멱등 기준
- 승인 식별자 기준 1건당 최대 1회 적립
- 정책 상태
- 한도 초과와 상쇄 기록으로 구분
사례 요약 보기
SNS
Redis 장애 시 읽기와 쓰기 복구 전략 분리
단일 캐시 인프라 장애 발생 시 데이터 성격별로 폴백 우회와 보관 재처리를 나누어 시스템 전체의 복원력을 높였습니다.
- 읽기 복구
- 재시도와 서킷 브레이커 뒤 DB 우회
- 쓰기 복구
- 보류 큐 적재 후 Redis 복구 시 재실행
사례 요약 보기