직접 인증 시스템을 만들지 말아야 하는 이유: 수십 번의 고객 인터뷰에서 얻은 교훈
하루 만에 직접 인증 시스템을 만들고, 수년간 운영할 수 있습니다. 진짜 비용은 나중에, 사업이 달라지는 순간 드러납니다. 수십 번의 B2B 인터뷰에서 얻은 교훈입니다.
인증은 직접 만들 수 있을 것처럼 보입니다. 이메일, 비밀번호, 해싱, 로그인 시 비교. 직접 인증 시스템 만들기가 뭐가 그리 어렵겠어?
만들 수 있습니다. 그게 함정입니다.
우리는 직접 인증 시스템을 만든 수십 개 팀과 이야기해왔습니다. 대부분 우리를 찾은 이유는 같았습니다: 비즈니스를 발목 잡고 있었기 때문입니다.
산업, 기술 스택, 규모는 달랐지만 결론은 같았습니다. 직접 만든 인증 시스템이 팀이 짊어진 부담, 즉 부채가 되어버렸습니다.
이상한 점은, 이런 문제는 장애로 드러나지 않는다는 것입니다. 시스템은 잘 로그인을 처리하고 정상적으로 운영되었습니다. 하지만 사업이 한번 바뀌는 순간에 그 부담이 고스란히 드러났습니다: 보안 심사, 처음으로 들어온 엔터프라이즈 고객, 인수합병, 두 제품에 걸친 기능 등.
불과 지난주만 해도 "문제없음"이었습니다. 그런데 다음 로드맵 과제가 그 뒤에 걸려 막힙니다.
직접 만든 인증에서 가장 큰 실수는 이것을 단순한 "기능"으로 여기는 것입니다. 출시 첫날은 코드를 금방 쓸 수 있습니다. 하지만 실제 유저 트래픽이 몰리면, 유저, 조직, 권한 관리 등과 얽히기 시작합니다.
인증은 기능이 아닙니다. 그건 정체성(Identity) 인프라입니다.
로그인 페이지 뒤에는 완전히 별개의 정체성 모델이 있다
직접 만든 인증 시스템은 항상 비슷하게 시작합니다. 이메일과 비밀번호를 받아서, 해싱해 저장하고 로그인시 비교합니다. 40줄 코드로 끝내버리죠.
문제는 출시 이후 시작됩니다. 로봇이 회원가입 엔드포인트를 두드리기 시작하면, 속도 제한과 CAPTCHA, 디바이스 지문 채크를 덧붙입니다. 어느날 갑자기 문자 인증이 안나가면, 재전송과 일일 제한을 추가합니다. 다음은 더 어렵습니다: 안전한 비밀번호 재설정, MFA 및 복구 플로우, 세션/리프레시 토큰, 단순한 is_admin 불린을 넘는 권한 모델.
각 기능 자체는 어렵지 않아요. 각각은 스프린트 하나짜리입니다. 하지만 매번 하나씩 추가할 때마다, 제품의 더 큰 질문에 답하고 있는 겁니다.
이 답들이 쌓이면, 그게 곧 당신 제품이 조용히 가정하고 있는 정체성 모델이 됩니다: 누가 유저인지, 한 사람이 여러 조직에 속할 수 있는지, 엔터프라이즈 고객의 자체 인증시스템을 어떻게 연결할지, 누가 나갔을 때 액세스를 어떻게 회수할지.
이 후에 새로 쓰는 모든 기능은 그 답을 ‘당연한 것’으로 간주하게 되고, 운영 기간이 길어질수록 변경은 더 어려워 집니다.
한 회사에서 이 문제를 봤습니다. 20년 된 B2B SaaS로, 오프라인 사업자를 대상으로 합니다. 십여 년 전에 자체 인증을 구축했고, 고객마다 로그인과 권한 검사를 사업 모듈에 직접 박아 넣었습니다. 그땐 적절했습니다.
20년 후, 이메일을 아이디로 하나의 통합 로그인 페이지를 원했습니다. 단순히 페이지 바꾸기가 아니었습니다. 그 체크 로직이 수백 모듈에 퍼졌고, 로그인 통합은 유저 그리고 조직 모델, 자격 증명 마이그레이션, 권한 경계까지 다 건드려야 한다는 뜻이었습니다. 누구도 쉽게 변경을 승인할 수 없어, 여러 해 동안 질질 끌렸습니다.
처음 로그인 페이지를 쓸 땐 기능 같았지만, 남긴 것은 전체 정체성 모델이었습니다.
비즈니스가 성장하면, 직접 만든 인증은 한계에 봉착한다
공정하게 보자면 직접 만든 인증은 오랫동안 잘 돌아갑니다. 로그인 처리, 세션 관리, 하루하루 업무는 문제 없이 처리하죠. 복잡함은 느리게 쌓입니다. 여유 있어 보이니까 관리하는 데 부담 없다고 여깁니다.
하지만 그저 '충분하다'는 건, 비즈니스가 아직 벽에 박지 않았다는 뜻일 뿐입니다. 한 번 벽에 닿으면, 문제는 보통 인증 그 자체가 아닙니다. 함께 가던 비즈니스가 바뀌고, '충분하다'는 하루아침에 '발목'이 됩니다.
아래 상황들은 제품이 커지면서 대부분 겪는 일입니다. 겉모습은 다르지만 본질은 같습니다. 비즈니 스는 성장했고, 옛 정체성 모델은 더 이상 버틸 수 없게 됐습니다.
엔터프라이즈 고객이 SSO를 요청한다
상황: 고객이 자체 IdP(Identity Provider)로 로그인하고 싶어하는데, 인증 시스템에는 '타사 인증 제공자'라는 개념이 전혀 없다.
첫 대형 고객이 계약 단계에 들어가고, 조달 팀에서 요구사항을 보냅니다. 처음엔 마이크로소프트 Entra 나 구글 워크스페이스로 SSO 요청입니다. 다음은 SAML과 OIDC 둘 다, 왜냐하면 또 다른 고객은 또 다른 시스템을 사용하기 때문입니다. SCIM까지 요청하며 구성원 자동 프로비저닝/삭제도 요구합니다.
고객마다 프로토콜, 필드 매핑, 인증서 갱신, 조직 구조 매핑이 다 다릅니다.
그리고 대부분은 재사용되지 않습니다. 다음 고객이 또다른 IdP와 새로운 셋팅을 가져오면, 거의 처음부터 다시 시작입니다. SSO는 한번 만들면 끝나는 기능이 아닙니다. 새 고객 계약마다 다시 짓는데, 고객 수가 늘수록 비용은 계속 커집니다.
이젠 인증이 '프로덕트에 로그인'이 아닙니다. '프로덕트가 고객의 인증 시스템에 연결되게'가 본질이죠. 완전히 다른 일이 됐습니다.
어떤 회사는 SSO설정을 전부 사람 손으로 했고, 전체 상황을 아는 엔지니어가 한 명뿐이었습니다. 그가 있으면 고객이 출시되고, 휴가를 가면 세일즈와 온보딩이 줄을 섭니다. 나가버리면, 노하우도 사라집니다.
직접 인증 만들겠다고 했을 때는, 이런 일은 전혀 생각지 못 했습니다.
흩어진 정체성 데이터를 통합해야 할 때
상황: 정체성 데이터가 조직, 제품별로 분산되어 출발했는데, 사업 성장하며 통합 아이덴티티가 필요해졌다.
위에서 말한 20년 회사도 로그인 통합 도전 중 이걸 겪었습니다. 인수로 생긴 아홉 개의 제품이 각각 인증, 유저 데이터베이스를 따로 챙기고 있던 플랫폼과 같이요.
인수가 자동으로 인증을 통합해주진 않습니다. 제품을 살수록 인증 스택이 하나씩 늘고, 아홉 개를 병렬로 관리하려면 실제 리소스 투입이 필요해집니다.
질문이 쌓입니다. 같은 사람이 제품 A와 B에서 하나의 사용자인가, 둘인가? 같은 고객 조직을 두 제품에서 어떻게 일치시키나? 넘나드는 기능의 권한은? 직원이 퇴사하면 아홉 개 제품에서 동시 권한 회수, 로그 감사는 어떻게?
개별적으로는 다 문제없습니다. 하지만 한데 모이면, 거대한 벽이 됩니다.
“아이덴티티 통합”은 기능 같지만, 코드로 보면 제품의 근간인 “유저”와 “조직”의 정의 자체를 바꿔야 한다는 뜻입니다. 대부분의 기능이 그 구 정의 위에 얹혀 있기 때문에, 구조를 움직이면 윗단이 다 흔들립니다.

