- 출시 준비 중이던 10월 6일, Claude에게 “출시했다고 가정하고 레드팀처럼 검토해 줘”라고 했더니 문제 28개가 나왔습니다.
- 다음 날 밤까지 이틀 동안 커밋 37개로 그중 27개를 코드로 고쳤고, 테스트 714개가 모두 통과했습니다.
- 가장 놀란 건 해킹 같은 구멍이 아니라 ‘만 14세 확인’과 ‘앱 안 문의 창구’처럼 생각도 못 한 것들이었어요.
코딩을 모르는 채로 Claude와 반려동물 밥 기록 앱 “오늘도 밥줌”을 만들어 왔어요. 출시를 준비하면서 마음에 걸리는 게 하나 있었습니다. 제가 만든 앱인데, 어디가 위험한지는 제 눈으로 볼 수가 없다는 점이었죠. 그래서 10월 6일 저녁, AI에게 이번엔 만드는 쪽이 아니라 공격하는 쪽에 서 보라고 했습니다.
“레드팀이라고 생각하고 검토해 줘” — 지시문 한 줄
레드팀은 일부러 공격하는 사람 입장에 서서 약점을 찾는 역할을 말해요. 제가 보낸 지시문은 이 한 줄이었습니다.
“오늘도밥줌 앱 출시했다고 가정했을 때 레드팀이라고 생각하고 부족한 부분이 있는지 검토해줘!”
돌아온 목록은 28개였습니다. 다행히 급한 순서로 나눠져 있었어요. 그중 “출시 전에 꼭” 고쳐야 할 것만 8개였습니다.
| 구분 | 개수 | 뜻 |
|---|---|---|
| 출시 전에 꼭 | 8 | 이대로 내보내면 돈이 새거나 심사에서 막힐 수 있는 것 |
| 출시 후 빨리 | 12 | 당장 터지진 않지만 사용자가 늘면 문제가 될 것 |
| 여유 있을 때 | 8 | 고치면 좋은 것 |
| 합계 | 28 | 그중 27개를 이틀 안에 코드로 고침 |
출시 전에 꼭 고쳐야 했던 것들
“출시 전에 꼭”에 들어 있던 것 중 몇 가지를 적어 볼게요. 모두 이미 고친 것들입니다.
- 앱 안에서 쓰는 보석(젬)을 끝없이 얻을 수 있는 구멍이 있었어요. 젬으로 AI 그림을 만들면 그 비용은 실제로 제가 내는 구조라, 그대로 두면 돈이 새는 문제였습니다.
- AI 요약 기능을 공짜로 계속 부를 수 있는 구멍도 있었습니다.
- 기록이 많이 쌓이면 알림을 보내는 서버가 처리 시간 한도를 넘겨, 그날 알림을 통째로 놓칠 수 있었어요.
- 플레이스토어에 내려면 필요한 신고 버튼과 이용약관이 없었습니다. 심사에서 거절될 수 있는 부분이었죠.
- 개인정보처리방침에 법이 요구하는 항목이 빠져 있었고, 사진 저장소에는 크기·종류 제한이 없었습니다.
그 밖에도 가족 방 초대 코드가 짐작하기 쉬워 남의 방에 참여 요청을 보낼 수 있던 것, 가족 방을 나간 사람이 방 사진을 7일 동안 볼 수 있던 것도 이번에 고쳤어요. 처음 앱을 열면 배경음악이 바로 나오던 것처럼 작은 불편도 목록에 같이 들어 있었습니다.
가장 놀란 항목은 ‘만 14세 확인’이었다
28개를 읽으면서 가장 놀란 항목은 둘이었습니다. 만 14세 이상인지 확인하는 절차가 없었다는 것과, 앱 안에 문의할 곳이 없었다는 것이었어요. 둘 다 10월 7일 새벽에 고쳤습니다.
우리나라에서는 만 14세가 안 된 아이의 개인정보를 받으려면 보호자 동의가 필요해요. 반려동물 앱이라 어린 사용자가 들어올 수도 있는데, 저는 그걸 한 번도 떠올리지 못했습니다. 문의 창구도 마찬가지예요. 앱에 문제가 생겼을 때 사용자가 저에게 말할 방법이 없었던 거죠. 그때 제 마음을 그대로 옮기면 이렇습니다. “미처 생각하지 못했던 부분인데 클로드가 알려 줘서 고마웠다.”
코드를 잘 짜는 일보다, 앱을 내놓는 사람이 챙겨야 할 것을 AI가 짚어 준 게 가장 쓸모 있었어요. 코딩을 모르고 앱을 만드는 사람에게는 이쪽이 더 놓치기 쉬운 부분이라고 생각합니다.
다음 날엔 “고치지 말고 목록만” 달라고 했다
레드팀 목록을 고치고 난 10월 7일, 이번에는 보안만 따로 한 번 더 보게 했어요. 그때 지시문은 이렇습니다.
“내 프로젝트 전체를 보안 관점에서 점검해줘. 특히 API 키 노출, [데이터베이스 권한 설정], 서버 검증 누락, 관리자 페이지 접근, 개인정보 저장 방식을 봐줘. 코드는 아직 고치지 말고 문제 목록만 만들어줘.” (대괄호 안은 쓰는 서비스 이름이라 바꿔 적었어요.)
핵심은 마지막 문장이에요. 찾는 일과 고치는 일을 나눴습니다. AI가 찾으면서 바로 고치기 시작하면, 무엇이 얼마나 급한지 제가 판단할 틈이 없어요. 목록을 먼저 받아 읽고 순서를 정한 다음, 하나씩 고쳤습니다.
이틀을 숫자로 보면
| 항목 | 숫자 |
|---|---|
| 기간 | 10월 6일 저녁 8시 ~ 10월 7일 밤 9시 반 (새벽 3시~아침 8시 빼고) |
| 커밋(수정 묶음) | 37개 (10월 7일 하루에만 24개) |
| 레드팀 검토로 나온 문제 | 28개 |
| 그중 코드로 고친 것 | 27개 |
| 테스트 | 714개 모두 통과 |
테스트는 “고친 것 때문에 다른 데가 망가지지 않았나”를 자동으로 확인하는 장치예요. 하루에 24번 고치는 동안 714개가 모두 통과한 상태로 이틀을 마쳤습니다.
솔직한 한계
AI가 찾은 28개가 이 앱의 약점 전부라는 보장은 없어요. AI가 못 본 것도 있을 수 있고, AI가 찾은 것도 정말 문제인지 제가 다시 읽어 봐야 했습니다. 순서를 정한 것도 결국 저였고요. 그래서 이 이틀을 “AI가 보안을 책임져 줬다”로 적고 싶지는 않습니다. 혼자서는 떠올리지도 못했을 질문을 대신 던져 준 상대에 더 가까웠어요.
AI에게 “고쳐 줘”라고 하기 전에, 먼저 “공격해 봐”라고 물어보기.
코딩 없이 앱을 만들고 있다면, 출시 버튼을 누르기 전에 아래 네 가지는 꼭 해 보세요. 제가 이틀 동안 실제로 한 순서입니다.
- “출시했다고 가정하고 레드팀처럼 검토해 줘”로 먼저 물어보기
- 나온 목록을 ‘출시 전에 꼭 / 출시 후 빨리 / 여유 있을 때’로 나눠 순서 정하기
- 만 14세 확인·문의 창구·이용약관·개인정보처리방침처럼 코드 밖의 것도 챙기기
- “코드는 고치지 말고 목록만”으로 보안만 한 번 더 점검하기