외부 시스템이 죽어도 우리는 살아야 한다 — CircuitBreaker로 회복 탄력성 확보하기
외부 시스템은 언제든 느려지고, 언제든 죽는다. SLO를 기준으로 Timeout과 CircuitBreaker를 설정하고, 장애 전파를 막는 방법을 정리했다.
외부 시스템은 언제든 느려지고, 언제든 죽는다. SLO를 기준으로 Timeout과 CircuitBreaker를 설정하고, 장애 전파를 막는 방법을 정리했다.
상품 목록, 상품 상세, 브랜드 조회에 각각 다른 캐시 전략을 적용한 과정. 인덱스 방향 최적화와 캐시를 적용해 p99 1.08s에서 74ms로 93% 개선, RPS 113에서 153으로 35% 향상한 경험을 담았습니다.
낙관적/비관적 락의 이름 유래부터 동작 방식, 선택 기준까지 정리. 1979년 Kung & Robinson 논문에서 시작된 개념을 바탕으로 포인트 차감과 좋아요 기능 구현 시 어떤 락을 선택했는지 실무 관점에서 공유합니다.
여러 도메인을 조합하는 객체를 Domain 레이어에 두었다가 Application 레이어로 옮긴 과정. 도메인 객체와 조회 모델의 경계를 구분하고, 레이어 간 책임을 명확히 분리하는 설계 기준을 정리했습니다.
루퍼스 2주차에서 배운 내용과 얻은 인사이트를 정리했습니다.
OrderItem을 설계하면서 Value Object와 Entity 사이에서 고민한 과정. 동등성, 라이프사이클, 불변성이라는 세 가지 기준으로 두 개념을 구분하고, 도메인 특성에 따라 Entity로 결정한 이유를 담았습니다.
루퍼스 1주차에서 배운 내용과 얻은 인사이트를 정리했습니다.
테스트 없이 개발하던 환경에서 1년간 단위 테스트와 통합 테스트를 배우고 적용하며 얻은 인사이트. 좋은 테스트 4대 요소, 단위/통합 테스트의 차이, 테스트 더블 활용법까지 실무 경험을 담았습니다.
병원 통계에 AI 분석 기능을 추가하며 겪은 시행착오와 개선 과정. 동기 방식에서 이벤트 기반 비동기로 전환하고, 프롬프트 엔지니어링과 UX 개선까지의 경험을 담았습니다.
통계-진료 테이블 수치 불일치 문제를 DRY 원칙으로 해결한 경험. 신규/이탈 판정 로직을 서비스로 분리하고 단일 데이터 소스로 통합해 불일치 문의 0건, 개발 시간 절반 단축을 달성한 과정을 공유합니다.