
안녕하세요. 오토피디아 엔지니어 김소령입니다. 스스로를 “서비스를 만드는 사람”으로 지정하고, 회사에서도 엔지니어 외 다양한 업무를 진행하고 있습니다.
N개의 글로 만들어질 이번 시리즈 글은 아주 간단한 관리자 콘솔을 만든 경험입니다. 정비소에서 사용하는 콘솔이기 때문에 방대한 양의 데이터도 아니고, 기본적인 CRUD 호출 외의 특별한 기능, 애니메이션 효과도 없는 작은 콘솔입니다. 다만, 디자인, 서버, 프론트를 빠르게 처리한 경험을 공유함으로써, 저처럼 홀로 zero to one으로 만들어야 하거나 만들고 싶어하는 익명의 누군가들에게 도움이 되길 바라봅니다.
시리즈의 첫 글은 프로젝트의 개요와 함께 로그인 기능을 직접 구현하지 않고 clerk을 사용한 이유에 대해서 간단하게 소개하겠습니다.
오토피디아는 더 나은 카라이프를 위해 운전자들의 문제를 똑똑하게 해결할 수 있는 서비스를 운영하고 하드웨어 장비를 자체 개발하고 있습니다. AI 기반 검사 장비 중 “ATRACE 외관 스캐너”가 이 글의 주인공입니다.


외관 스캐너는 차량이 입출차할 때 자동으로 손상을 촬영하고 기록합니다. 12대의 고해상도 카메라와 구조광 조명을 활용해 스크래치나 문콕 같은 손상을 빠짐없이 포착할 수 있으며, 이 데이터를 바탕으로 서비스 센터는 고객 분쟁을 줄이고 업무 효율을 획기적으로 개선할 수 있습니다. 추후에는 영상에서 바로 외관의 문제를 잡아낼 수 있는 AI 분석으로 확장할 계획입니다. ATRACE 외관 스캐너는 포르쉐 SSCL 양재 및 인천 서비스 센터를 시작으로, 곧 서울 주요 지점들로 확대될 예정입니다.
이 장비를 사용하는 관리자 콘솔은 직관적으로 데이터를 조회하고 관리할 수 있어야 하며, 현장에서는 누구나 빠르게 사용할 수 있어야 했습니다. 그리고 이 콘솔을, 제가 혼자 2주 안에 만들어야 했습니다.



다른 일과 병행하며 주어진 짧은 시간 안에 개발해야 했던 이번 프로젝트에서는 빠르게 MVP를 완성할 수 있는 도구 선택이 가장 중요했습니다.
아래는 제가 사용한 기술 스택으로, 상세한 내용은 시리즈로 천천히 다뤄보려 합니다.
관리자 콘솔은 익명의 모두에게 오픈되어서는 안되는 서비스이기 때문에, 로그인 기능은 필수입니다. 이번 프로젝트에서는 복잡한 것을 구현할 필요가 없었습니다. 로그인과 관련한 요구사항은 포르쉐 정비소라는 조직에 속한 유저를 생성하고, 그 유저의 권한을 확인할 수 있는 것 뿐이었습니다.
하지만, 무작정 직접 개발하는 것은 능사가 아닙니다. 간단하기 때문에 더욱 직접 구현하는 것에 시간을 쓰는 것은 오히려 비효율적일 수 있습니다. 전문 분야는 프론트엔드이기 때문에, 예상치 못한 단순한 에러에도 시간을 많이 쓸 수도 있다는 리스크도 있습니다. 또한, 당장은 단순한 권한을 확인하기 위한 기능이지만, 추후에는 사용자 초대, 세부적인 권한 분리, SSO 등 추가 기능이 있을 가능성이 있습니다. 누군가 잘 만들어둔 로그인 기능을 가져다 쓰는 것이 현재의 리소스에서는 가장 효율적이라고 판단했습니다.
필요한 기능과 유저 시나리오, 우선순위를 설정한 후, 관련 서비스를 찾아 조사했습니다.
요구사항과 함께 정리한 유저 시나리오는 다음과 같습니다.
로그인 token 및 유저 테이블 관리, 에러 핸들링, UI 등을 자체 개발하지 않을 수 있는 툴을 선택해야 합니다. I의 예쁨이나 익숙함의 정도, 커스터마이징 등은 거의 고려하지 않았습니다. B2B이긴 하지만, 내부의 소수 인원만 사용하는 콘솔이기 때문입니다.
1. 개발 리소스가 크게 들지 않아야 한다.
- 당장 1~2주 이내에 다른 업무와 병행해서 여유롭게 끝낼 수 있는 정도
- 세팅 방법을 대강이라도 체크해서 감을 잡을 수 있어야 함
- 현재 개발된 프론트 코드 상태와 호환성이 좋길
2. 안정성있는 서비스여야 한다. (1번과 거의 비슷한 우선순위)
- 추후 유지 보수 관리에 큰 리소스를 쓰지 않기를
- 사례가 많을수록 좋음
3. 비용은 최소화해야 한다.
- Free tier가 많을수록 좋음
- 외부에서 사용하는 서비스기 때문에 사용성에 문제는 없어야 함
4. 보안성에 문제가 없어야 한다.
- 업체에서도 MVP로 사용하는 것이니, 보안이 최우선순위까지는 아니라고 생각
- MFA까지 고려할 필요는 없지만, 굳이 따지자면, 추후 확장에서 문제가 없으면 좋음
초기 세팅이 가장 가벼울 것으로 예상되며, 기본적인 보안성에도 큰 문제가 없어보입니다. 가까운 시일 내에서는 고객사마다 1개의 계정을 공유하는 시나리오가 대부분일 것으로 보이기 때문에, 조직 당 5명까지만 가능하다는 제약도 문제가 없습니다. 또한, 계정별로 조회해야하는 데이터가 다양한 것은 아니기 때문에 supabase와의 연동도 무리없을 것으로 예상됩니다.
추후 고객사 요청(고객사의 보안 감사 등)으로 MFA 등의 보안에서의 기능을 추가하게 되더라도 대응이 가능합니다. 무엇보다, 현재 콘솔에서 요구하는 기능을 무료 플랜 내에서 문제없이 사용할 수 있는 장점이 있습니다. 고객사 등록 가능 수 등 여러 조건이 더 있지만, MAU 1만을 넘어가지 않는 선에서는 무료 플랜 이용이 가능합니다.
| 서비스명 | 장점 👍 | 단점 👎 |
|---|---|---|
| Supabase Auth(자체 개발) | 호환성 좋음. | UI 및 에러 핸들링을 모두 고려해야 함. 타 서비스 대비 추후 문제 발생할 가능성이 높고, 초기 세팅이 아주 간단한 것도 아님. |
| AWS Cognito | 보안성 우수 | 프론트 보다는 백엔드 중심의 솔루션이다보니 초기 세팅이 피로할 수 있고, Next.js와의 호환성에 대한 자료가 적어 우려가 됨. |
| ✅ Clerk.dev | 초기 세팅이 빠름. | 한국 사례를 찾아보기 힘들고, 무료 플랜에서는 고객사 별로 직원을 5명까지만 등록 가능. 추후 DB에서 조회해야하는 내용이 복잡해지는 경우 Supabase에는 직접 연동해야 함. |
| Auth0 | Next.js와의 호환이 좋고, 기능이 가장 많음 | 기능이 많아서 세팅은 오래 걸리는데, 실제로 사용할 기능은 간단한 인증이 대부분. 무료 플랜에서는 고객사를 5개까지만 등록할 수 있음. |
당시에는 DB와 프론트 코드를 어느정도 마무리한 상태였기 때문에, supabase 및 Next.js(App router)와의 호환도 매우 중요했습니다. 서비스 조사할 때의 메모를 가져와 작성했기 때문에 편향이 있을 수 있습니다.
DB 서비스인 Supabase에서 사용자를 관리하는 방법입니다. API 설명과 튜토리얼이 잘 되어있고, 당시 개발된 환경에서 호환성은 가장 좋았습니다.
다만, 자체개발이라는 점에서 추가기능에 대한 대처가 어려울 수 있습니다. 외관 스캐너 관리자 콘솔은 개발 후 한 동안은 유지 보수에 신경을 쓸 수 없는 상황이기 때문입니다. 또한, UI를 직접 개발하고 에러 핸들링도 고려해야 하기 때문에, 투입 리소스 대비 효율이 안나온다고 판단했습니다.
Amazon Cognito란 무엇입니까? - Amazon Cognito

AWS에서 제공하는 사용자 인증/인가 플랫폼으로, 외부 로그인도 연동할 수 있습니다. 보안성이 우수하고, AWS Lambda 트리거를 이용하면 인증 과정을 커스터마이징할 수 있습니다. AWS Cognito는 위 사진처럼 테스트 환경을 만들어볼 수 있어 편했습니다.
UI가 한국인에게는 낯설 수 있고, 커스터마이징이 제한적입니다. 또한, 프론트엔드보다는 백엔드 툴에 초점이 맞춰진 느낌이 강하고, Next.js와의 호환을 비롯해 초기 세팅에 소요될 시간을 가늠하기 어렵습니다.
Clerk | Authentication and User Management

로그인 UI는 물론 각종 hooks까지 제공하여 세팅이 가장 간편할 것으로 기대 됩니다. 구글 로그인 등의 외부 로그인 연동도 가능하고, MFA 등의 연동도 가능합니다. 다만, 관련 자료가 비교적 적을 수 있습니다.
유저를 조직별로 묶어서 관리할 수 있는데, 무료 플랜에서는 한 조직 당 5명까지만 가능합니다. 즉, 고객사 별로 콘솔에 접근가능한 사용자를 5명까지만 지정할 수 있습니다. 기본적인 role은 admin과 member이고, 최대 10개의 role을 설정할 수 있습니다. 조직 당 멤버수의 제한을 풀거나, role을 다양하고 더 많이 커스터마이징 하기 위해서는 유료 플랜을 사용해야 합니다.

Next.js와의 호환성이나 docs의 완성도, 안정성이나 보안성 모두 우수합니다. 커스터마이징에도 열려있는데, 그만큼 초기 세팅에서 피로를 느낄 수 있습니다. 로그인 하나만 만들면 되는데, 수십가지 인증방식과 토큰의 다양성, UI 설정 복잡 등 다른 서비스 대비 과한 설정이 요구되는 느낌이 있습니다. 한 프로젝트 내에서 5개의 조직만 생성할 수 있어서, 고객사가 5개를 넘어가면 최소 월 35달러를 지불해야합니다.
기본적으로 Clerk은 현재 관리자 콘솔에서 요구하는 아래의 기능을 모두 충족했습니다.
useOrganization() 훅으로 현재 유저가 속한 조직을 바로 확인할 수 있었습니다.useOrganization() 외에도 clerk nextjs에서 제공하는 각종 패키지 개발이 잘 되어있어 아주 만족스러웠습니다.직관적인 UI와 잘만들어진 패키지가 다양한 기능을 제공한 덕에 연동에 큰 불편은 없었습니다. 굳이 꼽아보자면, 문서나 연동 사례에 대한 정보가 부족한 점이었습니다.
예를 들어, webhooks로 넘어오는 event별 data의 필드를 미리 확인할 수 없어, 하나씩 webhook을 날려 log로 확인해야 했습니다. user 생성,수정 이벤트에서는 user의 organization 정보를 확인해야 했는데, 미리 필드를 체크하지 못한 탓에 정책을 수정해야 했습니다. (타입을 만들어 배포하면 좋겠다는 생각을…)
직관적인 콘솔과 docs 덕분에 대부분의 과정에 문제가 없었고, 그래서 사례글이 없었다고 생각합니다. 하지만 외려 간단한 문제를 하나 해결하기 위해 Clerk docs의 AI에게 여러 질문을 해야하는 것이 복잡했습니다. 그래서 이 다음 글로는 사용자 등록 플로우와 함께 Next.js(App router)와 clerk 연동 과정을 조금 더 자세하게 기록 및 공유하려 합니다. 저와 같은 고민이 있을 소수의 개발자분들에게 도움이 되길 바라며~
주어진 상황과 고민의 과정을 상세히 써주셔서 말씀하신대로 비슷한 상황에 처한 개발자들에게 도움이 될 것 같습니다 :) 저는 비슷한 상황에 처하지 않았지만 이런 상황에는 이런 기준을 통해 툴을 고르는구나,가 인사이트가 되었네요. 오토피디아에서는 뭘 만드는지 알 수 있었던 점도 흥미로웠습니다!