
백엔드
사람은 떠났는데 권한은 남았다
두줄요약
관계 원천과 인가 튜플을 Outbox·CDC·Kafka로 동기화해 잔존 권한 문제를 줄이는 구성을 다뤘습니다. 부분 실패, 캐시, 감사 이력까지 함께 고려한 운영 포인트도 정리했습니다.
문제 상황
- 관계 데이터가 도메인 서비스에 흩어져 있고, 인가 엔진의 튜플 상태가 원천 변경을 제때 따라가지 못하는 구조
- 조직 이동이나 퇴사 이후에도 옛 관계가 남아 잔존 권한이 생기고, 반대로 새 권한은 늦게 반영되는 문제
구조와 흐름
- 기존 Outbox·CDC·Kafka 레일 위에 인가 컨슈머와 튜플 쓰기 서비스를 얹는 동기화 파이프라인 구성
- 도메인 이벤트를 관계 생성·삭제 명령으로 번역해 인가 엔진의 튜플 상태를 갱신
- 튜플 변경 이력을 시간순으로 남겨 변경 전파와 감사 추적에 활용
트레이드오프
- 관계 개편 시 여러 튜플을 여러 덩어리로 나눠 쓰면서 부분 성공 가능성 수용
- 허용 방향의 불일치를 더 위험하게 보고, 민감 데이터는 캐시를 배제하는 보수적 선택 적용
- 캐시 무효화 대신 최신성 기준으로 우회 여부를 판단해 지연과 안전성 사이를 조정
성능/운영 포인트
- 컨슈머 랙, 처리 시간, Outbox→Kafka 지연을 모니터링하며 초~분 단위 창을 관리
- 재시도와 중복 수신 방지, 이벤트 고유 ID로 순간 실패 흡수
- 실패 이벤트 재처리 경로는 별도 과제로 남겨 둠
