스타트업에서 AWS Cognito를 써봤지만 다시는 안 쓸 것
한 스타트업 개발자가 AWS Cognito로 인증 시스템을 구축하면서 겪은 문제를 상세히 공유했습니다. 문서가 여러 독자층을 동시에 겨냥해 혼란스럽고, Amplify v6로 업데이트하며 인증 로직을 통째로 재작성해야 했으며, 클라우드 기반이라 로컬 개발·테스트가 어렵다는 것이 핵심 불만입니다. 인증 서비스 선택을 고민하는 개발자들에게 실전 교훈이 되는 글입니다.
스타트업 인증 시스템을 세팅한 지 사흘째 되던 날, 뭔가 잘못됐다는 걸 깨달았다. '세미콜론 하나 빠뜨린' 수준의 잘못이 아니었다. '문서의 모든 단계를 그대로 따랐는데도 비밀번호 재설정 플로우가 여전히 엉뚱한 곳으로 리다이렉트되는' 수준의 잘못이었다. 문서를 열두 개 탭으로 띄워놓고, 코드 샘플을 복사해 붙여넣고, 이 악몽을 정확히 겪어본 것 같은 사람의 튜토리얼까지 봤다.
그런데 이게 중요한 점이다. 나는 인증 구현 경험이 있다. Auth0와 씨름해봤고, Firebase Auth를 길들여봤고, 자랑스럽지는 않지만 작동하는 커스텀 JWT 시스템도 직접 만들어봤다. 그래서 스타트업에 인증이 필요하고 팀이 '이미 AWS 생태계에 있고 월간 활성 사용자 5만 명까지 무료'라는 이유로 Cognito를 선호했을 때, 얼마나 나쁠 수 있겠냐고 생각했다.
모든 걸 후회한다.
문서가 다섯 명의 다른 독자를 동시에 위해 쓰였다
Cognito 문서를 읽는 건, 매뉴얼 세 권을 블렌더에 갈고 거기에 오래된 Stack Overflow 답변을 양념으로 뿌린 느낌이다. AWS는 너무 많은 독자층을 동시에 만족시키려 한다. 기저 기술의 인증 프로토콜을 이해하고 싶은 엔터프라이즈 아키텍트, 로그인 폼만 있으면 되는 프론트엔드 개발자, 네이티브 SDK가 필요한 모바일 개발자. 문서는 모두에게 모든 것이 되려다 정작 아무에게도 쓸모없어진다.
'Cognito 커스텀 속성 검증'을 검색하면, 내가 존재하는지도 몰랐던 다른 네 개 문서를 이미 읽었다고 가정하며 디렉터리 스키마 이야기로 시작하는 페이지가 나온다. 명확한 순차적 경로가 없다. 그저 하이퍼링크와 기도의 그물망일 뿐이다.
그리고 코드 예제. 아, 그 코드 예제들. 절반은 구버전 JavaScript SDK용이다. 일부는 Amplify v1 API를 참조하고, 나머지는 raw AWS SDK를 쓴다. 문서는 어떤 버전을 다루는지 명확히 알려주지 않아서, import 문을 보고 형사놀음을 해야 한다.
Amplify v6가 나를 배신한 날
버전 이야기가 나왔으니, JavaScript 라이브러리 상황을 말해주겠다. 이건 진짜 당황스러웠다. 개발을 시작할 때 Amplify는 버전 5였다. 인증 플로우를 작성하고, 테스트하고, 커밋하고, 다른 기능으로 넘어갔다. 몇 주 후 버그를 고치러 돌아왔더니 콘솔에 지원 중단(deprecation) 경고가 떠 있었다. 문제없지, 최신 버전으로 업데이트하면 되겠거니 했다.
여러분. Amplify v6는 메서드 시그니처 몇 개를 바꾼 수준이 아니었다. Cognito와 상호작용하는 방식을 근본적으로 재설계했다. 내가 UI 플로우 전체를 구축했던 함수들이 사라졌다. 대체됐다. 증발했다. 마이그레이션 가이드는 기술적으로 존재는 했지만, 랜드마크 절반이 빠진 보물지도 같았다.
결국 코드를 다시 작성했다. 리팩토링이 아니라 재작성이다. 프로덕션에서 완벽하게 작동하던 인증 로직이 라이브러리 유지보수자들이 구버전 API를 더 이상 정석으로 보지 않기로 했다는 이유로 재구축되어야 했다. 그건 업그레이드가 아니다. 인질극이다.
로컬 개발은 또 다른 종류의 고통
Cognito에 관한 재미있는 사실 하나: 클라우드 기반이다. 뭐, 놀랍지 않은가. 하지만 실질적으로 의미하는 바는, 로컬 인스턴스를 띄워서 오프라인으로 인증 플로우를 테스트할 수 없다는 것이다. 항상 실제 AWS 엔드포인트를 호출해야 한다.
serverless-offline 플러그인이나 로컬 Cognito 에뮬레이터 같은 도구들이 이 간극을 메우려 하지만, 유지보수 수준과 충실도가 제각각인 커뮤니티 프로젝트들이다. AWS의 공식 입장은 기본적으로 '클라우드 대상으로 테스트하라'인데, 비행기 안에 있거나, 인터넷이 불안정하거나, 네트워크 왕복 대기 없이 빠른 반복 개발 주기를 원한다면 좋은 조언이 못 된다.
나는 실제 환경과 완전히 일치하지 않는 로컬 목업을 세팅하느라 민망할 정도로 많은 시간을 낭비했다. 그 덕분에 버그는 로컬에서는 드러나지 않고 스테이징에서 터졌다. 로컬 개발의 핵심 목적은 문제를 조기에 잡는 건데, Cognito는 그걸 적극적으로 방해한다.
커스터마이징을 원한다면… (이하 생략)