![]()
목차
- 왜 FAQ 챗봇부터 만드는가
- 실습 전 준비물
- 1단계, 질문 데이터 정리
- 2단계, Claude Code로 CLI 골격 만들기
- 3단계, AntiGravity로 실행 흐름 묶기
- 4단계, 응답 품질 점검과 수정
- 초보자가 자주 하는 실수
- Q&A
- 오늘 5분 실습
- 마무리
왜 FAQ 챗봇부터 만드는가
비전공자가 바이브 코딩을 배울 때 제일 좋은 출발점은 거창한 서비스가 아니라 반복 질문을 처리하는 작은 도구다. 수업 안내, 강의 일정, 준비물, 신청 방법 같은 질문은 매번 비슷하게 들어온다. 이걸 사람이 매번 복붙으로 답하면 지치고, 어느 날은 문구가 틀어진다. 반대로 FAQ 챗봇은 입력과 출력이 단순해서 구조를 이해하기 좋고, 실제 업무에도 바로 붙는다.
오늘 실습 목표는 Claude Code로 최소한의 명령줄 챗봇을 만들고, AntiGravity로 실행 과정을 고정해서 비전공자도 다시 돌릴 수 있게 만드는 것이다. 웹앱부터 달려들면 화면, 배포, 디자인, 인증까지 한꺼번에 터진다. 그런데 CLI 챗봇은 질문 파일과 답변 파일만 보면 되니 훨씬 덜 복잡하다. 바이브 코딩은 처음부터 크게 먹으려다 체하는 게임이 아니다. 작은 자동화 하나를 끝까지 완주하는 감각이 먼저다.
실습 전 준비물
1. 작업 폴더 만들기
mkdir -p faq-bot-lab/data faq-bot-lab/scripts faq-bot-lab/output
cd faq-bot-lab
2. 질문과 답변 원본 준비
CSV 한 장이면 충분하다. 아래처럼 시작하면 된다.
cat > data/faq.csv <<EOF
question,answer
수업 신청은 어떻게 하나요,홈페이지 신청 폼을 작성한 뒤 확인 문자를 기다리면 됩니다.
준비물은 무엇인가요,노트북과 충전기 그리고 실습용 구글 계정이 있으면 됩니다.
비전공자도 들을 수 있나요,네 가능합니다. 실습은 단계별로 진행합니다.
EOF
3. 테스트 질문 파일 준비
cat > data/question.txt <<EOF
비전공자도 들을 수 있나요
EOF
4. Claude Code 실행
claude
실행 후에는 아래처럼 명확하게 요청하는 편이 낫다.
비전공자 실습용 FAQ 챗봇 CLI를 만들어줘.
CSV 파일에서 질문과 답변을 읽고,
question.txt의 문장과 가장 비슷한 질문을 찾아
output/answer.html에 결과를 저장하게 해줘.
설명 주석을 충분히 넣고, 실패 시 에러 문구도 이해하기 쉽게 써줘.
1단계, 질문 데이터 정리
AI 도구부터 잡지 말고 데이터부터 정리해야 한다. 비전공자가 여기서 자주 놓치는 게 있다. 챗봇 품질은 모델 이름보다 원본 질문 문장 품질에 더 크게 흔들린다. 실제로 들어오는 질문과 너무 동떨어진 문장을 CSV에 넣으면 모델이 아니라 데이터가 삐끗한 것이다.
좋은 FAQ 데이터는 세 가지 기준을 만족한다. 첫째, 질문 문장이 실제 사용자 말투와 비슷해야 한다. 둘째, 답변은 짧고 단정해야 한다. 셋째, 한 셀에 여러 주제를 우겨넣지 않아야 한다. 예를 들어 수업료, 일정, 준비물을 한 답변에 다 박아 넣으면 나중에 하나만 바꾸기 어려워진다.
추천 데이터 규칙
- 질문은 한 문장으로 짧게 쓴다
- 답변은 두세 문장 안에서 끝낸다
- 전화번호, 링크, 시간은 최신값만 남긴다
- 중복 질문은 말투만 다르게 추가한다
Claude Code에게 코드를 부탁하기 전에, 먼저 이런 규칙을 말해주면 결과가 훨씬 안정된다. 결국 바이브 코딩도 말 잘 시키는 사람이 이긴다.
2단계, Claude Code로 CLI 골격 만들기
이제 최소한의 Python 스크립트를 받는다. 핵심은 엄청 똑똑한 검색이 아니라 돌아가는 흐름이다. 아래 같은 코드가 출발점으로 충분하다.
from pathlib import Path
import csv
base = Path(__file__).resolve().parent.parent
faq_file = base / "data" / "faq.csv"
question_file = base / "data" / "question.txt"
output_file = base / "output" / "answer.html"
question = question_file.read_text(encoding="utf-8").strip()
rows = []
with faq_file.open(encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
rows.append(row)
best = None
for row in rows:
if question.replace(" ", "") in row["question"].replace(" ", ""):
best = row
break
if best is None and rows:
best = rows[0]
html = f"""
FAQ 답변
입력 질문: {question}
추천 답변: {best["answer"]}
"""
output_file.write_text(html, encoding="utf-8")
print(f"saved: {output_file}")
엄밀하게 보면 이건 고급 검색이 아니다. 그런데 비전공자 첫 실습에는 오히려 이 정도가 맞다. 데이터 파일이 어디 있고, 입력은 어디서 읽고, 결과는 어디로 저장하는지가 선명하게 보이기 때문이다. 여기서 중요한 건 완벽한 유사도 계산이 아니라 파일 흐름을 눈으로 이해하는 것이다.
Claude Code에게 한 번 더 요청해서 코드 품질을 높일 수도 있다.
지금 코드에 아래를 추가해줘.
1. CSV 파일이 없으면 친절한 안내문 출력
2. question.txt가 비어 있으면 실행 중단
3. answer.html에 질문 목록도 같이 넣기
4. 나중에 웹앱으로 확장하기 쉽게 함수로 분리
이렇게 요청하면 단순 생성이 아니라 개선 루프를 배우게 된다. 비전공자는 코드를 외우는 사람보다, 수정 요청을 정확히 하는 사람이 훨씬 빨리 는다.
3단계, AntiGravity로 실행 흐름 묶기
여기서 AntiGravity가 빛난다. 한번 성공한 실행 과정을 파일로 고정해두면 다음부터는 다시 말로 설명할 필요가 없다. 초보자 입장에서는 그 자체가 엄청난 안정감이다. 오늘 만든 FAQ 챗봇 흐름은 아래 세 단계면 충분하다.
steps:
- name: run_bot
run: python scripts/faq_bot.py
- name: check_output
run: test -f output/answer.html
- name: preview_output
run: cat output/answer.html
이 구성이 좋은 이유는 단순하다. 실행, 확인, 미리보기만 있기 때문이다. 초보자가 자주 실패하는 패턴은 첫날부터 자동 배포, 자동 전송, 자동 이미지 생성까지 우겨 넣는 것이다. 그럼 어디서 깨졌는지 찾기 어렵다. AntiGravity는 복잡한 일을 더 크게 만드는 도구가 아니라, 이미 검증된 단계를 다시 꺼내 쓰는 도구로 생각하는 게 맞다.
Claude Code에 같이 시키면 좋은 요청
AntiGravity 워크플로우 파일도 같이 작성해줘.
비전공자가 바꾸는 값은 맨 위 변수 영역에 모아주고,
실패하면 어느 단계에서 멈췄는지 바로 보이게 해줘.
이 한 줄이 나중에 시간을 많이 아껴준다. 특히 교육 현장에서는 누가 막혔는지 바로 보여야 도와주기 쉽다.
4단계, 응답 품질 점검과 수정
챗봇이 답을 뱉었다고 끝난 게 아니다. 사람 손으로 꼭 봐야 하는 포인트가 있다. 질문과 답변이 비슷해 보여도 실제 사용자 입장에서 어색할 수 있다. 특히 교육, 신청, 일정 안내는 한 문장 차이로 신뢰도가 떨어진다.
체크포인트 1, 답변이 질문에 바로 반응하는가
사용자가 준비물을 물었는데 신청 링크부터 나오면 엇박자다. 첫 문장은 질문 핵심에 바로 맞춰라.
체크포인트 2, 행동 유도가 있는가
좋은 FAQ는 정보만 주지 않는다. 신청 페이지로 이동, 문자 대기, 준비물 챙기기 같은 다음 행동이 보여야 한다.
체크포인트 3, 오래된 정보가 없는가
시간, 비용, 장소는 금방 낡는다. 데이터 파일을 정기적으로 갈아끼우는 습관이 중요하다.
체크포인트 4, HTML 출력이 읽기 쉬운가
한 문단이 너무 길면 결국 사람이 다시 손댄다. 리스트와 강조 태그를 적절히 쓰면 체감 품질이 확 올라간다.
python scripts/faq_bot.py > run.log 2>&1
cat run.log
실행 로그를 남기면 왜 실패했는지 찾기 쉽다. 이건 사소해 보이지만 초보자 삽질 시간을 많이 줄여준다.
초보자가 자주 하는 실수
- 질문 데이터보다 모델 이름에 집착한다
- 코드가 한 번 돌아가자마자 웹서비스로 점프한다
- 파일 경로를 하드코딩해 다른 컴퓨터에서 다시 못 돌린다
- 한 답변에 여러 링크와 공지를 몰아 넣는다
- 실행 로그를 안 남겨서 막힌 지점을 못 찾는다
이 다섯 가지만 피하면 실습 완성도가 꽤 올라간다. 특히 첫 번째, 세 번째가 치명적이다. 바이브 코딩은 멋진 단어보다 재실행 가능한 구조가 먼저다.
Q&A
Q1. 꼭 Python이어야 하나
아니다. Node.js로 해도 된다. 다만 비전공자에게는 파일 읽기와 쓰기가 단순한 Python이 출발점으로 편하다.
Q2. Claude Code 없이도 가능하지 않나
가능은 하다. 하지만 처음 구조를 잡고 주석을 붙이고 개선 요청을 반복하는 속도는 Claude Code를 붙였을 때 훨씬 빠르다.
Q3. AntiGravity는 왜 필요한가
실행 단계를 기억에 의존하지 않게 해준다. 한번 성공한 흐름을 파일로 남기면 교육용, 팀용, 개인용으로 재사용하기 좋다.
Q4. 이걸 바로 수강신청 챗봇으로 써도 되나
가능하지만 처음엔 내부 FAQ부터 권한다. 민감한 개인정보나 결제 흐름이 엮이면 검수 범위가 갑자기 커진다.
Q5. 챗봇 답이 부정확하면 어떻게 고치나
코드를 갈아엎기 전에 CSV 원문부터 점검해라. 실제로는 데이터 수정만으로 해결되는 경우가 많다.
오늘 5분 실습
- 자주 받는 질문 5개를 메모장에 적는다.
- 질문과 답변을 data/faq.csv로 정리한다.
- Claude Code에게 FAQ CLI 골격 코드를 만들어 달라고 요청한다.
- AntiGravity에 실행, 확인, 미리보기 3단계를 묶는다.
- 질문 한 개를 바꾸어 다시 실행하고 답이 어떻게 달라지는지 확인한다.
이 5분 실습이 별거 아닌 것 같아도 꽤 중요하다. 여기서 입력 파일, 처리 스크립트, 출력 결과를 손으로 연결해 본 사람은 다음에 폼 자동응답, 블로그 초안 생성, 공지문 요약 같은 작업으로 바로 확장할 수 있다.
미래이음연구소 바이브 코딩 교육
이신우 소장이 운영하는 미래이음연구소에서는 Claude Code, AntiGravity, 실무 자동화 도구를 비전공자 눈높이로 훈련한다.
강의 문의: 010-3343-4000 | lab.duonedu.net
마무리
비전공자에게 필요한 첫 바이브 코딩 경험은 화려한 앱 데모가 아니다. 내가 자주 받는 질문을 구조화하고, 실행하고, 다시 수정하는 반복이다. Claude Code는 시작 속도를 올려주고, AntiGravity는 그 흐름을 다시 재생하게 만든다. 이 두 가지가 붙으면 작은 CLI 도구 하나도 꽤 강력한 학습 자산이 된다.
오늘 만든 FAQ 챗봇은 끝이 아니라 시작이다. 내일은 여기에 질문 추천 문구를 붙일 수 있고, 그다음에는 HTML 결과를 웹페이지로 보여줄 수 있다. 하지만 순서는 바꾸지 마라. 먼저 돌아가게 만들고, 그다음 보기 좋게 만들고, 마지막에 넓혀라. 그게 비전공자가 오래 가는 바이브 코딩 방식이다.
참고자료
- Anthropic Claude Code 문서
- AntiGravity CLI 문서
- Python csv 모듈 문서