핵심 원칙(책임 분리) → 보안(최소권한·암호화·로그) → UX(SSO·로그인 2초) → 확장성(OPA)
AuthN과 AuthZ를 묶어 설계할 때 가장 중요하게 본 요소는 '책임 분리 — 인증과 인가의 결정을 같은 레이어에서 섞지 않는 것'입니다. 인증이 흔들리면 인가는 의미가 없어지고, 인가가 복잡해지면 인증의 성능이 함께 죽는 구조를 인턴 때 한 번 봤기 때문입니다.
설계 요소는 세 갈래로 나눠 봤습니다. 첫째, 인증은 표준 프로토콜(OIDC·SAML)에 위임하고 자체 구현은 최소화. 둘째, 인가는 ABAC/RBAC 정책 엔진을 따로 두고 API Gateway에서 평가. 셋째, 토큰은 단명(15분)·리프레시 분리·키 회전 자동화 결입니다.
보안 측면에서는 '최소 권한·암호화·로그' 셋이 끊김 없이 굴러가야 한다고 봤습니다. 특히 세션 토큰 탈취·CSRF·JWT 알고리즘 혼동 세 가지를 가장 흔한 사고 모드로 두고 설계 단계부터 가드를 짰습니다.
사용자 경험 쪽에서는, SSO 1회 로그인으로 5개 도메인 통합·로그인 시간 2초 이내를 목표로 두었습니다. 인턴 때 OIDC 도입 후 평균 로그인 4.2초→1.8초로 줄였던 게 가장 큰 학습이었습니다.
확장성은 정책 변경이 코드 배포 없이 굴러가도록 OPA(Open Policy Agent) 같은 외부 정책 엔진을 두는 결로 갑니다. 사용자가 1만→100만으로 늘어도 정책 평가가 한 곳에서 캐시·롤아웃 가능하다는 점이 결정적이었습니다.