이 글은 필렌틀리(Filently)라는 AI 기반 문서 정리 앱 개발자가 구글 OAuth 인증을 위해 필수적으로 거쳐야 했던 CASA Tier 2 감사의 경험을 공유합니다. 비용, 소요 시간, ZAP 준비 과정, 그리고 보안 위생의 중요성을 상세히 설명하며, 특히 Claude Code를 활용한 효율적인 문서화 과정이 돋보입니다. 독자들은 이 글을 통해 CASA Tier 2 감사 준비에 대한 실질적인 조언과 시간 절약 팁을 얻을 수 있습니다.
1. 예상치 못한 CASA Tier 2 감사 요구사항 😮
발렌틴 우어마이스터(Valentin Uhrmeister)는 필렌틀리(Filently)라는 AI 기반 문서 정리 앱을 개발하고 있었는데요, 이 앱은 구글 드라이브에 직접 문서를 정리하는 기능을 핵심 가치로 삼고 있었어요. 그런데 구글 드라이브 API를 사용해 민감한 사용자 데이터에 접근하려면 구글의 CASA(Cloud Application Security Assessment) Tier 2 감사를 통과해야 한다는 사실을 뒤늦게 알게 되었죠.
"우리는 귀하의 OAuth 확인 서한(LOV)이 구글에 제출되었음을 기쁘게 알려드립니다."
놀랍게도 감사를 시작한 지 8 영업일 만에 구글의 OAuth 승인을 받았다고 해요. 처음에는 몇 주가 걸릴 것으로 예상했지만, 생각보다 훨씬 빠르게 진행된 거죠. 저자는 이 감사가 필요하다는 사실을 깨닫는 것이 가장 어려운 부분이었다고 회상합니다. 필렌틀리는 사용자의 파일이 클라우드에 그대로 남아있고, 단지 파일들을 지능적으로 정리해주는 역할을 하므로, 사용자의 폴더 구조를 읽을 권한이 반드시 필요했어요. 이 권한 없이는 앱이 아예 작동하지 않았기 때문에, CASA 감사는 단순한 '있으면 좋은 것'이 아니라 '필수적인 것'이었죠. 😩
2. 감사를 위한 철저한 준비 과정 🛠️
감사를 받기 전, 발렌틴은 자신의 앱에 대해 OWASP ZAP을 실행했어요. ZAP은 무료 오픈소스 도구로, 웹 애플리케이션의 명백한 보안 취약점을 찾아주는 역할을 합니다. 그는 모든 웹 앱에 ZAP 사용을 강력히 추천하며, 보안 기본기를 다지는 좋은 습관이라고 강조했어요.
"ZAP은 무료 오픈소스이며, 웹 애플리케이션의 명백한 보안 허점을 찾아줄 것입니다. 솔직히, CASA 요구사항이든 아니든 모든 웹 앱에 권장합니다. 보안 기준을 아는 것은 좋은 위생입니다."
ZAP을 CASA 설정에 맞춰 실행하는 데 생각보다 시간이 걸렸는데, 문서가 흩어져 있고 일부는 오래되었기 때문이었죠. 하지만 결국 성공적으로 스캔을 진행했고, 결과는 133 PASS, 2 FAIL, 6 WARN이었어요.
발견된 두 가지 실패 사항은 쉽게 고칠 수 있었어요.
- X-Powered-By Header: Next.js가 모든 응답에 자신의 정보를 노출하고 있었죠.
- Proxy Disclosure: Railway가 헤더에 프록시 정보를 누출하고 있었어요.
여섯 가지 경고는 모두 누락된 보안 헤더에 관한 것이었는데, 클릭재킹 방어, HSTS, 콘텐츠 보안 정책 등 일반적인 내용이었죠. 그는 Next.js 설정에 poweredByHeader: false를 추가하고, 모든 보안 헤더를 클라우드플레어 변환 규칙(Cloudflare Transform Rules)으로 옮겨 처리했습니다. 이는 Next.js에서 직접 처리하는 것보다 깔끔하고 정적 리소스에도 적용되기 때문에 더 효율적이었다고 해요.
꿀팁: 문제를 해결한 후, 통과된 규칙은 설정 파일에서 주석 처리하고 다시 스캔을 실행하면 훨씬 빠르게 진행된다고 합니다! 🚀 클라우드플레어의 server: cloudflare 헤더는 제거할 수 없었지만, 이 외의 모든 문제는 해결하고 감사를 제출했어요.
사실 그의 준비는 ZAP 스캔을 넘어섰어요. 처음부터 보안을 염두에 두고 앱을 구축했기 때문이죠. GDPR 준수, PII(개인 식별 정보)에 대한 필드 레벨 암호화, 적절한 OAuth 토큰 처리 등, 감사가 시작되었을 때 대부분의 작업이 이미 완료된 상태였다고 합니다. ✨
3. 감사 과정: $720과 예상 밖의 결과 💰
발렌틴은 구글이 선정한 CASA 감사 기관 중 하나인 TAC Security를 선택했습니다. 그는 아마도 필요 이상의 지원이 포함된 프리미엄 패키지($720)를 선택했다고 생각했어요. ZAP 스캔을 미리 수행하고 문제를 해결했다면 $540짜리 하위 티어로도 충분했을 것이라고 말이죠.
감사는 1월 8일에 시작되었고, 다음 날 DAST(Dynamic Application Security Testing) 스캔 결과가 나왔어요.

위 그림에서 보이는 것처럼 ESOF 사이버 점수는 10점 만점에 9.7점을 기록했어요. 총 8개의 항목이 발견되었는데, 1개의 낮은 심각도(이전에 알고 있던 Cloudflare 헤더)와 7개의 정보성 알림이었죠. 심지어 정보성 알림 중 하나는 TAC Security 자체의 오래된 ZAP 버전을 지적하는 내용이었다고 해요. 그는 지원 티켓을 열었고, 몇 시간 만에 모든 문제가 '패치됨'으로 처리되어 추가 조치가 필요 없게 되었습니다. 👍
4. 자가 평가 설문지 (SAQ)와 문서화의 힘 ✍️
CASA 감사는 단순히 취약점 스캔으로 끝나지 않아요. 54가지 보안 요구사항을 다루는 자가 평가 설문지(SAQ)를 작성해야 합니다. 사용자 데이터 처리 방식, 사용하는 암호화 방식, 접근 제어 관리 방법, 사고 대응 계획 등 다양한 질문에 답변해야 하죠.
이 과정에서 발렌틴은 시간을 엄청나게 절약할 수 있는 획기적인 방법을 사용했어요. 바로 Claude Code에 전체 코드베이스를 넘겨주고 각 요구사항에 대한 문서화를 요청한 것이죠! 🤖 Claude Code는 인증, 암호화, 속도 제한, 배포 등 다양한 영역에 대한 하위 에이전트를 생성하고, 각 요구사항에 대한 증거와 함께 전용 문서 폴더를 만들어주었습니다.
이 덕분에 단순히 SAQ 답변을 얻은 것을 넘어, 유지 관리할 수 있는 실제 보안 문서를 갖게 되었어요. 더욱이 그는 Claude Code에 슬래시 명령어를 구축하여, 모든 코드 변경 사항이 이 문서에 대해 검사되도록 만들었습니다. 이는 규정 준수 문제를 표시하거나 업데이트가 필요한 문서를 알려주는 역할을 하죠. 덕분에 매년 있을 재검증(annual revalidation) 시에도 처음부터 다시 시작할 필요가 없게 된 것입니다. 정말 똑똑한 방법이죠! 💡
이 문서화 과정에서 한 가지 부족한 점도 발견했어요. 전역적인 속도 제한(global rate limiting)은 있었지만, 사용자 ID 기반의 경로 레벨 속도 제한(route-level rate limiting)이 없었던 거죠. 쉽게 고칠 수 있는 문제였지만, 누군가 질문하기 전까지는 생각지도 못했던 부분이었습니다.
5. 제출부터 승인까지: 초고속 진행 🚀
발렌틴은 화요일에 SAQ를 제출했고, 다음 날 TAC Security로부터 모든 것이 괜찮다는 확인을 받았어요. 그리고 사용자 데이터 암호화 방식에 대한 증거(암호화된 데이터베이스 필드 스크린샷과 AES-256-GCM 방식 설명)를 요청받았죠. 몇 시간 뒤, LOV(Letter of Validation) 제출을 위한 애플리케이션 세부 정보를 확인해달라는 요청이 왔고, 그날 저녁에는 구글에 LOV가 제출되었습니다. 그리고 사흘 뒤인 일요일에 구글이 OAuth 인증을 승인했어요! 🎉
총 소요 시간은 11일, 실제 작업 일수는 약 8일이었습니다. 그가 직접 작업한 시간은 대부분 문서화에 소요된 10~12시간 정도라고 하네요.
6. CASA 감사를 시작하는 사람들에게 주는 조언 🎁
발렌틴은 자신의 경험을 바탕으로 CASA 감사를 준비하는 사람들에게 다음과 같은 조언을 아끼지 않았어요.
- ZAP을 먼저 실행하세요. 무료이고, 설정만 제대로 하면 20분이면 충분하며, 감사 비용을 지불하기 전에 쉬운 문제들을 해결할 수 있습니다.
- 처음부터 보안을 염두에 두고 구축하세요. 암호화를 나중에 끼워 넣거나 인증 문제를 뒤늦게 고치려고 허둥지둥하지 않도록, 사용자 데이터를 다룬다면 초기에 보안 관련 결정을 내리는 것이 중요합니다.
- $540 티어면 충분할 거예요. ZAP 스캔을 완료하고 문제를 해결하며 문서를 준비했다면, 더 비싼 프리미엄 서비스의 추가 지원은 필요 없을 것입니다.
- 작업하면서 문서를 만드세요. 주요 결정에 대한 아키텍처 결정 기록(Architecture Decision Records)을 작성하는 등 보안 선택에 대한 메모를 남겨두면, 결국 필요할 때 큰 도움이 될 거예요.
- 실제 소요 시간은 구글이 제시하는 것보다 빠를 수 있어요. 구글은 4~6주, TAC Security는 1~3주를 말하지만, 그의 경우 8 영업일 만에 마쳤습니다. 앱이 이미 안전하다면 예상보다 빨리 끝날 수 있습니다.
- 매년 재검증 예산을 확보하세요. CASA 인증은 매년 갱신해야 합니다. Claude Code를 활용한 지속적인 규정 준수 확인 기능은 이 과정을 훨씬 수월하게 만들겠지만, 여전히 반복적인 비용이 발생한다는 점을 기억해야 합니다.
7. 앞으로의 계획과 지속적인 보안 관리 🌟
필렌틀리는 이제 CASA Tier 2 인증과 구글 OAuth 인증을 모두 획득했습니다. 예정대로 2026년 1월에 베타 사용자들을 대상으로 서비스를 시작할 예정이라고 해요.
그가 만든 보안 문서는 결코 먼지만 쌓이게 두지 않을 것입니다. Claude Code의 슬래시 명령어를 통해 모든 PR(Pull Request)은 규정 준수 요구사항에 따라 검사될 것이고, 매년 재검증 시에도 처음부터 다시 시작하는 일은 없을 거예요. 그는 필렌틀리 구축 여정을 공유하며, 실제 결정과정을 투명하게 보여주고 싶다고 합니다.
"저는 실제 결정을 공유합니다. 하이라이트뿐만이 아니고요."
