피드로 돌아가기
nginx 설정 없이 우아하게 서비스 점검하기 (上)
컬리 기술블로그컬리 기술블로그
Backend

nginx 설정 없이 우아하게 서비스 점검하기 (上)

컬리가 nginx 설정 권한 없이 애플리케이션 레벨 차단 시스템(AccessBlock)을 구축해 DB 점검 중 실시간 요청 차단

2025년 10월 10일12intermediate

Context

재고 DB 점검 중 미공지 작업자들의 적치 요청으로 인한 비동기 API 에러가 발생했고, 보상 트랜잭션이 없어 수기 재고 조정이 필요했습니다. 개발팀은 nginx 설정 변경 권한이 없어 시스템 차원에서 요청을 즉각 차단할 방법이 필요했습니다.

Technical Solution

  • AccessBlock 초기 버전: MySQL에 access_block(path 목록) 및 access_block_group(그룹 묶음) 테이블 생성 후, 프론트 페이지 라우팅 시마다 REST API로 차단 여부 조회 및 일치 시 점검 페이지로 리다이렉트
  • 클러스터별 차단 추가: access_block 테이블에 cluster 컬럼 추가하여 특정 클러스터만 차단 가능하도록 확장
  • Redis 캐싱 도입: AccessBlock 및 AccessBlockGroup 메타데이터를 Redis에 주기적으로 동기화하고, toggle 상태를 BLOCKED_…ID_LIST 형태로 Redis에서만 관리
  • 캐싱 정책: 메타데이터 등록/수정/삭제 시 즉시 Redis 캐싱, 차단 여부 조회 API 100번째 호출 시 추가 캐싱으로 RDBMS 의존도 감소

Impact

차단 여부 조회 시 Redis 응답으로 인한 응답 속도 향상이 발생했습니다. 부수 효과로 매 페이지 차단 여부 조회 API 호출을 통해 토큰 만료 시 즉시 로그아웃 처리 가능해졌습니다.

Key Takeaway

DBA 권한 부재나 인프라 변경 불가 상황에서 애플리케이션 레벨 메커니즘으로 서비스 점검 대응이 가능하며, RDBMS 의존성을 Redis로 분리하면 DB 장애 상황에서도 설정 변경 없이 차단 정책을 유지할 수 있습니다.


개발팀이 인프라 권한이 제한된 환경에서 서비스 점검이 필요할 때, 애플리케이션 내 차단 로직 + 메타데이터를 Redis로 캐싱하면 RDBMS 다운 상황에서도 독립적으로 API 및 화면 단위 차단을 실시간으로 제어할 수 있습니다.

원문 읽기