future cashcow — fiction 02
월급의 1.2%
Cursor $20, Claude Pro $20, Copilot Pro $10.
합계 월 72,500원. 세후 월급 268만원의 2.9%.
장바구니를 닫고, 무료 조합을 열었다.
Part I
"장바구니"
2026년 2월 15일 토요일 오후 2시. 안양시 만안구 원룸.
도현은 이불 위에 노트북을 올려놓고 크롬 탭을 열었다. 어젯밤부터 열어둔 탭이 9개. 전부 AI 코딩 도구 가격표다. 대표가 "우리도 AI 해야 돼"라고 말한 지 일주일. 그 일주일 동안 도현은 퇴근 후마다 유튜브에서 바이브코딩 영상을 봤고, 메모장에 도구 이름과 가격을 정리했다. 오늘은 결론을 내려야 한다.
첫 번째 탭. Cursor.
Hobby 무료 플랜이 있다. 월 2,000번의 자동완성. 프리미엄 모델 사용량 제한. 진짜 쓰려면 Pro $20/월. 영상에서 본 사람들은 전부 Pro였다. "무제한 자동완성"이라는 문구가 눈에 밟혔다. $20. 한화 29,000원. 도현은 메모장을 열었다.
두 번째 탭. Claude Pro.
$20/월. Anthropic의 Claude Sonnet 3.5는 무료로 쓸 수 있지만, 대화 횟수 제한이 있다. Pro를 결제하면 5배 더 많은 사용량과 Claude Code 접근권. 유튜브에서 "Claude Code로 풀스택 앱 빌드" 영상을 본 게 문제였다. 터미널 하나에서 프로젝트 구조 잡고, 코드 짜고, 테스트까지 돌리는 장면. 그 영상의 개발자는 "이제 VS Code 안 열어도 됩니다"라고 말했다. 거짓말처럼 보였다. 하지만 댓글에 500명이 "진짜됨"이라고 적어놓았다.
세 번째 탭. GitHub Copilot.
Pro $10/월. 가장 싸다. 하지만 Copilot은 자동완성 도구다. 줄 단위로 코드를 제안한다. 지금 도현이 원하는 건 줄 단위 제안이 아니라, "이 레거시 jQuery 코드를 React로 바꿔줘"같은 대화형 요청이다. Copilot Chat이 그 역할을 하긴 하지만, 유튜브에서는 아무도 Copilot을 추천하지 않았다. 요즘 대세는 Cursor와 Claude Code였다.
도현은 가격을 정리했다.
월 $50. 한화 72,500원. 세후 월급 268만원의 2.9%.
도현은 숫자를 보았다. 72,500원이면 회사 앞 백반집 기준 11끼. 일주일에 두 번은 점심을 굶어야 한다는 소리다. 아니, 그 전에 이미 점심을 굶고 있다. 구내식당이 없는 12인 회사에서 점심값은 자비. 도현은 이미 이삼일에 한 번은 편의점 삼각김밥으로 때우고 있었다.
72,500원. 매달. 카드 명세서에 Cursor Inc. $20, Anthropic $20, GitHub $10. 개인 카드. 회사가 아니라 내 돈. 내가 회사에서 쓸 도구를 내 돈으로 사는 거다.
도현은 가격표를 한 번 더 보았다. 그리고 Claude Max 탭을 열었다. $200/월. 탭을 닫았다. 열지 말았어야 했다.
도현은 메모장에 한 줄을 추가했다.
유료 조합: 불가.
무료 조합으로 간다.
"이 정도면... 아 안 되겠다." 도현은 혼잣말을 했다. 이불 위에서 벽을 한참 보았다. 그리고 다시 크롬을 열었다. 검색창에 "AI coding tools free tier 2026"을 쳤다.
무료의 세계. 제한과 한계와 타협의 세계. 도현은 그 세계로 들어갔다.
Part II
"무료의 대가"
2026년 2월 16일 일요일 오전 10시. 도현은 회사 노트북을 켰다. 일요일에 회사 노트북을 켜는 이유는 하나다. 개인 시간에 회사 환경을 세팅하는 것. 야근 수당 같은 건 없다. "개발팀장"이니까. 팀원은 0명이지만.
첫 번째 도구. GitHub Copilot Free.
GitHub 계정으로 무료 플랜을 활성화했다. 설정 화면이 떴다.
Code Completions: 2,000/month
Chat Messages: 50/month
Models: Claude 3.5 Sonnet, GPT-4o (limited)
# 계산
월 근무일: 22일
일 자동완성: 2,000 / 22 = 90.9개
일 채팅: 50 / 22 = 2.27회
하루 90번의 자동완성. 도현은 그 숫자를 보며 생각했다. 보통 코딩할 때 Tab 키를 얼마나 누르는가. 한 줄 쓸 때마다 한 번. 한 함수에 열 줄이면 열 번. 하루에 함수를 열 개 작성하면 100번. 90번이면 모자란다.
하지만 무료니까.
VS Code에서 Copilot 익스텐션을 설치했다. 테스트로 회사 프로젝트를 열었다. jQuery로 작성된 관리자 페이지. 2019년에 전임자가 만든 코드. 도현이 입사했을 때 이미 있었고, 3년 동안 한 줄도 리팩토링하지 못했다. 대표가 "새 기능 추가해"라고 하면 기존 코드 아래에 새 함수를 붙이는 게 전부였다.
도현은 새 파일을 만들고 타이핑을 시작했다.
function loadDashboardData() {
// Copilot이 제안하기 시작
const response = await fetch('/api/dashboard');
const data = await response.json();
return data;
}
회색 글씨가 나타났다. Copilot의 자동완성. Tab을 눌렀다. 코드가 채워졌다. 한 번. 두 번. 다섯 번.
카운터가 줄어가는 느낌이다. 자판기에 동전을 넣는 것처럼. Tab 한 번에 동전 하나. 한 달에 2,000개의 동전. 오늘 다섯 개를 썼다. 남은 동전 1,995개.
채팅은 더 심각했다. 월 50회. 하루 2.27회. "이 코드 설명해줘"가 한 번, "이 에러 해결해줘"가 한 번이면 오늘의 채팅은 끝이다. 남은 시간 동안은 Stack Overflow를 읽거나 스스로 해결해야 한다.
도현은 채팅 한 번을 아끼기 위해 질문을 세 개 합쳐서 보냈다.
Q: 1) jQuery $.ajax를 fetch API로 마이그레이션하는 패턴 알려줘
2) 기존 콜백 체인을 async/await로 변환하는 방법
3) IE11 지원 안 해도 되는 환경에서 제거해도 되는 폴리필 목록
질문 하나에 세 개를 우겨넣었다. 무료의 기술이다.
두 번째 도구. Cody Free.
Sourcegraph의 AI 코딩 어시스턴트. 무료 플랜. VS Code 익스텐션. Copilot과 다른 점은 코드베이스 컨텍스트를 이해한다는 것이다. 프로젝트 전체를 인덱싱해서, "이 함수를 호출하는 곳을 전부 찾아줘" 같은 요청이 가능하다. 무료 플랜의 자동완성과 채팅 한도는 넉넉한 편이었다.
설치했다. 인덱싱이 시작됐다. 회사 프로젝트 폴더를 가리켰다.
# 파일 수: 847
# jQuery 파일: 312
# ES6+ 파일: 0
# TypeScript 파일: 0
Warning: Large number of legacy JavaScript files detected.
847개 파일 중 312개가 jQuery. 나머지는 PHP 서버 코드와 HTML 템플릿. ES6 이상의 모던 자바스크립트는 0개. TypeScript도 0개. Cody의 경고 메시지가 도현의 현실을 정확히 요약하고 있었다.
세 번째 도구. OpenRouter 무료 모델.
OpenRouter는 다양한 AI 모델을 하나의 API로 묶어주는 서비스다. 무료 모델이 18개 이상 있었다. DeepSeek V3.2는 입력 토큰 $0.28/M. 사실상 무료에 가깝다. 도현은 API 키를 발급받고, VS Code의 Continue 익스텐션에 연결했다.
{
"models": [
{
"title": "DeepSeek V3.2 (free)",
"provider": "openrouter",
"model": "deepseek/deepseek-chat-v3-0324:free",
"apiKey": "sk-or-..."
}
]
}
세팅이 끝났다. 도현의 무료 AI 코딩 환경이 완성됐다.
$0. 완벽하다. 완벽하게 부족하다.
도현은 테스트를 시작했다. 회사 프로젝트의 관리자 대시보드 페이지. jQuery로 작성된 테이블 정렬 함수. 200줄짜리. 이것을 모던 자바스크립트로 리팩토링해달라고 DeepSeek에게 요청했다.
Q: 이 jQuery 테이블 정렬 함수를 바닐라 JS로 리팩토링해줘.
jQuery 의존성을 제거하고 싶어.
[응답 시간: 12초]
응답 품질: 3/5
# 기본적인 변환은 됐지만,
# $(selector).each() → document.querySelectorAll() 변환에서
# NodeList의 forEach 지원 여부를 고려하지 않음
# 이벤트 위임 패턴이 빠져 있음
# 에러 처리 없음
응답이 돌아왔다. 12초. Claude Pro라면 3초였을 것이다. 그리고 품질. 기본적인 변환은 됐지만 빈틈이 있었다. 무료 모델의 한계. 도현은 빈틈을 직접 채워야 했다.
무료의 대가. 시간이다. 유료 도구가 3초에 해주는 걸 무료 도구는 12초에 해주고, 그 결과물을 30분 동안 검증하고 수정한다. $20을 아끼는 대신 시간으로 치르는 거다. 하지만 그 시간은 어차피 야근 시간이다. 야근 수당은 없으니까. 이게 중소기업의 논리다.
도현은 DeepSeek의 응답을 수정하기 시작했다. NodeList.forEach() 호환성 코드를 추가하고, 이벤트 위임 패턴을 넣고, try-catch로 에러를 잡았다. 30분이 걸렸다. 결과물은 쓸 만했다. "쓸 만하다"가 무료의 최선이었다.
오후 1시. 배에서 소리가 났다. 냉장고를 열었다. 냉동 만두 한 봉지와 김치. 만두를 전자레인지에 돌리면서 어제 점심을 떠올렸다. 회사 앞 백반집에서 박대리, 유진이랑 먹은 된장찌개. 유진이 "팀장님 주말에도 코딩해요?"라고 물었고, 도현은 "조금"이라고 답했다. "조금"이 아니라 "토요일 오전 10시부터"였지만.
전자레인지가 삐 소리를 냈다. 만두를 접시에 놓고, 간장에 식초를 타서 찍어 먹으면서 무료 도구의 조합을 정리했다.
자동완성: GitHub Copilot Free (하루 ~90회)
코드 리뷰: Cody Free (코드베이스 컨텍스트)
대화형 코딩: Continue + DeepSeek V3.2 (무료)
백업: Claude Free (하루 ~10회 제한적 사용)
# 제한사항
- Copilot 자동완성 월말에 소진 가능성
- DeepSeek 품질 편차 큼 (복잡한 리팩토링 부적합)
- Claude Free는 긴 코드 맥락 유지 어려움
- 실질적으로 "없는 것보다 나은" 수준
마지막 줄을 쓰고 도현은 만두를 입에 넣었다. "없는 것보다 나은 수준." 이것이 월급 268만원의 개발팀장이 가질 수 있는 AI 환경이었다.
유튜브에서는 Cursor Pro + Claude Max를 나란히 열어놓고, 터미널 두 개에서 동시에 코드를 생성하는 사람들이 있었다. 그 사람들의 화면은 빠르고 매끄럽고 마법처럼 보였다. 도현의 화면은 12초의 로딩과 3/5의 품질과 월 2,000번의 카운트다운이었다.
개발자의 85%가 AI 도구를 정기적으로 사용한다는 통계를 봤다. 85%. 그 85%의 대부분은 회사에서 도구를 제공받겠지. 아니면 연봉이 높아서 $20가 커피값인 사람들이겠지. 나는 85%에 속하고 싶지만, 속할 수 있는 형편이 아니다.
Part III
"유튜브 대학"
밤 11시 14분. 도현은 침대에 누워 유튜브를 켰다. 이것은 이미 습관이 됐다. 퇴근하고, 씻고, 침대에 눕고, 유튜브. 알고리즘이 도현의 취향을 정확히 파악하고 있었다. 피드에는 바이브코딩 영상만 가득했다.
첫 번째 영상. 어떤 외국인 개발자가 Cursor를 열고 "Build me a task management SaaS"라고 타이핑한다. AI가 Next.js 프로젝트를 생성하고, Tailwind CSS로 UI를 만들고, Prisma로 데이터베이스를 연결하고, Stripe 결제를 붙인다. 1시간 15분짜리 영상. 배속으로 보면 25분. 25분 만에 결제까지 되는 SaaS가 나온다.
1시간 만에 SaaS. 나는 회사에서 관리자 페이지 테이블 하나 고치는 데 이틀 걸린다.
두 번째 영상. 한국인 개발자. 터미널에서 Claude Code를 실행한다. "식당 예약 앱 만들어줘. React Native + Supabase로." Claude가 프로젝트 구조를 잡고, 파일을 생성하고, 코드를 작성한다. 개발자는 중간중간 피드백만 한다. "여기 디자인 좀 더 깔끔하게." "예외 처리 추가해줘." "테스트 돌려봐." 30분 만에 앱이 빌드된다. 에뮬레이터에서 돌아간다.
도현은 그 개발자의 모니터를 주의 깊게 보았다. 고해상도 4K 모니터. 울트라와이드. 옆에 보이는 맥북 Pro. 아마도 M3 이상. 개발 환경 자체가 달랐다. 도현의 회사 PC는 인텔 i5-10세대에 16GB RAM. 모니터는 22인치 FHD 하나.
세 번째 영상. 썸네일에 수익 인증 스크린샷. 도현은 이 영상을 세 번째 보고 있었다. 비개발자가 AI로 코드를 만들어서 SaaS를 런칭하고, 월 구독 매출이 천만원이라는 내용. 코드를 한 줄도 이해하지 못하지만 AI가 다 해줬다고 한다.
비개발자가 AI로 월 천만원을 번다. 나는 개발자인데 연봉 3,800만원이다. 뭔가 잘못됐다. 아니, 잘못된 게 아니라 세상이 바뀐 거다. 코드를 이해하는 것보다 AI한테 시키는 게 더 중요한 세상.
도현은 영상을 멈추고 천장을 보았다. 2019년에 대학을 졸업했다. 컴퓨터공학. 4년 동안 자료구조, 알고리즘, 운영체제, 네트워크를 배웠다. 졸업 후 넥스트비전에 입사했다. 7년차. 그 7년 동안 코딩 실력은 늘었다고 생각했다. jQuery에서 React로, REST에서 GraphQL로. 하지만 유튜브의 세계에서는 그 5년이 의미가 없었다. AI에게 "해줘"라고 말하는 기술이 5년의 경험보다 강했다.
자정. 유튜브 영상에서 "로컬 LLM으로 무료 코딩 어시스턴트"라는 제목이 눈에 밟혔다. Ollama라는 도구로 로컬에 AI 모델을 돌리면 무료라는 것이었다.
도현은 집 PC를 켰다. 3년 전에 산 게이밍 PC. GTX 1060 6GB. 게임용으로 산 것이지만 요즘은 게임할 시간이 없다. 리그 오브 레전드 마지막 접속이 4개월 전이다. Ollama를 설치하고 코딩 특화 모델을 다운로드했다. Qwen 2.5 Coder 7B. 4.7기가바이트.
실행했다. GPU 사용률 98%. 팬이 비명을 질렀다. 응답 속도 초당 8.3 토큰. Claude API의 6분의 1. jQuery를 fetch로 변환해달라는 간단한 요청에 22초가 걸렸고, 결과물은 빈틈이 많았다. 더 큰 14B 모델을 시도하자 VRAM이 부족해 CPU로 돌아갔고, 한 문장 생성에 40초. 불가능했다.
도현은 창문을 열었다. 2월의 찬바람이 들어왔다. PC의 열기와 냉기가 원룸 안에서 부딪혔다. GPU 온도 82도. 팬이 울고 있었다.
새벽 1시. Ollama를 종료하고 PC를 껐다. 팬 소리가 멈추자 원룸이 조용해졌다.
도현은 다시 유튜브를 열었다. 이번에는 추천 영상이 아니라 검색을 했다. "중소기업 개발자 AI 도구." 결과가 거의 없었다. "프리랜서 AI 도구 추천." 결과의 대부분이 $50 이상의 유료 구독을 전제로 한 영상이었다. "무료 AI 코딩." 결과가 있었다. 하지만 대부분 2024년 영상이었고, 그사이에 무료 티어가 축소되거나 사라진 도구가 절반이었다.
유튜브의 AI 코딩 세계는 두 종류의 사람으로 나뉘어 있었다. 유료 도구를 자유롭게 쓰는 사람과, 무료 도구의 한계 안에서 발버둥치는 사람. 영상을 올리는 사람은 전자였고, 영상을 보는 사람은 후자였다.
Y Combinator의 2025 겨울 배치에서 스타트업의 25%가 코드의 95%를 AI로 생성했다는 기사를 읽었다. 95%. 그 스타트업들은 Cursor Business와 Claude Max를 쓰고 있을 것이다. 도구 비용이 개발자 월급의 10%를 넘어도, 생산성 향상이 그 비용을 상회하니까. 스타트업은 투자금이 있다. 넥스트비전에는 없다.
개발자의 85%가 AI 도구를 쓴다
그 도구의 가격은 아무도 말하지 않는다
Part IV
"29,000원의 결심"
3월 14일 금요일 저녁 8시. 한 달이 지났다.
무료 조합으로 한 달을 버텼다. 버텼다는 표현이 정확했다. Copilot Free의 자동완성은 매달 20일쯤 소진됐다. 남은 열흘은 Cody의 자동완성으로 채웠다. DeepSeek은 간단한 질문에는 쓸 만했지만, 복잡한 리팩토링이나 레거시 코드 분석에는 한계가 명확했다. 응답의 30% 정도는 수정이 필요했고, 10% 정도는 아예 쓸 수 없었다.
그 한 달 동안 도현이 해낸 것. 관리자 대시보드의 테이블 정렬 기능을 jQuery에서 바닐라 JS로 리팩토링했다. 200줄짜리 함수 하나. 한 달. 유튜브에서는 전체 SaaS를 1시간에 만드는데, 도현은 함수 하나에 한 달이 걸렸다.
대표 김영수가 금요일 회의에서 물었다.
"도현 씨, AI 도입 진행 상황이 어때?"
"지금 무료 도구들로 테스트하고 있습니다. 관리자 페이지 일부를 리팩토링 중이고요."
"한 달 됐는데, 성과가 좀 보여야 할 것 같은데." 대표가 안경을 올려 쓰며 말했다. "지난번에 본 영상에서는 AI로 하루 만에 앱 하나 만들더라고. 우리는 왜 이렇게 오래 걸리는 거야?"
대표님이 본 영상. 대표님도 유튜브를 보고 있었다. 대표님의 유튜브 알고리즘도 "AI로 하루 만에 앱 만들기"를 추천하고 있었다. 대표님과 나는 같은 영상을 보고 다른 생각을 하고 있다. 대표님은 "우리도 저렇게 빠르게 할 수 있겠네"라고 생각하고, 나는 "저 사람은 Cursor Pro $20 + Claude Max $200을 쓰고 있고, 저 배경의 맥북은 M3 Max이고, 저 모니터는 프로디스플레이 XDR이고"라고 생각한다.
"영상에서 보이는 것은... 도구 비용이 좀 있습니다. 월 7-8만원 정도 AI 도구 구독이 필요한데, 지금은 무료 도구로 하고 있어서 속도가 좀 느립니다."
"7-8만원? 그 정도면 회사에서 지원할 수 있지. 검토해봐."
도현은 잠시 멈췄다. 회사에서 지원한다고? 한 달 동안 개인 시간을 들여 무료 도구를 세팅하고, 한 달 동안 무료의 한계와 싸웠는데, 한마디면 되는 거였나?
"감사합니다. 비용 검토서 올리겠습니다."
회의가 끝나고 도현은 자리에 앉아 비용 검토서를 작성하기 시작했다. Cursor Pro $20, Claude Pro $20, Copilot Pro $10. 합계 $50. 한화 72,500원. 타이핑하다가 멈췄다. 대표가 "그 정도면"이라고 한 것은 회사 전체 비용 기준이다. 12인 회사에서 직원 한 명의 도구 구독료 72,500원은 — 대표 입장에서는 — 복사용지 비용 수준이다.
하지만 대표가 정말로 결재할까. 넥스트비전은 복사용지도 아끼는 회사다. 직원 연말 회식 예산이 인당 3만원이다. 화장실 휴지를 2겹에서 1겹으로 바꾼 회사다. 72,500원을 매달 지출하겠다고 결재해줄까.
도현은 비용 검토서를 세 번 고쳤다. 네 번째 고치다가 저장하고 퇴근했다. 월요일에 올리겠다고 마음먹었다. 하지만 월요일에도 올리지 못했다. 화요일에도. 수요일에도. 결재 요청 한 번 하는 게 이렇게 어려운 이유는, 거절당할 가능성 때문이 아니었다. 승인되더라도 "개발자가 도구 하나 때문에 결재까지 올린다"는 인식이 남을 것 같아서였다.
3월 21일 금요일 밤. 도현은 결국 자기 카드를 꺼냈다.
Cursor는 포기했다. DeepSeek이 대화형 코딩의 70%를 커버하고 있었으니까. Copilot Pro도 포기했다. 무료 티어의 2,000번이 모자라지만 Cody로 보충하면 됐다. 남은 것은 Claude Pro.
Claude Pro $20. 한화 29,000원. 세후 월급 268만원의 1.08%. 반올림하면 1.2%.
도현은 결제 페이지에서 30초 동안 멈췄다. 개인 카드 번호를 입력하는 손가락이 잠시 멈칫했다. 회사에서 쓸 도구를 개인 돈으로 산다. 이것은 자기계발 비용인가, 업무 비용인가, 아니면 자괴감의 가격인가.
Thank you for subscribing to Claude Pro!
Plan: Pro ($20/month)
Billed to: **** **** **** 7283
Next billing date: April 21, 2026
# 개인 신용카드. 회사 법인카드가 아니다.
결제가 끝났다. 도현은 클로드를 열었다. 무료 버전과 같은 인터페이스. 하지만 상단에 "Pro" 뱃지가 떠 있었다. 그 작은 뱃지가 도현의 29,000원이었다.
첫 번째 테스트. 한 달 동안 미뤄둔 작업. 관리자 페이지의 사용자 관리 모듈. jQuery + PHP 레거시 코드. 4년 전 전임자가 작성한 것. 약 600줄. $.ajax 호출이 23개. 콜백 지옥이 세 군데. 글로벌 변수가 일곱 개. 인라인 SQL이 두 군데.
도현은 코드를 복사해서 Claude에 붙여넣었다.
Q: 이 jQuery + PHP 코드를 분석해줘.
1) 현재 코드의 문제점 목록
2) 리팩토링 우선순위
3) 첫 번째 우선순위 항목의 리팩토링 코드
[응답 시간: 4초]
4초. DeepSeek이 12초 걸린 응답이 4초에 왔다. 그리고 품질.
1. 문제점 (심각도 순)
- SQL 인젝션 취약점:
user_manage.php L127, L203에 인라인 SQL. 사용자 입력이 이스케이프 없이 쿼리에 삽입됨- XSS 취약점:
renderUserTable()에서 HTML 이스케이프 없이 사용자 이름을 DOM에 삽입- 글로벌 상태 오염:
window.currentUser, window.userList 등 7개 글로벌 변수- 콜백 지옥:
saveUser()에서 3단계 중첩 콜백- 에러 처리 부재:
$.ajax의 error 콜백이 23개 중 4개만 정의됨2. 리팩토링 우선순위
1순위: SQL 인젝션 수정 (보안 취약점, 즉시)
2순위: XSS 수정 (보안 취약점, 즉시)
3순위: 에러 처리 추가 (안정성)
4순위: 콜백 → async/await 변환 (가독성)
5순위: 글로벌 변수 → 모듈 패턴 (유지보수성)
도현은 화면을 읽었다. SQL 인젝션. 4년 동안 운영 중인 관리자 페이지에 SQL 인젝션 취약점이 있었다. 도현은 그 코드를 3년 동안 유지보수하면서 한 번도 발견하지 못했다. DeepSeek에게 같은 코드를 분석시켰을 때는 "jQuery를 fetch로 바꾸면 됩니다" 정도의 답변이었다. 보안 취약점에 대한 언급은 없었다.
도현은 1순위 리팩토링 코드를 요청했다. Claude가 PHP의 prepared statement로 인라인 SQL을 교체한 코드를 생성했다. Before/After가 명확했다.
$query = "SELECT * FROM users WHERE name = '" . $_POST['name'] . "'";
$result = mysqli_query($conn, $query);
$stmt = $conn->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
Before 3줄, After 4줄. 변경 사항이 명확했다. 도현은 코드를 이해할 수 있었다. prepare로 쿼리 구조를 먼저 정의하고, bind_param으로 사용자 입력을 안전하게 바인딩한다. "s"는 문자열 타입 지정. 대학교 3학년 데이터베이스 수업에서 배운 내용이었다. 배웠지만 실무에서 적용하지 않은 내용.
도현은 나머지 인라인 SQL도 같은 패턴으로 수정했다. Claude가 제안한 코드를 복사하되, 각 줄이 무슨 일을 하는지 확인하면서. 30분 만에 2개의 SQL 인젝션 취약점이 수정됐다.
그다음 XSS. renderUserTable() 함수에서 사용자 이름을 innerHTML로 직접 삽입하고 있었다. Claude가 textContent로 교체하는 코드를 제안했다. 5분.
그다음 에러 처리. 23개의 $.ajax 호출 중 19개에 에러 핸들러가 없었다. Claude가 공통 에러 핸들러 함수를 만들고, 모든 $.ajax 호출에 연결하는 코드를 생성했다. 20분.
한 시간. 총 한 시간 만에 세 가지 작업이 끝났다. 무료 도구로 한 달 걸린 테이블 정렬 리팩토링보다, 유료 도구로 한 시간 만에 끝낸 보안 수정이 훨씬 가치가 있었다.
도현은 의자에 기대앉아 천장을 보았다.
29,000원. 월급의 1.2%. 이 1.2%가 한 달을 한 시간으로 압축했다. 4년 동안 몰랐던 보안 취약점을 4초 만에 찾아냈다. 무료와 유료의 차이는 가격이 아니라 시간이다. 그리고 시간은 돈보다 비싸다. 적어도, 268만원짜리 월급을 받는 사람에게는.
도현은 Claude에게 한 가지 더 물었다.
Q: 이 관리자 페이지 전체를 React + TypeScript로
마이그레이션하는 계획서를 작성해줘.
현실적인 일정으로. 혼자 하는 경우.
전제: 개발자 1명, AI 도구 보조, 기존 업무 병행
Phase 1 (1-2주): 환경 설정 + 공통 컴포넌트
- Vite + React + TypeScript 프로젝트 초기화
- 공통 UI 컴포넌트 (Table, Form, Modal) 생성
- API 클라이언트 래퍼 (fetch + 에러 처리)
Phase 2 (3-4주): 페이지별 순차 마이그레이션
- 사용자 관리 → 대시보드 → 설정 순서
- 각 페이지: jQuery 코드 분석 → React 컴포넌트 변환 → 테스트
Phase 3 (1-2주): 통합 테스트 + 배포
- E2E 테스트 (Playwright)
- 기존 PHP 백엔드와 연동 확인
- 점진적 롤아웃
예상 총 기간: 6-8주
(기존 업무 병행 기준. AI 도구 없이는 12-16주 예상)
6-8주. AI 보조 없이는 12-16주. 도현은 이 계획서를 월요일에 대표에게 보여줄 수 있다. "AI 도입 성과"로. Cursor가 아니라 Claude 하나로, $200이 아니라 $20로.
도현은 노트북을 덮고 창밖을 보았다. 안양 만안구의 금요일 밤. 아파트 창문마다 불빛이 켜져 있었다. 저 불빛 중 몇 개가 개발자의 방일까. 저 개발자들 중 몇 명이 월급의 1.2%를 AI 도구에 쓰고 있을까.
개발자의 85%가 AI 도구를 정기적으로 사용한다. 그 통계에는 비용을 누가 부담하는지가 빠져 있다. 회사가 내는 경우, 개인이 내는 경우, 무료로 버티는 경우. 85%라는 숫자 뒤에 숨겨진 풍경은 도현의 원룸처럼 다양했을 것이다.
도현은 다시 노트북을 열었다. 월요일 회의 자료를 만들어야 했다. Claude에게 도움을 요청하려다가 멈췄다. 이것은 내가 직접 써야 하는 문서다. AI가 대신 써줄 수 없는 것. 대표에게 왜 AI 도구가 필요한지, 무료와 유료의 차이가 뭔지, 29,000원이 어떤 가치를 만드는지 설명하는 것은 도현의 몫이었다.
타이핑을 시작했다. 제목은 "AI 도구 도입 1차 보고서".
보고서의 첫 번째 항목에 이렇게 적었다. "무료 도구로 1개월간 테스트한 결과, 유료 도구($20/월) 대비 생산성이 약 70% 낮았습니다. 유료 도구 기준 1시간 작업이 무료 도구로는 반나절 이상 소요됩니다."
두 번째 항목. "개인 비용으로 Claude Pro($20/월)를 1일간 테스트한 결과, 4년간 미발견된 보안 취약점 2건을 즉시 식별했습니다. 해당 취약점은 SQL 인젝션으로, 운영 환경에서 데이터 유출 위험이 있었습니다."
세 번째 항목. "관리자 페이지 리팩토링 예상 기간: AI 보조 시 6-8주, 미보조 시 12-16주."
네 번째 항목. "월 도구 비용 $20(약 29,000원). 연간 348,000원. 개발자 연봉 대비 0.9%."
연봉의 0.9%. 이렇게 쓰면 싸 보인다. 하지만 이 0.9%를 회사가 내줄지 내가 내야 할지는 월요일에 결정된다. 결국 중요한 건 숫자가 아니라 대표의 한마디다.
새벽 2시. 보고서를 저장하고 노트북을 덮었다.
침대에 누워서 생각했다. 유튜브에서는 AI가 개발자를 대체한다고 한다. 대체되기 전에 AI를 먼저 써야 한다고 한다. 맞는 말이다. 하지만 AI를 쓰려면 돈이 든다. 돈이 없으면 무료로 버텨야 한다. 무료로 버티면 유료를 쓰는 사람과의 격차가 벌어진다. 격차가 벌어지면 대체될 확률이 높아진다.
악순환. 도현은 그 악순환의 고리를 29,000원으로 끊어보려는 중이었다. 월급의 1.2%. 편의점 삼각김밥 20개. 버스비 24회분. 도현이 지불할 수 있는 최대치.
눈을 감았다. 내일은 토요일이다. 쉬어야 한다. 하지만 머릿속에는 월요일 회의가 맴돌았다. 대표가 뭐라고 할까. "29,000원이면 회사에서 내줄게"라고 할까. "그 정도는 개인이 알아서 해야지"라고 할까. 아니면 "그거 말고 더 좋은 거 없어? 유튜브에서 본 그 Cursor라는 거"라고 할까.
어떤 대답이 돌아오든, 도현의 내일은 이미 정해져 있었다. 월요일에 출근해서 레거시 코드를 열고, Claude에게 분석을 요청하고, 코드를 이해하고, 수정하고, 테스트하고, 커밋한다. $20짜리 AI와 $0짜리 인간이 함께. 그것이 월급 268만원의 개발팀장이 할 수 있는 최선이었다.
안양 만안구의 밤이 깊어졌다. 원룸의 불이 꺼졌다. 책상 위의 노트북만 충전 표시등이 깜박이고 있었다. 초록색 불빛. 아주 작은. 29,000원만큼 작은.
72,500원을 감당할 수 없어서
29,000원으로 시작했다
월급의 1.2%. 그것이 268만원짜리 개발자가 AI 시대에 지불할 수 있는 입장료였다.