7ms로 끝내는 인가 체크, flex는 아키텍처부터 다르게 설계합니다

7ms로 끝내는 인가 체크, flex는 아키텍처부터 다르게 설계합니다
“우리는 모든 요청에 대해 인가 체크를 수행합니다. 그리고 그 응답은 7ms 이내에 도착해야 하죠.”
이 말은 단순한 성능 수치가 아닙니다. flex가 지금까지 걸어온 구조적 고민과 아키텍처 설계 철학의 결과입니다.
지난 flexible#1에서는 Product Group이 분산환경에서 신뢰성 있는 이벤트 스트리밍 구조를 어떻게 만들었는지, 그리고 그 위에서 모든 요청을 안전하게 제어하는 인가 시스템을 어떻게 구현했는지를 공유했습니다. 우리가 왜 이런 구조를 선택했고, 어떤 고민을 통해 구현했는지를 함께 담고자 합니다.
분산환경에서는 메시지를 신뢰할 수 없습니다
시스템이 단일 프로세스에서 벗어나기 시작하면서, 우리는 익숙한 가정 몇 가지를 포기해야 했습니다. 메시지는 유실될 수 있고, 중복될 수 있으며, 순서대로 도착하지 않을 수도 있습니다. Kafka를 사용한다고 해도, 메시지가 “정확히 한 번” 도달하리라는 보장은 없습니다.
그래서 flex는 메시지를 신뢰하지 않기로 했습니다.
대신 어떤 상황에서도 이벤트가 신뢰할 수 있는 방식으로 흘러갈 수 있는 구조를 설계했습니다. 이벤트가 발생하면 도메인 로직과 함께 Outbox 테이블에 메시지를 저장하고, 이 저장은 하나의 트랜잭션으로 묶입니다. CDC(Debezium)가 이를 감지하면 Kafka에 publish하고, 메시지를 받은 Consumer는 이를 처리합니다. 동일 메시지가 중복 수신되더라도 이미 처리한 적이 있는지를 확인할 수 있도록 consume log를 함께 기록합니다.
이처럼 이 일관성은 기능 수준의 처리가 아니라, 메시지 저장 방식부터 소비 흐름까지 설계된 구조를 통해 보장됩니다.
우리는 모든 요청의 인가 판단을 7ms 이내로 설계했습니다
flex에서는 모든 요청이 인가 체크를 거쳐야 합니다. 조직 구조는 매일 바뀌고, 승인 권한은 사람마다 다르며, 정책은 팀마다 다르게 설정되어 있습니다. 이 모든 것을 반영하면서도 속도를 유지하는 일은 쉬운 일이 아닙니다.
우리는 인가 로직을 아예 비즈니스 로직 바깥으로 꺼냈습니다. 인가 시스템은 도메인 이벤트를 기반으로 권한 관계를 구성하고, 그 결과를 별도의 저장소에 구축합니다. 이 저장소는 관계 기반 권한 모델인 ReBAC 구조로 설계되어 있으며, OpenFGA를 기반으로 빠르게 판단할 수 있도록 구성했습니다.
모든 API 요청은 이 인가 서버에 질의하여 결과를 얻고, 평균적으로 7ms 이내에 응답을 반환합니다. 권한 체크가 제품의 성능 병목이 아니라, 일관성과 보안을 지켜주는 구조적 레이어가 되도록 만든 셈입니다.
인가를 분리한 후, 그 자리에 실험이 들어갈 수 있게 되었습니다
인가가 빠져나간 도메인은 훨씬 더 가벼워졌습니다. 기능을 설계할 때마다 “누가 이걸 볼 수 있어야 하지?”라는 질문을 고민하지 않아도 됩니다. 공통 기능들은 재사용이 쉬워졌고, impersonate, multi-tenant, scoped access 등 복잡한 권한 시나리오도 하나의 인가 시스템이 담당할 수 있게 되었습니다.
우리는 시스템의 복잡도를 줄이기 위해 권한 체크를 없앤 것이 아니라, 복잡한 권한을 감당할 수 있도록 시스템 구조를 나눈 것입니다. 이렇게 구조적으로 분리된 아키텍처는 단지 유지보수를 쉽게 하기 위해서가 아니라,더 빠르게 실험하고 더 쉽게 확장하기 위해 설계된 것이었습니다.
속도를 유지하고, 팀의 난이도를 낮춘다
결과적으로 우리가 얻은 것은 빠른 응답 속도뿐만이 아니었습니다. 각 스쿼드는 자신이 맡은 기능에 집중할 수 있게 되었고, Platform Division은 기능별로 분산된 인가 판단을 하나로 모아 통합적인 판단을 내릴 수 있게 되었습니다. 제품팀이 빠르게 실험하고, 실험이 장애가 되지 않도록 만들며, 그 위에 무너지지 않는 인프라를 만들어가는 일. 우리는 그것이 바로 Platform Division이 존재하는 이유라고 생각합니다.
flex는 그렇게 일합니다. 좋은 제품을 만들기 위해, 속도를 유지하고, 팀의 난이도를 낮추는 방향으로 구조를 설계합니다.
앞으로도 flexible을 통해 개발 경험과 통찰을 꾸준히 공유할 예정입니다. 많은 관심과 참여 부탁드립니다!
발표 자료와 설계 과정을 더 깊이 들여다보고 싶다면,

이번에 공유한 아키텍처 설계 과정과 인가 시스템 구성에 대한 발표 자료, 그리고 실제 구현에 대한 논의가 궁금하시다면, 지금 flex Discord 채널에서 플렉스팀과 직접 이야기를 나눠보실 수 있습니다.
flexible#1 발표 자료 보러가기