2026/06 3

[Design Doc] PG 외부 연동 장애 대응 설계 (6주차 · 6팀 · 조수현)

TL;DRFeignClient로 PG를 호출하는 결제 시스템에서 Timeout + Retry + CircuitBreaker 조합을 적용해 PG 장애가 전체 서비스로 번지는 Cascading Failure를 차단했다. 타임아웃/CB Open 시 PENDING 유지 + 30초 배치 복구로 상태 정합성을 보장한다.Introduction & GoalsContext / Background결제 요청 시 우리 서버가 PG(Payment Gateway)를 FeignClient로 동기 호출한다. PG는 외부 시스템이므로 응답 지연이나 장애를 제어할 수 없다. Tomcat 스레드 풀(기본 200개)은 PG 응답을 기다리는 동안 블로킹 상태로 묶이며, 스레드가 고갈되면 결제와 무관한 상품 조회나 주문 생성까지 503을 반환..

카테고리 없음 2026.06.26

[Benchmark] MySQL 인덱스 전략 비교 — 좋아요 순 상품 목록 최적화 (5주차 · 6팀 · 조수현)

TL;DR상품 목록 API의 좋아요 순 정렬 성능을 확보하기 위해 13개 시나리오에서 인덱스 전략을 실측 비교했다.brand_id 단일 인덱스만으로 풀스캔 대비 100ms → 0.1ms(약 1,000배) 를 달성했으며,읽기 성능이 사실상 동일한 반정규화 vs 분리 테이블 중동시 쓰기의 락 경합 격리를 이유로 product_like_view 분리 테이블을 선택했다.Question — 무엇을 비교했는가결정해야 했던 것브랜드별 상품 목록을 좋아요 순으로 정렬하는 API에서 두 가지 질문을 동시에 풀어야 했다.인덱스 전략: 인덱스 없음 / 단일(brand_id) / 복합(brand_id, like_count DESC) / 커버링 중 어느 수준까지 필요한가?like_count 저장 구조: products 테이블에..

카테고리 없음 2026.06.22

[Design Doc] 쿠폰 테이블 설계 (6팀, 4주차, 조수현)

TL;DRCouponTemplate과 UserCoupon을 분리하고, isActive(신규 발급 차단)와 isBlocked(기존 쿠폰 전량 차단)를 별도 책임으로 설계했다. CouponStatus는 DB에 저장하지 않고 조회 시점에 계산한다.Introduction & GoalsContext: 쿠폰 정책(할인율, 유효기간)과 발급본(소유자, 사용 여부)을 하나의 테이블로 관리하면 정책 변경 시 발급된 전체 row가 영향을 받는다. 100만 명이 발급받은 쿠폰의 할인율이 잘못됐으면 100만 row를 UPDATE해야 한다.Goals: 정책 변경이 기존 발급 쿠폰에 소급 적용되지 않는 구조. 운영자가 신규 발급만 막거나, 기존 쿠폰 사용까지 막거나, 두 가지를 독립적으로 제어할 수 있을 것.Detailed De..

카테고리 없음 2026.06.12