AI로 빨리 만들수록 “완성됐다”는 착각을 먼저 의심해야 한다
AI를 쓰면 멀티플레이 앱도 놀랄 만큼 빨리 형태가 잡힌다. 방이 만들어지고, 사람이 들어오고, 글을 쓰고, 투표도 된다. 여기서 머릿속은 말한다.
끝났다.
서버는 말한다.
한 명으로 해 본 거잖아.
실전에서 무서운 것은 버튼 하나가 한 번 눌렸을 때가 아니다. 100명이 동시에 누르면? 저장은 성공했는데 성공 응답만 사라지면? 마감 시각과 마지막 투표가 겹치면? 결제 알림이 두 번 오면? 장애가 끝난 순간 모두가 동시에 재접속하면?
한 소규모 멀티플레이 웹앱을 코드 리뷰했더니 테스트 항목은 324개까지 늘었다. 이것은 버그 324개를 발견했다는 뜻이 아니다. 324개 모두 아직 실행하지 않은 테스트 항목이었다.
1. DDoS만 보면 부족하다
Cloudflare는 모든 요금제에서 DDoS 자동 탐지와 완화를 제공하지만, 자체 문서에서도 애플리케이션 영향이 남을 수 있으므로 rate limit 같은 추가 방어를 권장한다.[1]
개인 개발에서는 악성 공격보다 정상 이용자가 먼저 한도를 때릴 수도 있다.
3초마다 상태를 확인한다고 단순 계산하면:
| 동시 단말 | 시간당 상태 확인 |
|---|---|
| 10 | 12,000 |
| 30 | 36,000 |
| 100 | 120,000 |
| 1,000 | 1,200,000 |
실제 수용량 예측은 아니다. 대기 간격 조절과 캐시로 줄어들 수 있고, 게시·이미지·받은편지함·여러 탭·예약 작업이 붙으면 더 늘어난다.
2026년 10월 5일 기준 Workers Free는 하루 100,000 요청, D1 Free는 하루 읽기 500만 행, 쓰기 10만 행, DB당 500MB, Worker 호출당 50개 쿼리 제한을 안내한다.[2][3] 또한 하나의 D1 데이터베이스는 쿼리를 한 번에 하나씩 처리하며, 동시 요청이 많으면 대기하다가 과부하 오류가 날 수 있다.[3]
즉 진짜 공포는 “공격자 백만 명”만이 아니다.
정상 사용자 100명이 동시에 즐겁게 놀아 주는 것도 구조에 따라 충분히 부하 테스트다.
2. 324개가 된 이유
확인은 16개 영역으로 퍼졌다. 입구와 남용, 용량, 동시 실행과 복구, 예약 작업, 방과 권한, 이미지, 텍스트 입력, 투표, 마감, 결과 공개, 공개방, 상시 연결, 기기와 재접속, 외부 연동, 결제, 배포와 모니터링이다.
모두 같은 우선순위로 할 필요는 없다.
3. 공개 전에 먼저 때려 볼 23개
- 거부할 요청도 비싼 DB 작업까지 들어가는가.
- 자체 사용량 집계가 실제 모든 비싼 경로를 세는가.
- 연타 제한이 재시작이나 여러 실행 위치에서도 유지되는가.
- 변경 없음 응답도 DB를 많이 읽는가.
- 한 좌석에서 상시 연결을 무제한으로 만들 수 있는가.
- HTTP와 상시 연결에서 같은 행동 제한을 적용하는가.
- 운영 중지 후 이미 연결된 클라이언트도 멈추는가.
- 예약 작업이 늦어졌을 때 마감 후 입력이 통과하는가.
- 일부 저장 실패를 무시한 채 방만 다음 단계로 가는가.
- 복구 작업이 통계를 두 번 더하는가.
- 게임 실체가 생기기 전에 시작 예약만 소비되는가.
- 응답 유실 뒤 재전송이 답변 두 개가 되는가.
- 전각·반각·공백 차이로 같은 표시 이름이 중복되는가.
- 마지막 한 자리에 두 사람이 동시에 들어가는가.
- 예약 작업이 매번 끝내지 못할 만큼 커지는가.
- 이미지뿐 아니라 DB와 인덱스 전체 용량을 보는가.
- 잃어버린 기기의 사용자 자리를 다른 사람이 가져갈 수 있는가.
- 이미지 형식·크기·메타데이터·위치정보를 안전하게 처리하는가.
- 과거 기록이 많을수록 매 화면 조회 비용이 폭증하는가.
- 장애 복구 직후 동시 재접속이 두 번째 장애를 만드는가.
- 중복·지연·실패·해지·복구 결제를 따로 시험했는가.
- 로컬 테스트 통과를 운영 환경 통과로 착각하는가.
- DB가 죽을 때 모니터링까지 같이 죽는가.
4. 버그는 조합을 좋아한다
가치가 높은 시나리오는 이런 식이다.
100명 동시 투표 → 20명 새로고침 → 10명 연결 끊김 → 일부는 저장 성공 응답만 잃음 → 재전송.
그때 중복 집계, 늦은 투표, 오래된 화면으로 되돌아감, 같은 동작 두 번 실행을 본다.
OWASP도 동시 세션, 비정상 입력, 오류 처리를 각각 독립된 보안 시험 주제로 다룬다.[4]
5. 저장 성공과 성공 응답은 다른 사건이다
서버는 저장했는데 네트워크 응답만 사라질 수 있다. 사용자는 실패한 줄 알고 다시 누른다.
작업 식별자나 중복 방지 장치가 없으면 답변, 방, 투표, 알림, 결제가 두 개가 될 수 있다.
재시도는 “생길 수 있는 것”이 아니라 “설계해야 하는 것”이다.
6. 부하 테스트는 단계적으로
관리하는 검증 환경에서 10 → 30 → 100 순서로 늘린다.
같은 100명도 바꿔 본다.
- 한 방에 집중
- 여러 방에 분산
- 동시에 참가
- 동시에 마지막 투표
- 장애 뒤 동시에 재접속
- 예약 작업과 겹치기
- 저장소 실패를 중간에 넣기
허가받지 않은 타인의 서비스나 운영 환경에 대량 트래픽을 보내는 것은 테스트가 아니다. 시작 전에 예산과 중단 조건을 정한다.
7. “안 죽었다”만으로 합격이 아니다
성능 목표는 예를 들어 평상시 요청 95%가 1초 안, 99%가 3초 안, 예상 밖 5xx 오류 0.1% 미만처럼 둘 수 있다.
하지만 다음은 0건이어야 한다.
- 다른 사람 데이터 노출
- 권한 없는 동작
- 중복 점수
- 저장 완료 데이터 손실
- 이중 결제
8. 테스트 설계 9점, 실행 0점도 가능하다
324개 목록과 우선 23개가 잘 만들어졌다면 설계는 8.5~9/10 정도로 볼 수 있다.
하지만 실행 전이면 증거는 0/10이다.
나쁜 상태가 아니다. “무엇을 테스트해야 하는지 모름”에서 “어디를 부수러 가야 하는지 앎”으로 바뀐 것이다.
9. 이번에는 AI 주간 한도가 먼저 죽었다
AI로 하루 종일 큰 저장소를 읽히고, 구현하고, 고치고, 리뷰하고, 다시 구현하면 서버보다 먼저 AI 사용량이 바닥날 수 있다.
Claude Max 20x는 2026년 10월 5일 기준 웹에서 월 200달러다. 20x는 Pro 대비 세션 사용량이며 세션 한도는 5시간마다 초기화된다. 동시에 모든 모델이 공유하는 주간 한도도 있다.[5]
즉 20x는 무한이 아니다.
정확한 소비량은 모델, 문맥, 작업에 따라 달라지므로 Settings > Usage가 정답이다.
10. “Fable 비싸다”는 숫자로 봐도 맞는 편이다
Max에서 Fable 5와 5.1을 쓸 수 있지만 Fable은 주간 한도의 최대 50%까지 사용할 수 있고 다른 Claude 모델보다 한도를 더 빨리 소비한다고 Anthropic이 설명한다.[6]
종량제 가격은 더 직관적이다.
| 모델 | 입력 100만 토큰 | 출력 100만 토큰 |
|---|---|---|
| Sonnet 5.5 | $2 | $10 |
| Opus 5.5 | $4 | $20 |
| Fable 5.1 | $10 | $50 |
Fable 5.1의 입력과 출력 단가는 Opus 5.5의 2.5배다. 캐시 읽기 가격 인하로 Fable 5보다 전형적인 작업은 약 25%, 긴 에이전트 작업은 최대 약 45% 저렴해졌다고 하지만 절대 단가는 여전히 높다.[6][7][8]
API 가격을 Max 주간 한도로 그대로 환산할 수는 없다. 그래도 “무거운 모델을 오래 돌리면 비싸다”는 방향은 같다.
11. 매번 가장 큰 모델을 쓰지 않는다
Sonnet 5.5는 일상 수정과 반복 작업.
Opus 5.5는 원인 불명 버그, 큰 설계, 여러 파일 리뷰.
Fable 5.1은 추가 비용과 한도 소비를 감수할 만큼 어려운 작업.
이것은 모델 서열이 아니라 작업당 비용 관리다.
나사 하나 조일 때마다 크레인차를 부르면 크레인 회사는 매우 행복하다.
12. AI는 병목을 없애기보다 옮긴다
예전에는 아이디어 → 몇 주 개발 → 테스트였다.
AI를 쓰면 아이디어 → 빠른 구현 → 테스트, 운영, 서버 한도, AI 한도가 한 번에 온다.
“하루 만에 앱을 만들었다”를 더 정확하게 말하면 이렇다.
하루 만에 ‘이제 제대로 부숴 볼 수 있는 단계’까지 왔다.
그때부터가 진짜 출시 준비다.
- Cloudflare DDoS Protection developers.cloudflare.com
- Cloudflare Workers Limits / Pricing: / https://developers.cloudflare.com/workers/platform/pricing/ developers.cloudflare.com
- Cloudflare D1 Limits / Pricing: / https://developers.cloudflare.com/d1/platform/pricing/ developers.cloudflare.com
- OWASP Web Security Testing Guide wstg.owasp.org
- Anthropic Max plan support.claude.com
- Anthropic Fable models support.claude.com
- Claude Opus 5.5 anthropic.com
- Claude Sonnet 5.5 anthropic.com
