차주인닷컴(chajooin.com)을 만든 운영자입니다. 고졸, 화물차 8년(2017~). 코드를 한 줄도 칠 줄 모르는 상태에서 2025년 8월 16일 Claude와 함께 첫 커밋을 찍었습니다. 238일이 지났고, 지금 이 서비스는 매일 자동으로 데이터를 수집하고 리포트를 발행합니다.

이 글은 "만들었다"가 아니라 "만들고 운영 중이다" 의 기록입니다. 바이브 코딩으로 프로토타입을 만든 후기는 많은데, 프로덕션 운영을 이어가는 경험은 드물어서 씁니다. 성공담이 아니라 작동한 것과 안 한 것의 솔직한 기록입니다.


배경

  • 도메인: 화물차 시세 비교 (17조원 시장, 실거래가 공식 기록 없음)
  • 이전 시도: 2024년 턴키 외주 3천만원 → 수정 주도권이 외주에 있어 포기
  • 전환: 2025년 7월 AI 2달 학습 → 8월 16일 첫 커밋

스택

Frontend    Vite + React + TypeScript + Tailwind  
Backend     Node.js + Express + Prisma  
DB          PostgreSQL (Railway managed)  
수집        Playwright (headless) + 소스별 파서 46개  
ML          LightGBM (Python, 75 features)  
배포        Railway (Docker)  
자동화      Node scheduler + 텔레그램 알림  
AI 협업     Claude (주 개발) + GPT-4o (쇼츠 대본/프롬프트)  
인증        Naver/Kakao OAuth  

스택을 "선택"한 게 아닙니다. AI에게 "이거 만들려면 뭐 써야 돼?"를 물었고 받아썼습니다. 나중에 보니 합리적인 조합이었습니다. AI 에이전트의 실용적 가치 — 선택의 인지적 부담을 대신 져줍니다.

숫자 (2025-08-16 ~ 2026-04-12)

항목
전체 커밋 3,493
커밋한 날 189일
코드 파일 수 약 1,500 (js/ts/py 기준)
롤백 20회+
배포 실패 39회 (초기 Railway 셋업 이틀)
같은 버그 최대 반복 7회 (가격 단위)
활성 매물 약 48,000대
외부 소스 파서 46개
CLAUDE.md 187줄, 24조 절대 규칙
메모리 파일 129개

1부. 만들기 — 작동하게 만든 3가지

1.1 CLAUDE.md — 규칙으로 AI를 제어

같은 버그가 두 번 터지면 "조심해줘"는 무의미합니다. 구체 규칙을 파일에 적고, AI가 매 세션 시작 시 읽게 합니다.

"파서=원 → 정규화=÷10,000 → DB=만원. DB값에 ×10,000 금지"  
"파서 연식 추출 실패 시 getFullYear() 대입 금지"  
"kakaotalk을 vercel.json UA rewrite에 추가 금지"  
"setInterval 값은 Math.min(value, 2^31-1) 클램핑 필수"  

현재 24조. 전부 실제 사고 이후에 생겼습니다.

1.2 역할 분리 — 기획/판단은 사람, 구현은 AI

코드는 못 읽어도 결과는 판단할 수 있습니다. 포터 2톤이 500만원으로 뜨면 "이건 틀렸다"고 할 수 있고, 윙바디와 카고가 같은 가격으로 나오면 "분리하라"고 할 수 있습니다. 도메인 감각이 테스트 역할을 합니다.

1.3 메모리 파일 — 세션 간 컨텍스트 유지

129개 메모리 파일에 결정/실패/정책을 누적. 새 세션이 열릴 때 관련 메모리를 읽어 과거 판단을 유지합니다. AI 컨텍스트 윈도우의 한계를 파일 시스템으로 메우는 구조입니다.


2부. 운영 — 만드는 것과 다른 문제

2.1 자동으로 돌고 있는 것들

  • 매물 인제스천: 스케줄러가 외부 소스에서 데이터 수집 → 품질 게이트 → DB 반영
  • 시세 리포트: 매일 자동 생성 → 블로그/카페에 자동 발행
  • 쇼츠 대본 생성: 톤급별로 GPT-4o가 대본/Sora 프롬프트 생성 (영상 합성은 별도 단계)
  • ML 재학습: 주 1회 신규 데이터로 시세 엔진 재학습
  • 모니터링: 파이프라인 이상 시 텔레그램 알림

개발자는 저 혼자입니다.

2.2 비용

  • 인프라: Railway (PostgreSQL + Node + Playwright)
  • AI API: Claude 구독(개발용) + GPT-4o API (쇼츠 생성용, api_usage_log 기반 월 $1 내외 추정)
  • 도메인/OAuth: 네이버/카카오

2.3 사고 대응 기록

  • 1,138건 데이터 오염 (3/2): 연식 폴백 버그 발견 → DB 패치 + 재처리 파이프라인 + 규칙 추가
  • Slack 알림 6개월 미작동 (3/18 발견): 환경 변수/경로 문제 → 텔레그램 단일 경로로 통합 재구성
  • setInterval 32-bit 오버플로우 (4/10): 로그인 먹통 → 핫픽스 + 클램핑 규칙 추가
  • 카카오톡 빈 화면 (1/31): SEO UA rewrite가 카카오톡 인앱 브라우저까지 잡음 → UA 목록 수정

2.4 운영 규칙 발췌

CLAUDE.md에 운영 관점 규칙도 포함되어 있습니다.

"배포 후 3가지 숫자로 보고: 서버 상태(health 200),  
 오늘 크롤 건수(어제 ±20% 이내), 활성 매물 수(급변동 없음)"  
  
"4개 이상 파일 수정 시, 스케줄러 연결 시, DB 스키마 변경 시,  
 이전에 revert된 영역 재수정 시 → 사전 보고 필수"  
  
"임시 변경(폴백/TODO/하드코딩)은 대장에 기록:  
 무엇을 언제까지 원복해야 하는지, 원복 안 하면 뭐가 터지는지"  

AI는 이 규칙을 매번 읽고, 해당 상황이 오면 작업 전에 먼저 보고합니다.


3부. 작동하지 않은 것들

3.1 같은 버그 7번 반복 — 데이터 경로 전체를 못 본다

가격 단위 버그가 7번 터진 이유: 수집 → 파서 → 정규화 → DB → API → UI의 6단계 중 한 곳만 고치면 다른 경로에서 또 터집니다. "전체를 보는 능력"이 비개발자+AI 조합에 가장 부족합니다. AI는 시키는 곳만 고치고, 사람은 다른 경로가 있는 줄 모릅니다.

3.2 1,138건 데이터 오염 — AI의 "친절한" 기본값

파서가 연식 추출에 실패했을 때 getFullYear()를 반환하는 코드가 들어갔습니다. AI 입장에서는 "null보다 현재 연도가 낫다"는 판단이었을 겁니다. 결과: 2003년식 포터가 2026년식으로 DB에 박혔습니다. "모르면 null"을 AI에게 따로 적어주지 않으면, 무언가를 채워넣습니다.

3.3 Slack 알림 6개월 미작동 — 감시 시스템을 감시하지 않음

알림이 실패로 끝나고, 실패 자체가 로그에 안 남아서 6개월간 조용했습니다. 그동안 파이프라인 이상이 몇 건 있었지만 "문제없다"고 착각했습니다. AI로 만든 시스템에서 가장 위험한 상태는 '잘 돌아가는 것처럼 보이는' 상태입니다. 현재는 텔레그램 단일 경로로 단순화했습니다.

3.4 setInterval 32-bit 오버플로우 — 언어 함정

setInterval이 int32만 받는다는 걸 모르면, 30일을 밀리초로 넣었을 때 즉시 실행된다는 걸 모릅니다. 로그인 먹통. AI는 이런 edge case를 자발적으로 경고해주지 않습니다. 터진 뒤에야 클램핑 규칙이 생겼습니다.

3.5 ML 과적합 — 학습 MAPE 8.56% vs 실전 42%

LightGBM 75 features로 학습 MAPE 8.56% 달성 후 "됐다"고 생각했습니다. 실전 42%. 이유: 호가 데이터의 구조적 한계(실거래가 부재, 다운계약서, 딜러 마진). 도메인 전문가면 처음부터 알 수 있는 건데, "학습 결과가 좋으면 된다"에 갇혔습니다.


남은 생각

238일 돌아보고 정리하면:

  • AI는 구현 속도를 크게 당겨준다. 코드 모르는 사람도 작동하는 서비스를 만들 수 있다.
  • 대신 운영 품질은 자동으로 따라오지 않는다. 사고는 예외 없이 터지고, AI는 자발적으로 경고해주지 않는다.
  • 비개발자의 일은 코드 작성이 아니라 규칙·감시·검증 설계로 옮겨간다. 결과 판단과 재발 방지가 본업이 된다.

혼자 운영하는 프로덕션이라 샘플 n=1입니다. 일반화하지 않겠습니다. 같은 조건에서 다른 분들 경험이 궁금합니다.


링크

피드백 환영합니다. 특히 "잘 돌아가는 것처럼 보이는 상태"를 혼자서 어떻게 감시하시는지 궁금합니다.