본문 바로가기
실습 강의

바이브코딩 실습 9편 — 사고 안 치는 운영 (완결)

오늘은 새 걸 만들지 않는다. 지금까지 만든 프로젝트들을 5분 점검으로 지키는 법을 배운다. 열쇠·공개·요금·백업·기록 다섯 항목을 한 번 훑고, 인쇄용 점검표로 월 1회 반복하면 사고는 나기 전에 막힌다. 실습 9부작의 마지막 편이다.

오늘은 새 걸 만들지 않는다. 지금까지 만든 걸 지키는 날이다. 겁주려는 게 아니라, 점검표 하나면 사고는 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 — 요금 상한 걸기

세 번째는 요금 폭탄을 막는 두꺼비집을 설치하는 것이다. 순서는 이렇다.

  1. console.anthropic.com 접속 — 실습 6에서 API 키를 발급받은 그 사이트다.
  2. Usage(사용량) 메뉴에서 이번 달 얼마 썼는지 확인 — 보통 몇 센트~몇 달러라 놀랄 일이 거의 없다.
  3. 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부작 수료 — 여기까지 온 길

축하한다. 이번 편으로 실습 과정을 수료했다. 코드는 한 줄도 안 쳤지만, 이제 '아이디어 → 작동하는 프로그램'을 혼자 왕복할 수 있다. 지금까지 걸어온 아홉 걸음을 되짚어 본다.

설치 → 첫 앱 → 안전벨트 → 장부 → 대시보드 → 배포 → 자동화 → 에이전트 → 운영까지. 막히면 Claude에게 물어보면 된다. 그게 바로 바이브코딩이다.

다음 행보 — 원리를 다지고 내 일에 써먹기

여기서 끝이 아니다. 손으로 다 해본 지금이 원리를 이해하기 가장 좋은 때다. "왜 그렇게 됐나"를 다지고 싶다면, 짝이 되는 이론 12부작을 이론 1편부터 되짚어 보길 권한다. 실습에서 손이 기억한 것을 이론에서 머리로 정리하면, 다음에 새 걸 만들 때 훨씬 빨라진다.

그리고 졸업 과제 하나. 매일·매주 반복하는 내 일 하나를 골라, "이걸 AI에게 어떻게 시킬까"를 한 장으로 기획해 보자. 오늘까지 배운 것으로 직접 만들 수 있다. 필요한 걸 남에게 부탁하지 않고, 말로 시켜 직접 만드는 사람 — 그 첫 도구를 오늘 손에 넣었다.

자주 묻는 질문

API 키가 코드에 박혀 있으면 정말 위험한가요?

네, 생각보다 훨씬 위험합니다. 키(열쇠)가 코드에 적힌 채로 GitHub에 올라가면 몇 분 만에 자동 봇이 그 키를 긁어갑니다. 실제로 자주 일어나는 패턴이고, 남이 내 키로 요금을 태우는 사고로 이어집니다. 그래서 실습 6부터 처음부터 키를 .env(열쇠 전용 파일)에 따로 두라고 가르친 거예요. 점검할 때는 각 폴더에서 Claude에게 '코드에 키가 직접 적힌 곳을 찾아줘'라고 시키면 AI가 대신 훑어줍니다. 발견되면 '키를 .env로 옮겨줘' 한 줄이면 정리됩니다.

요금 폭탄이 무섭습니다. 어떻게 막나요?

월 상한을 걸어두면 됩니다. console.anthropic.com에 들어가 Usage에서 이번 달 얼마 썼는지 확인하고, Limits에서 월 한도(예: 10달러)를 설정하세요. 이 금액을 넘으면 자동으로 멈추기 때문에 집의 두꺼비집과 같은 역할을 합니다. 요금 폭탄의 99%는 '모르고 계속 돌던 것'이라, 상한 하나만 걸어두면 뭔가 잘못돼도 정해둔 선에서 딱 끊깁니다. 참고로 슬랙·Vercel·GitHub는 무료 플랜이면 한도 초과 시 자동으로 멈추는 구조라 요금이 청구되지 않으니 안심해도 됩니다.

GitHub는 public이 맞나요, private이 맞나요?

무엇을 담았느냐로 나뉩니다. 열쇠를 안 쓰는 프로젝트(메뉴 룰렛·장부처럼)는 남에게 보여줘도 안전하니 public으로 둬도 됩니다. 반대로 키를 쓰는 프로젝트(뉴스봇·에이전트)는 private로 돌리는 게 안전합니다. public은 매장 진열대, private은 사무실 금고라고 생각하면 쉬워요. 단, 저장소가 public이어도 .env가 .gitignore(올리지 않을 목록)에 들어 있으면 열쇠 자체는 새 나가지 않습니다. 그래서 '열쇠 쓰는 저장소가 private거나, .env가 .gitignore에 있음'이 통과 기준입니다.

백업은 한 번 올려두면 끝 아닌가요?

아닙니다. 백업의 완성은 '한 번 올려둔 것'이 아니라 '지금 최신이 올라가 있는지 확인하는 것'이에요. 컴퓨터가 죽어도 GitHub에서 git clone(금고에서 통째로 꺼내오기)으로 프로젝트를 그대로 되살릴 수 있지만, 되살아나는 건 '올려둔 시점까지만'입니다. 그래서 점검할 때 Claude에게 '5개가 전부 GitHub에 최신 상태로 올라가 있는지 확인해줘'라고 시키고, 안 올라간 게 있으면 바로 올려두는 겁니다. 이 확인 습관 하나가 백업을 진짜 백업으로 만듭니다.

봇이 며칠째 조용하거나 장부 데이터가 날아갔어요. 어떻게 하나요?

둘 다 흔한 신호이고 원인이 정해져 있습니다. 봇이 조용한 건 대개 컴퓨터를 재부팅한 뒤 bot.py를 다시 실행하지 않은 것이라, 터미널에서 봇을 다시 켜면 됩니다. 장부 데이터가 날아간 건 브라우저 청소 프로그램이 localStorage를 지운 경우가 많아요. 브라우저 데이터를 지우면 장부도 함께 지워지므로, 중요한 데이터는 실습 4에서 배운 대로 CSV로 내보내 백업해 두세요. 그리고 뭔지 모를 에러가 떴다면 만능 첫수는 늘 같습니다 — 에러 전문을 그대로 복사해 Claude에게 '이거 왜 이래?'라고 붙여넣는 겁니다.

관련 글