C5 Day 4 — 첫 미니 프로젝트: 약속 잡기 봇 SNLM 설계
별칭: C5 Day 4 · 비기너 4일차 · 약속 봇 SNLM
요약
C5 비기너 7 일 코스의 4 일차 실습이다. 학습자는 90 분 안에 친구와 약속 잡는 봇 이라는 미니 프로젝트의 설계 문서를 카드 3 장 (concept · entity · case) 으로 작성 한다. 이날의 가장 중요한 제약은 단 하나 — 코드는 단 한 줄도 짜지 않는다. 비기너의 가장 흔한 함정인 코드부터 짜고 싶다는 욕구 를 3 장의 카드를 먼저 작성하는 것 으로 누르고, 그러면 AI 가 짤 코드의 방향과 제약이 사전에 결정 되는 경험을 한다. 이 형태가 본 강의 concept/spec-driven-development 의 비기너용 진입 형태 다.
목표
90 분 안에 미니 프로젝트 설계 문서 작성 — 약속 잡기 봇. 카드 3 장 (concept · entity · case).
비기너의 함정 = 코드부터 짜기. Day 4 = 코드 ❌, 설계만.
프로젝트 — 친구와 약속 잡기 봇
| 시나리오 | 설명 |
|---|---|
| 입력 | "다음 주 화요일 저녁에 영화 보자" |
| 작업 | 캘린더 충돌 확인 → 친구 일정 확인 → 식당·영화관 제안 |
| 출력 | 약속 확정 + 캘린더 등록 + 친구에게 메시지 |
단계
1. concept 카드 — 시스템 정의
concept/appointment-bot.md:
wiki_id: concept/appointment-bot
title: 약속 잡기 봇 — 자연어 → 캘린더 통합
type: concept
본문:
## 정의
사용자의 자연어 약속 요청을 분석해 캘린더·메시징 도구와 통합하는 SNLM 시스템.
## 4 페르소나
- Planner: 일정 분석·제안
- Calendar Agent: 충돌 확인
- Restaurant Agent: 식당 제안
- Notifier: 친구에게 메시지
## 입력 / 출력
- 입력: 자연어 1 줄
- 출력: 약속 확정 객체 (시간·장소·참석자)
2. entity 카드 — 협업 도구
entity/google-calendar.md:
## 정체
Google 캘린더 — 약속 봇이 *충돌 확인 + 등록* 에 사용
## API
events.list / events.insert
3. case 카드 — 첫 시나리오
case/appointment-bot-first-run.md:
## 시나리오
"내일 점심 김밥 먹자" → 봇 응답:
1. 사용자 캘린더 12:00 회의 ❌
2. 13:00 빈자리 발견
3. 김밥 식당 3 곳 제안
4. 친구에게 카톡: "내일 13시 김밥 어때?"
## 실패 시나리오
- 친구 캘린더 권한 없음 → 사람이 보내는 메시지로 fallback
4. wikilink 박기
3 카드를 wikilink 로 연결 — concept ↔ entity ↔ case.
졸업 기준
- 카드 3 장 작성 (concept · entity · case)
- 코드는 1 줄도 안 기록 — 설계만
- wikilink 로 3 카드 서로 연결
깨달음 (Day 4 의 왜)
"코드부터 짜고 싶다는 욕구를 3 장의 카드 로 누른다. 그러면 AI 가 짤 코드의 방향과 제약 이 결정된다."
이게 concept/spec-driven-development 의 비기너 형태. SDD 4 단계 (Constitution → Specify → Plan → Tasks) 의 2 단계 (Specify) 까지를 3 카드 로 박은 것.
흔한 실수
| # | 증상 | 해결 |
|---|---|---|
| 1 | 코드부터 짠다 | Day 4 는 코드 ❌. 설계 카드만 |
| 2 | 카드 1 장에 다 넣음 | 1 카드 1 개념. 분해 |
| 3 | wikilink 미연결 | 카드끼리 서로 가리키지 않으면 그래프 안 됨 |
다음 — Day 5
case/c5-day5-one-bite — 한입 분해 (Day 4 의 봇을 5 단계로 쪼개기)