오늘은 새 걸 만들지 않는다. 지금까지 만든 걸 지키는 날이다. 겁주려는 게 아니라, 점검표 하나면 사고는 0에 가까워진다.
이 글 3줄 요약
- 운영의 핵심은 새 기능이 아니라 지키기다. 열쇠·공개·요금·백업·기록 다섯 항목을 한 번 훑으면 "내 것들은 안전하다"는 확신 하나가 남는다.
- 점검은 대부분 AI가 대신 한다. 각 폴더에서 Claude에게 "확인해줘"라고 시키면 키 유출도, 백업 상태도 AI가 훑어준다.
- 첫 점검만 넉넉히, 다음부터는 한 달에 한 번 5분이면 끝난다. 점검표를 인쇄해 모니터 옆에 붙여두면 사고는 나기 전에 막힌다.
이 글은 AI 바이브코딩 실습 9부작 시리즈의 마지막 9편이자 완결편이다. 코드를 한 줄도 몰라도 AI에게 일을 시켜 프로그램을 만드는 실습을, 설치부터 여기까지 함께 걸어왔다. 바로 앞 실습 8편에서 슬랙에서 말을 알아듣는 에이전트를 만들었다면, 이번 편은 그 모든 결과물을 안전하게 지키는 법이다. 원리를 더 파고 싶다면 짝이 되는 이론 편 — 이론 8편(에러 읽는 법), 이론 11편(보안·비용), 이론 12편(프로젝트 운영) — 을 함께 보면 좋다.
오늘 지킬 것 — 만든 프로젝트 5개
이번 점검의 대상은 실습 0~8에서 만든 프로젝트 다섯 개다. my-first-ai, menu-roulette, my-ledger, news-bot, my-agent. 새로 설치할 건 없다. 이미 다 있고, 계정도 실습 2·5·6에서 만든 GitHub·Vercel·Anthropic 콘솔이면 충분하다. 오늘 쓰는 도구도 어제와 같은 Claude Code다. 각 폴더에서 claude를 켜고 시키면, 점검의 대부분을 AI가 대신 훑어준다.
마음가짐 한 줄만 짚고 가자. 사고는 대개 '몰라서' 난다. 오늘 다섯 개만 알고 나면 그 '모름'이 사라진다. 처음 한 번만 40분쯤 앉아서 완주하면, 그 다음부터는 한 달에 한 번 5분이면 된다.
항목 1 — 열쇠(API 키) 유출 점검
첫 점검은 코드에 열쇠가 박혀 있진 않은지 찾는 것이다. 각 프로젝트 폴더에서 claude를 켜고 이렇게 시킨다.
이 폴더의 코드에 API 키·토큰·비밀번호가 직접 적혀 있는 곳이 있는지 전부 찾아줘. .env 파일은 빼고.
만약 발견되면 곧바로 옮기라고 시키면 된다.
코드에 직접 적힌 키를 .env 파일로 옮기고, 코드에서는 .env를 불러 쓰도록 고쳐줘.
왜 하는가. 열쇠가 코드에 박힌 채 GitHub에 올라가면 몇 분 만에 자동 봇이 긁어가 남의 요금을 태운다. 실제로 자주 일어나는 패턴이라, 실습 6에서 처음부터 .env(열쇠 전용 파일)로 가르친 것이다.
체크포인트 — Claude가 "코드에 직접 적힌 키는 발견 0건입니다"라고 답하면 이 프로젝트는 통과다. 다섯 폴더 모두 같은 방식으로 확인한다.
항목 2 — GitHub 공개 범위 점검
두 번째는 진열대(공개)와 금고(비공개)를 구분하는 것이다. 원칙은 담긴 내용으로 나뉜다.
- 배포용은 public 유지 OK — 메뉴 룰렛·장부처럼 열쇠를 안 쓰는 것은 남에게 보여줘도 안전하다.
- 열쇠 쓰는 건 private 전환 —
news-bot·my-agent처럼 키를 쓰는 것은 저장소를 비공개로 돌린다.
확인은 이렇게 시킨다.
news-bot 폴더의 .env 파일이 .gitignore에 들어 있어서 GitHub에 안 올라가는지 확인해줘.
왜 하는가. public은 매장 진열대, private은 사무실 금고다. 손님에게 보여줄 건 진열대에, 열쇠·장부는 금고에 둔다. .gitignore(올리지 않을 목록)에 .env가 있으면, 저장소가 공개여도 열쇠는 새 나가지 않는다.
체크포인트 — 열쇠 안 쓰는 것은 Public, 열쇠 쓰는 것은 Private로 나뉘어 있으면(또는 .env가 .gitignore에 들어 있으면) 통과다.
항목 3 — 요금 상한 걸기
세 번째는 요금 폭탄을 막는 두꺼비집을 설치하는 것이다. 순서는 이렇다.
- console.anthropic.com 접속 — 실습 6에서 API 키를 발급받은 그 사이트다.
- Usage(사용량) 메뉴에서 이번 달 얼마 썼는지 확인 — 보통 몇 센트~몇 달러라 놀랄 일이 거의 없다.
- Limits / Billing에서 월 한도(예: $10) 설정 — 이 금액을 넘으면 자동으로 멈춘다.
왜 하는가. 요금 폭탄의 99%는 '모르고 계속 돌던 것'이다. 월 상한은 집의 두꺼비집과 같아서, 뭔가 잘못돼도 정해둔 선에서 딱 끊어준다.
체크포인트 — 월 한도 금액이 저장되면 끝이다. 안심 한 줄 덧붙이자면, 슬랙·Vercel·GitHub는 무료 플랜이면 초과 시 자동으로 멈추는 구조라 요금이 청구되지 않는다.
항목 4 — 백업 확인
네 번째는 '최신으로' 올라가 있는지 확인하는 것이다. 이게 핵심이다.
내 프로젝트 5개가 전부 GitHub에 최신 상태로 올라가 있는지 확인해줘. 안 올라간 변경사항이 있으면 알려줘.
아직 안 올라간 게 있으면 곧바로 이어서 시킨다.
아직 안 올라간 변경사항을 커밋하고 GitHub에 올려줘.
왜 하는가. 백업의 완성은 '한 번 올려둔 것'이 아니라 '지금 최신이 올라가 있는지 확인하는 것'이다. 컴퓨터가 죽어도 GitHub에서 git clone(금고에서 통째로 꺼내오기)으로 프로젝트를 그대로 되살릴 수 있다 — 단, 올려둔 시점까지만.
체크포인트 — Claude가 "5개 모두 최신 상태로 GitHub에 올라가 있습니다"라고 답하면 통과, 백업 걱정 끝이다.
항목 5 — README, 미래의 나에게 쪽지
마지막은 한 달 뒤의 나를 위한 점검이다. 각 프로젝트 폴더에서 이렇게 시킨다.
이 프로젝트가 뭘 하는지, 어떻게 실행하는지 처음 보는 사람용 README.md를 만들어줘.
왜 하는가. 한 달 뒤의 나 = 처음 보는 사람이다. "이 폴더가 뭐였지?" 하고 헤매지 않도록, README(이 폴더가 뭔지 설명하는 안내문)를 남겨두는 것이다. 유지보수의 첫걸음은 미래의 나에게 남기는 쪽지다.
체크포인트 — 폴더 안에 README.md가 생기고, 열어보면 프로젝트 설명·실행법이 적혀 있으면 통과다.
인쇄용 점검표 — 월 1회 5분
다섯 항목을 한 표로 묶으면 이렇다. 이 표가 곧 함께 배포된 A4 점검표의 내용이다. 인쇄해서 모니터 옆에 붙여두고, 한 달에 한 번 다섯 칸을 손으로 체크하면 된다.
| 항목 | 하는 일 | 통과 기준 | 이론 연계 |
|---|---|---|---|
| ① 열쇠 유출 | 각 폴더에서 코드에 키가 직접 박혔는지 확인, 있으면 .env로 | "코드에 직접 적힌 키는 발견 0건" 응답 (5개 폴더 모두) | 이론 11편 |
| ② GitHub 공개 | 열쇠 안 쓰면 Public OK, 쓰면 Private (또는 .env가 .gitignore에) | 열쇠 쓰는 저장소가 Private거나, .env가 .gitignore에 있음 | 이론 11·12편 |
| ③ 요금 상한 | 콘솔에서 사용량 확인 → 월 한도(예: $10) 설정 | 월 한도 금액이 저장됨 (요금 폭탄의 두꺼비집) | 이론 11편 |
| ④ 백업 확인 | 5개 전부 GitHub에 최신 상태로 올라갔는지, 안 됐으면 바로 올림 | "5개 모두 최신 상태로 올라가 있습니다" 응답 | 이론 12편 |
| ⑤ README | 각 폴더에 README(안내문)가 있는지, 없으면 생성 | 폴더 안에 README.md가 있고, 설명·실행법이 적혀 있음 | 이론 12편 |
운영 중 이런 신호가 오면 — 증상별 대처
당황할 필요 없다. 운영 중 마주치는 신호는 대개 원인이 정해져 있다. 아래 표 하나면 대부분 처리된다.
| 증상(이런 신호가 오면) | 원인(대개 이거) | 대처 |
|---|---|---|
| 갑자기 API 요금이 늘었다 | 스케줄러가 중복 등록됨 | 같은 작업이 여러 번 걸렸는지 확인, 중복을 지우면 요금도 멈춘다 |
| GitHub에서 보안 경고 메일이 왔다 | 키 유출 탐지 | 해당 서비스에서 즉시 키를 재발급(옛 키는 폐기)하면 새 나간 키는 무용지물이 된다 |
| Vercel 사이트가 안 열린다 | 무료 한도 초과 또는 빌드 실패 | 대시보드에서 최근 배포 상태 확인(빨간 X면 실패) |
| 봇이 며칠째 조용하다 | 재부팅 후 bot.py를 다시 실행 안 함 | 터미널에서 봇을 다시 켠다 (자동 실행은 작업 스케줄러 — 실습 7 참고) |
| 장부 데이터가 날아갔다 | 브라우저 청소 프로그램이 localStorage 삭제 | 중요하면 CSV로 내보내 백업(실습 5)해 둔다 |
| 뭔지 모르겠는 에러가 떴다 | 원인 불명 | 에러 전문을 그대로 복사해 Claude에게 "이거 왜 이래?" — 만능 첫수 |
마지막 줄이 사실상 이 시리즈 전체를 관통하는 원칙이다. 무슨 에러든, 에러 전문을 그대로 Claude에게 붙여넣는 것이 언제나 통하는 첫 번째 수다. 이론 8편에서 배운 그대로다.
실습 9부작 수료 — 여기까지 온 길
축하한다. 이번 편으로 실습 과정을 수료했다. 코드는 한 줄도 안 쳤지만, 이제 '아이디어 → 작동하는 프로그램'을 혼자 왕복할 수 있다. 지금까지 걸어온 아홉 걸음을 되짚어 본다.
- 실습 1편 — 설치 : 첫 세팅
- 실습 2편 — 첫 앱 : 메뉴 룰렛
- 실습 3편 — 안전벨트 : Git·복구
- 실습 4편 — 장부 : 미니 ERP
- 실습 5편 — 대시보드 : 차트·CSV
- 실습 6편 — 배포 : 내 주소 갖기
- 실습 7편 — 자동화 : 뉴스 비서
- 실습 8편 — 에이전트 : 슬랙 봇
- 실습 9편 — 운영 : 오늘, 여기 (완결)
설치 → 첫 앱 → 안전벨트 → 장부 → 대시보드 → 배포 → 자동화 → 에이전트 → 운영까지. 막히면 Claude에게 물어보면 된다. 그게 바로 바이브코딩이다.
다음 행보 — 원리를 다지고 내 일에 써먹기
여기서 끝이 아니다. 손으로 다 해본 지금이 원리를 이해하기 가장 좋은 때다. "왜 그렇게 됐나"를 다지고 싶다면, 짝이 되는 이론 12부작을 이론 1편부터 되짚어 보길 권한다. 실습에서 손이 기억한 것을 이론에서 머리로 정리하면, 다음에 새 걸 만들 때 훨씬 빨라진다.
그리고 졸업 과제 하나. 매일·매주 반복하는 내 일 하나를 골라, "이걸 AI에게 어떻게 시킬까"를 한 장으로 기획해 보자. 오늘까지 배운 것으로 직접 만들 수 있다. 필요한 걸 남에게 부탁하지 않고, 말로 시켜 직접 만드는 사람 — 그 첫 도구를 오늘 손에 넣었다.