문 앞에서 아무것도 믿지 않기: 모든 함수가 스스로 호출자를 확인하는 이유
상위 어딘가에서 이미 인증했겠지, 라는 가정은 언젠가 틀립니다. 그래서 모든 공개 함수가 자기 본문에서 직접 호출자를 확인합니다.

백엔드 권한 사고는 대개 같은 모양으로 일어납니다. 어떤 함수가 "여기까지 왔다는 건 위에서 이미 확인했다는 뜻"이라고 가정하고, 그 가정이 어느 날 리팩터링으로 조용히 깨집니다.
저희는 그 가정을 아예 하지 않기로 했습니다.
모든 함수가 스스로 확인합니다
공개된 백엔드 함수는 자기가 유일한 방어선인 것처럼 동작합니다. 각 함수의 본문 안에서 호출자를 직접 인증합니다. 미들웨어가 앞에서 걸러 줬을 것이라고 기대하지 않습니다.
중복처럼 보이고, 실제로 중복입니다. 다만 이 중복은 비용이 거의 없고, 없을 때의 비용은 큽니다.
그리고 그것을 테스트가 증명합니다
원칙만으로는 부족합니다. 전용 테스트 스위트가 실제 함수들을 자격 증명 없이 호출하고, 모든 함수가 거부하는지 확인합니다.
이 테스트는 CI에서 돌고, 배포 직전 게이트에서 한 번 더 돕니다. 호출자 확인을 빠뜨린 엔드포인트는 프로덕션에 도달하지 못합니다. 최악을 가정하는 테스트가 먼저 잡아냅니다.
배포 가드
같은 사고방식이 배포에도 적용됩니다. 살아 있는 함수가 조용히 사라지는 배포는 거부됩니다. 이 가드는 실제로 한 번 겪었기 때문에 존재합니다 — 보호되지 않은 배포가 프로덕션 함수를 지운 적이 있습니다.
요점
이것은 정교한 보안 아키텍처가 아닙니다. 오히려 반대로, 정교함을 포기한 쪽에 가깝습니다. 어디서 인증이 일어나는지 추론해야 하는 구조 대신, 모든 곳에서 일어난다고 정해 두면 추론할 것이 없어집니다.
이 글은 작성 시점의 구현 상태를 설명합니다. 수치는 저장소에서 직접 센 값이며, 공개 벤치마크나 성능 보증이 아닙니다.


