![]()
목차
- 왜 출석 CSV 자동화가 입문용으로 좋은가
- 실습 전 준비물
- 1단계, 샘플 데이터와 폴더 구조 만들기
- 2단계, Claude Code로 출석 요약 스크립트 만들기
- 3단계, AntiGravity로 실행 흐름 고정하기
- 4단계, 결과 검증과 실수 방지 장치 넣기
- 초보자가 자주 하는 실수
- Q&A
- 오늘 5분 실습
- 미래이음연구소 안내
- 마무리
- 참고자료
왜 출석 CSV 자동화가 입문용으로 좋은가
비전공자가 바이브 코딩을 배울 때 가장 먼저 부딪히는 벽은 코드 문법이 아니라 흐름이다. 어떤 파일을 읽고, 어떤 규칙으로 가공하고, 결과를 어디에 저장하는지 감이 안 잡히면 금방 막힌다. 출석 CSV 자동화는 이 흐름을 배우기에 아주 좋다. 입력 파일이 분명하고, 계산 규칙도 눈으로 검산할 수 있고, 결과물도 표로 바로 확인된다. 즉, 추상적인 AI 체험이 아니라 손에 잡히는 자동화 경험을 만들기 쉽다.
이번 실습 목표는 수업 출석 기록 CSV를 읽어서 학생별 출석 횟수와 지각 횟수를 집계하고, 요약 리포트를 새 CSV로 저장하는 것이다. Claude Code는 Python 코드 초안을 빠르게 만들고, 왜 이렇게 작성했는지 설명해주는 역할을 맡는다. AntiGravity는 실행 순서를 파일로 고정해서 내일 다시 해도 같은 결과가 나오게 만든다. 비전공자 입장에서는 이 두 도구를 같이 써야 진짜 실습이 된다.
실습 전 준비물
준비물은 거창하지 않다. 터미널, Python 3, 그리고 Claude Code를 실행할 수 있는 환경이면 된다. 실습 폴더는 꼭 새로 만들어라. 실제 학원 운영 파일이나 회사 원본 CSV로 바로 시작하면 실수했을 때 복구가 번거롭다. 먼저 샘플 파일로 성공 경험을 만들고, 그다음에 실데이터로 옮기는 편이 훨씬 안전하다.
준비 명령
mkdir -p attendance-lab/data attendance-lab/output attendance-lab/logs
cd attendance-lab
python3 --version
claude
Claude Code에 들어가면 아래처럼 요구사항을 한 번에 주는 게 좋다. 비전공자는 질문을 여러 번 쪼개기보다, 입력 파일 형식과 원하는 결과를 명확히 적는 편이 훨씬 안정적이다.
attendance.csv 파일을 읽어서 학생별 출석 횟수, 지각 횟수, 결석 횟수를 집계하는 Python 스크립트를 만들어줘.
결과는 output/summary.csv 로 저장하고, 처리 로그는 logs/run.log 에 남겨줘.
초보자가 읽어도 이해되게 주석을 충분히 넣고, 잘못된 행은 건너뛰되 로그에 이유를 남겨줘.
1단계, 샘플 데이터와 폴더 구조 만들기
입문자는 코드보다 데이터 준비에서 더 많이 흔들린다. 그래서 처음부터 폴더 구조를 단순하게 고정하는 게 중요하다. data 폴더는 원본, output 폴더는 결과, logs 폴더는 실행 기록으로 역할을 나눠두면 작업이 훨씬 덜 헷갈린다. 이 습관은 나중에 상담 신청서 정리, 매출 집계, 설문 결과 요약 같은 작업에도 그대로 재사용된다.
샘플 CSV는 아래처럼 직접 만든다. 상태 값은 출석, 지각, 결석 세 가지만 넣었다. 규칙이 단순해야 로직을 눈으로 검산하기 쉽다.
cat > data/attendance.csv <<EOF
name,date,status
김하늘,2026-04-14,출석
김하늘,2026-04-15,지각
박준호,2026-04-14,출석
박준호,2026-04-15,결석
이서윤,2026-04-14,출석
이서윤,2026-04-15,출석
EOF
체크포인트
- 원본 파일은 data 폴더에만 둔다
- 결과 파일은 output 폴더에 따로 저장한다
- 로그 파일 위치를 먼저 정해둔다
- 상태 값 종류를 미리 고정한다
2단계, Claude Code로 출석 요약 스크립트 만들기
이제 Claude Code로 Python 스크립트를 만든다. 핵심은 완벽한 코드 한 번에 뽑기가 아니라, 규칙이 드러나는 구조를 얻는 것이다. 학생 이름별로 카운트를 누적하고, 잘못된 값은 로그에 남기고 건너뛰게 만들면 실무에서 바로 쓸 수 있는 형태가 된다. 비전공자는 이 단계에서 함수 분리와 예외 처리 감각을 익히면 된다.
cat > summarize_attendance.py <<EOF
import csv
from collections import defaultdict
from datetime import datetime
from pathlib import Path
BASE_DIR = Path(__file__).parent
INPUT_FILE = BASE_DIR / "data" / "attendance.csv"
OUTPUT_FILE = BASE_DIR / "output" / "summary.csv"
LOG_FILE = BASE_DIR / "logs" / "run.log"
VALID_STATUS = ["출석", "지각", "결석"]
def write_log(message):
LOG_FILE.parent.mkdir(exist_ok=True)
with LOG_FILE.open("a", encoding="utf-8") as log:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log.write(f"[{timestamp}] {message}
")
def summarize_rows():
summary = defaultdict(lambda: {"출석": 0, "지각": 0, "결석": 0})
with INPUT_FILE.open("r", encoding="utf-8") as file:
reader = csv.DictReader(file)
for row_number, row in enumerate(reader, start=2):
name = (row.get("name") or "").strip()
status = (row.get("status") or "").strip()
if not name:
write_log(f"{row_number}행 건너뜀, 이름 없음")
continue
if status not in VALID_STATUS:
write_log(f"{row_number}행 건너뜀, 잘못된 상태값: {status}")
continue
summary[name][status] += 1
return summary
def save_summary(summary):
OUTPUT_FILE.parent.mkdir(exist_ok=True)
with OUTPUT_FILE.open("w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["name", "출석", "지각", "결석", "총합"])
for name in sorted(summary.keys()):
attend = summary[name]["출석"]
late = summary[name]["지각"]
absent = summary[name]["결석"]
total = attend + late + absent
writer.writerow([name, attend, late, absent, total])
def main():
write_log("출석 집계 시작")
summary = summarize_rows()
save_summary(summary)
write_log("출석 집계 완료")
if __name__ == "__main__":
main()
EOF
이 코드에서 중요한 포인트는 세 가지다. 첫째, 입력 파일 경로와 출력 파일 경로를 맨 위에서 분리해두었다. 둘째, 상태값 목록을 고정해 예상 밖 값이 들어와도 조용히 틀리지 않게 했다. 셋째, 로그를 별도 파일에 남겨 초보자도 왜 특정 행이 제외됐는지 추적할 수 있게 했다. 이 세 가지만 지켜도 바이브 코딩이 훨씬 덜 불안해진다.
실행 명령
python3 summarize_attendance.py
cat output/summary.csv
cat logs/run.log
3단계, AntiGravity로 실행 흐름 고정하기
한 번 실행에 성공했다고 실습이 끝난 건 아니다. 반복 가능해야 진짜 자동화다. 사람은 다음날 되면 명령 하나쯤 빼먹는다. AntiGravity는 이 반복 과정을 파일로 고정해준다. 비전공자에게 특히 중요한 이유는, 머리로 기억하는 순서를 실행 가능한 문서로 바꿔준다는 점이다.
이번 실습에서는 데이터 확인, 집계 실행, 결과 검토 세 단계만 묶어도 충분하다. 아래처럼 YAML 파일을 만들면 된다.
cat > antigravity.yaml <<EOF
steps:
- name: preview source data
run: cat data/attendance.csv
- name: build summary report
run: python3 summarize_attendance.py
- name: review summary
run: cat output/summary.csv
- name: review log
run: tail -n 20 logs/run.log
EOF
이제 실행은 한 줄이면 된다.
antigravity run antigravity.yaml
이 방식의 장점은 설명과 실행이 분리되지 않는다는 점이다. 수강생에게 말로 순서를 설명할 필요가 없다. 파일 하나만 전달하면 같은 흐름을 그대로 재현할 수 있다. 나중에 Google Sheets 업로드나 이메일 발송 단계가 필요해지면 steps 아래에 한 줄씩만 추가하면 된다.
4단계, 결과 검증과 실수 방지 장치 넣기
비전공자 실습에서 제일 많이 놓치는 부분이 검증이다. 결과 파일이 생겼다고 끝내면 안 된다. 합계가 맞는지, 누락된 학생이 없는지, 잘못된 상태값이 로그에 잘 남았는지까지 봐야 한다. 그래야 자동화가 편한 장난감이 아니라 믿고 쓰는 도구가 된다.
간단한 검증 명령은 아래 정도면 충분하다.
column -s, -t < output/summary.csv
grep "건너뜀" logs/run.log || true
wc -l data/attendance.csv output/summary.csv
여기서 한 단계 더 가고 싶다면, Claude Code에게 잘못된 상태값이 들어간 테스트 행을 일부러 추가하고 로그가 어떻게 남는지 확인하는 테스트까지 부탁하면 된다. 입문자가 가장 빨리 성장하는 순간은 성공 케이스보다 실패 케이스를 이해할 때다.
초보자가 자주 하는 실수
- 원본 CSV를 output 폴더로 덮어써서 입력과 결과를 섞는다
- 상태값 오타를 허용해 집계가 조용히 틀린다
- 로그를 남기지 않아 왜 결과가 달라졌는지 추적하지 못한다
- Claude Code에게 요구사항을 짧게 던져서 예외 처리 없는 코드만 받는다
- AntiGravity 없이 명령을 손으로 반복하다가 순서를 바꿔 실행한다
이 다섯 가지만 피하면 초보자 실습 성공률이 꽤 올라간다. 바이브 코딩은 감으로 밀어붙이는 방식 같아 보여도, 실제로는 입력 규칙과 실행 순서를 얼마나 명확히 고정하느냐가 승부다.
Q&A
Q1. Python을 거의 몰라도 이 실습이 가능한가
가능하다. 이번 예제는 문법 암기보다 파일 흐름 이해가 핵심이다. Claude Code에게 코드 설명과 주석을 같이 요구하면 학습 난도가 크게 내려간다.
Q2. 출석 대신 상담 신청서나 설문 응답에도 쓸 수 있나
그대로 응용 가능하다. 입력 CSV 열 이름만 바꾸고 집계 규칙을 수정하면 된다. 그래서 이런 구조형 실습이 입문자에게 특히 좋다.
Q3. AntiGravity를 꼭 써야 하나
한 번만 할 거라면 굳이 안 써도 된다. 하지만 반복 실습, 수업 자료 배포, 팀 공유가 들어가면 AntiGravity 같은 실행 흐름 고정 도구가 훨씬 강하다.
Q4. 결과를 CSV 대신 엑셀이나 구글 시트로 보내려면
다음 단계에서 충분히 확장할 수 있다. 우선은 로컬 CSV로 성공 경험을 만들고, 그다음 업로드 자동화를 붙이는 편이 덜 꼬인다.
오늘 5분 실습
- attendance-lab 폴더를 만든다
- 샘플 attendance.csv 를 붙여넣는다
- Claude Code에 집계 스크립트를 요청한다
- python3 summarize_attendance.py 를 실행한다
- antigravity run antigravity.yaml 로 반복 흐름을 고정한다
딱 여기까지만 해도 비전공자 기준에서는 엄청 큰 진전이다. 중요한 것은 거대한 서비스 하나를 만드는 게 아니라, 작은 데이터 작업을 스스로 자동화해보는 경험이다.
미래이음연구소 안내
미래이음연구소는 비전공자도 AI와 자동화를 자기 일에 붙일 수 있게 돕는 실전형 교육 콘텐츠를 만든다. 어려운 이론보다 바로 써먹는 흐름, 재현 가능한 예제, 현장 적용 중심 커리큘럼이 필요하다면 이 방향이 잘 맞다. Claude Code, AntiGravity, OpenClaw 같은 도구를 단순 소개로 끝내지 않고 실제 업무 자동화로 연결하는 사례를 꾸준히 다룰 예정이다.
마무리
Claude Code와 AntiGravity를 비전공자가 배울 때 중요한 것은 멋진 앱보다 작은 자동화를 끝까지 완성하는 경험이다. 출석 CSV 요약 실습은 입력, 처리, 결과, 로그, 반복 실행까지 자동화의 핵심 뼈대를 모두 담고 있다. 오늘 이 흐름을 한번 손으로 만들어두면, 내일은 상담 내역 정리, 다음 주에는 매출 집계, 그다음에는 리포트 생성으로 자연스럽게 확장할 수 있다. 바이브 코딩은 재능보다 반복 가능한 구조에서 힘이 나온다.
참고자료
- Anthropic Claude Code 문서
- AntiGravity 실행 흐름 예제 자료