인증 아웃소싱의 위험성: Val Town의 Better Auth 마이그레이션에서 얻은 교훈
인증은 종종 상품화된, 즉 해결된 문제로 여겨져 제3자 제공업체에 맡겨 개발 속도를 높일 수 있습니다. 하지만 Val Town이 Supabase에서 Clerk를 거쳐 최종적으로 Better Auth로 이동한 과정을 보면, 아이덴티티 레이어를 외부에 위임하는 결정이 되돌리기 어려운 시스템 위험을 초래할 수 있음을 알 수 있습니다.
많은 스타트업에게 “설정 없이 바로 쓰는” 인증은 큰 매력입니다. 그러나 애플리케이션의 요구사항이 진화할 때—특히 사용자 데이터가 자주 접근·표시되는 소셜 플랫폼에서는—관리형 서비스가 제공하는 추상화가 병목이 될 수 있습니다. 이번 글에서는 Val Town이 Clerk를 포기하고 전환하게 된 이유와 그 과정에서 얻은 아키텍처 교훈을 자세히 살펴봅니다.
"관리형 사용자 테이블"의 위험
현대 인증 서비스에서 가장 논쟁이 되는 아키텍처 패턴 중 하나는 자체 사용자 테이블을 버리고 제공업체를 단일 진실의 원천으로 삼으라는 제안입니다. 초기 설정을 단순화해 주지만, 두 가지 주요 실패 지점을 만들게 됩니다: 신뢰성 및 속도 제한.
속도 제한 함정
서비스가 사용자 테이블을 관리하면 사용자 메타데이터(아바타, 이메일, 설정) 요청마다 해당 API를 거쳐야 합니다. Val Town은 개발 환경에서는 원활히 동작했지만, 실제 운영 환경에서는 상황이 달랐습니다.
"운영 환경에서는 해당 엔드포인트의 속도 제한이 초당 5회였습니다. 전체 계정, 모든 사용자를 대상으로 적용되는 제한이었습니다."
다수의 사용자가 참여하는 소셜 웹사이트에서는 페이지가 여러 사용자의 콘텐츠를 나열하기 때문에 이 모델은 근본적으로 깨집니다. 이를 우회하기 위해 개발자들은 종종 웹훅을 통해 데이터를 자체 데이터베이스와 동기화하게 되며, 이는 사실상 두 개의 진실 원천을 만들고 사용자 관리 복잡성을 두 배로 늘립니다.
세션 관리가 단일 실패 지점이 되는 경우
제공업체가 세션을 관리하면 로그인 처리뿐 아니라 인증이 필요한 모든 요청의 핵심 경로에 개입하게 됩니다. 제공업체에 장애가 발생하면 사용자는 세션 쿠키를 갱신할 수 없으며, 이미 로그인된 사용자조차 사이트를 사용할 수 없게 됩니다.
Val Town은 사이트의 신뢰성이 모든 핵심 구성 요소의 신뢰성 곱으로 결정된다고 지적했습니다. 한 커뮤니티 멤버가 토론 중에 언급했듯이, 소프트웨어, 인증 레이어, 클라우드 제공업체 각각이 99% 가용성을 가질 때 전체 가용성은 97%로 떨어집니다.
대안 평가
관리형 서비스를 대체할 솔루션을 찾는 일은 시장이 "오래되고 반쯤 버려진" 오픈소스 라이브러리와 고위험 벤더 락인 플랫폼 사이에 갈라져 있기 때문에 어렵습니다.
Better Auth를 선택한 이유
Better Auth는 라이브러리의 편리함과 자체 호스팅의 주권을 동시에 제공합니다. 완전 관리형 서비스와 달리 데이터베이스와 세션 관리를 개발자가 직접 제어하면서도 Remix, Fastify, Express와 같은 프레임워크와의 통합을 지원합니다.
주요 장점은 다음과 같습니다:
- 벤더 위험 감소: 세션이 동작하기 위해 제3자가 온라인 상태여야 하는 의존성이 사라집니다.
- 확장성: 오픈소스이며 라이브러리 기반이므로 폐쇄형 API보다 "해킹"하기 쉽습니다.
- 무상태 인프라: Better Auth의 유료 애드온은 대부분 무상태이며 세션 관리 경로에 관여하지 않습니다.
"직접 구현" 논쟁
이번 마이그레이션은 엔지니어들 사이에서 오래된 격언, "절대 직접 인증을 구현하지 말라"에 대한 논쟁을 촉발했습니다.
과거에는 이 의견이 절대적이었지만, 이제 많은 숙련된 개발자는 기본적인 요구사항—bcrypt 비밀번호, 매직 링크, Postgres 세션 테이블—에 대해서는 단순 내부 시스템을 구축하는 위험이 복잡하고 불투명한 제3자 서비스에 의존하는 위험보다 낮다고 주장합니다. 한 기여자는 관리형 서비스의 "행복한 경로"는 좋지만, 이를 벗어나는 순간 제공업체 내부 추상화가 장애물이 된다고 지적했습니다.
무중단 마이그레이션 실행
인증 제공자를 교체하는 일은 팀이 수행할 수 있는 가장 위험도가 높은 작업 중 하나입니다. Val Town은 원활한 인수인계를 위해 전환 기간을 활용했습니다:
- 병행 지원: 2주 동안 모든 인증 엔드포인트가 Clerk와 Better Auth 양쪽의 쿠키를 모두 받아들였습니다.
- 점진적 마이그레이션: 사용자는 로그인할 때마다 마이그레이션되었으며, 로그인 페이지는 Better Auth 세션을 발급했습니다.
- 수작업 최종 구현: 초기 전환 코드의 보일러플레이트는 LLM이 도와주었지만, 보안에 중요한 최종 구현은 모두 수작업으로 작성하고 철저히 테스트하여 취약점을 방지했습니다.
마무리 생각
Supabase → Clerk → Better Auth 여정은 복합 시스템의 신뢰성이 가장 약한 고리로 정의된다는 교훈을 줍니다. 관리형 서비스는 단순하고 프론트엔드 중심이며 소셜 요소가 없는 앱에 적합하지만, 고가용성과 사용자 데이터와의 깊은 통합이 필요한 플랫폼에서는 위험 요소가 될 수 있습니다. 가장 만족스러운 엔지니어링은 종종 "지루한" 영역, 즉 데이터를 직접 소유하고, 세션을 직접 제어하며, 요청 경로에서 중요한 제3자 의존성을 최소화하는 일에서 비롯됩니다.