ํ๋ก์ ํธ ์๊ฐ
์๋ํ๊ณ ์ ํ๋ ๊ฒ๊ณผ ๊ทธ ์ด์
๋งค๋ฒ ๊ตฌ๊ธ ์บ๋ฆฐ๋ ์ฑ์ ์ด์ด์ ์ผ์ ์ ํ์ธํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๊ฒ ๋ฒ๊ฑฐ๋ก์ ์ต๋๋ค.
"์ค๋ ์ผ์ ๋ญ์ง?" โ ์ฑ ์ผ๊ธฐ โ ๋ก๊ทธ์ธ โ ์บ๋ฆฐ๋ ํ์ธ
"๋ด์ผ 3์์ ๋ฏธํ ์ถ๊ฐํด์ผ์ง" โ ์ฑ ์ผ๊ธฐ โ ๋ ์ง ์ ํ โ ์๊ฐ ์ ๋ ฅ...
"์นดํก์ผ๋ก '์ค๋ ์ผ์ ๋ณด์ฌ์ค' ํ๋ง๋๋ฉด ๋๋๋ฉด ์ผ๋ง๋ ์ข์๊น?"
์ด ์๊ฐ์์ CaldBot(Calendar Bot) ํ๋ก์ ํธ๋ฅผ ์์ํ์ต๋๋ค. ์นด์นด์คํก์์ ์์ฐ์ค๋ฌ์ด ๋ํ๋ง์ผ๋ก ์ผ์ ์ ์กฐํํ๊ณ , ์ถ๊ฐํ๊ณ , ์์ ํ๊ณ , ์ญ์ ํ ์ ์๋ ๋ด์ ๋ง๋ค๊ณ ์ถ์์ด์.
๋ชฉํ ๋ํ ์์:
๋: "์ค๋ ์ผ์ ๋ญ์ผ?"
๋ด: "๐
2025๋
11์ 17์ผ (์) ์ผ์
โข 14:00-16:00 AI ์คํฐ๋
โข 18:00-19:00 ์ ๋
์ฝ์"
๋: "๋ด์ผ ์คํ 3์์ ์น๊ณผ ์์ฝ ์ถ๊ฐํด์ค"
๋ด: "โ
์ผ์ ์ด ์ถ๊ฐ๋์์ต๋๋ค."
์งํ ๋ฐฉ๋ฒ
1๏ธโฃ ์ฌ์ฉํ ๋๊ตฌ
Claude Code: ์ค๊ณ ๋ฌธ์ ์์ฑ, ์์คํ ์ํคํ ์ฒ ์ค๊ณ
Codex: ์ค๊ณ ๊ฒ์ฆ, ๋ณด์/ํ์ฅ์ฑ ๋ฆฌ๋ทฐ
FastAPI: 24/7 ์๊ฐ ๊ตฌ๋ ๊ฐ๋ฅ ์๋ฒ
2๏ธโฃ Claude Code์ Codex ๊ต์ฐจ๊ฒ์ฆ ํ๋ก์ธ์ค
์ด๋ฒ ์ฃผ๋ ์ฝ๋ ์์ฑ์ด ์๋, ํํํ ์ค๊ณ์๋ฅผ ๋ง๋๋ ๋ฐ ์ง์คํ์ด์.
Step 0: ํ๋ก์ ํธ ๊ฐ์ ๋ฐ ์ด๊ธฐ ์ค์
์๋ฒ ํ๊ฒฝ ๊ตฌ์ถ
FastAPI ๊ธฐ๋ณธ ์ค์น
Systemd ์๋น์ค ๋ฑ๋ก
Step 1: ์ค๊ณ์ ์ด์ ์์ฑ (Claude Code)
๋จผ์ Claude Code์๊ฒ ํ๋ก์ ํธ ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋๋ก ํ๋ต๋๋ค.
์ฌ์ฉํ ํ๋กฌํํธ:
์นด์นด์คํก์ผ๋ก ๊ตฌ๊ธ ์บ๋ฆฐ๋๋ฅผ ์ ์ดํ๋ ์ฑ๋ด์ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
๋ค์ ์๊ตฌ์ฌํญ์ ํฌํจํ ์์ธ ์ค๊ณ ๋ฌธ์(design.md)๋ฅผ ์์ฑํด์ฃผ์ธ์:
1. ํ๋ก์ ํธ ๊ฐ์ ๋ฐ ๋ชฉํ
2. ์์คํ
์ํคํ
์ฒ (๋ฉ์ ์ ๋ดR โ FastAPI โ Google Calendar API)
3. ์ฃผ์ ๊ธฐ๋ฅ ๋ช
์ธ (์ผ์ ์กฐํ/์ถ๊ฐ/์์ /์ญ์ )
4. ์์ฐ์ด ์ฒ๋ฆฌ ํ๋ฆ (LLM ํ์ฉ)
5. ๋ณด์ ๊ณ ๋ ค์ฌํญ
6. Phase๋ณ ๊ตฌํ ๊ณํ
๊ฐ ์น์
๋ง๋ค ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ ์ ๊ฒฐ์ ์ฌํญ์ ํฌํจํด์ฃผ์ธ์.
๊ฒฐ๊ณผ:
design.mdํ์ผ ์์ฑ (์ฝ 500์ค ๋ถ๋)์์คํ ๊ตฌ์กฐ๋, API ์๋ํฌ์ธํธ ์ค๊ณ, Phase๋ณ ๋ก๋๋งต๊น์ง ํฌํจ
์ ์ฒด ๊ตฌ์กฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ช ํํ๊ฒ ํ์ ํ ์ ์์์ด์
๐ Step 2: ์ค๊ณ ๊ฒ์ฆ (Codex์ ๋ฆฌ๋ทฐ ์์ฒญ)
Claude Code๊ฐ ๋ง๋ ์ค๊ณ์๋ฅผ Codex์๊ฒ ๋ฆฌ๋ทฐ์์ผฐ์ด์.
์ฌ์ฉํ ํ๋กฌํํธ:
[design.md ๋ด์ฉ ์ ์ฒด ์ฒจ๋ถ]
์ ์ค๊ณ์๋ฅผ ๊ผผ๊ผผํ ๊ฒํ ํ๊ณ ๋ค์ ๊ด์ ์์ ํผ๋๋ฐฑํด์ฃผ์ธ์:
1. ๋ณด์ ์ทจ์ฝ์
2. ํ์ฅ์ฑ ๋ฌธ์
3. ๋์น ์ฃ์ง์ผ์ด์ค
4. ๋ ๋์ ์ค๊ณ ๋์
๊ฐ ํญ๋ชฉ๋ง๋ค ๊ตฌ์ฒด์ ์ธ ์์์ ๊ฐ์ ์์ ์ ์ํด์ฃผ์ธ์.
Codex๊ฐ ์ง์ ํ ์ฃผ์ ์ด์:
๐จ ๋ณด์ ์ทจ์ฝ์
1. HTTP/HTTPS ํผ์ฉ ์ํ
โ ๊ฐ๋ฐ ํ๊ฒฝ์์ HTTP ์ฐ๋ค๊ฐ ํ๋ก๋์
์์๋ ์ค์ํ ์ ์์
โ HTTPS๋ฅผ ๊ธฐ๋ณธ์ผ๋ก, HTTP๋ ์ฃผ์ ์ฒ๋ฆฌ
2. Webhook Secret ๊ฒ์ฆ ์์
โ ์๋ฌด๋ ์๋ฒ์ ๋ฉ์์ง ๋ณด๋ผ ์ ์์
โ ํ ํฐ ๊ฒ์ฆ ํ์
โ ๏ธ ํ์ฅ์ฑ ๋ฌธ์
1. ๋ค์ค ๊ณ์ ๋งคํ ์ ๋ต ๋ถ์ฌ
โ user1/user2 ํ์ผ๋ง ์๊ณ , ๋๊ฐ ์ด๋ค ๊ณ์ ์ธ์ง ๋งคํ ์ ๋จ
โ UserProfile ํ
์ด๋ธ ํ์
2. LLM Fallback ์ ๋ต ์์
โ LLM API ๋ค์ด๋๋ฉด ๋ด ์ ์ฒด ๋ค์ด
โ Rule-based Fallback ํ์
๐ก ๋์น ์ฃ์ง์ผ ์ด์ค
1. ๋ํ ์ํ ๊ด๋ฆฌ ์์
โ "๊ทธ๋๋ ์ถ๊ฐํ ๊น์?" โ "์" (๋งฅ๋ฝ ์ ์ง ์ ๋จ)
โ Conversation State ํ์
2. ์ถฉ๋ ์ฒดํฌ ๋ก์ง ๋๋ฝ
โ ์ด๋ฏธ 3์์ ์ผ์ ์๋๋ฐ ๋ ์ถ๊ฐ๋จ
๐ Step 3: ์ค๊ณ์ ์ ๋ฐ์ดํธ ๋ฐ ์ต์ข ๊ฒ์ฆ
์ฌ๋ฌ ์ฐจ๋ก์ ๊ต์ฐจ ๊ฒ์ฆ ํ๋ก์ธ์ค๋ฅผ ํตํด ์ค๊ณ์ ํ์ง์ ํฌ๊ฒ ๋์์ด์!
์ฃผ์ ๊ฐ์ ์ฌํญ:
โ ๋ณด์ ๊ฐํ: HTTPS ๊ธฐ๋ณธ, Webhook Secret, IP ํ์ดํธ๋ฆฌ์คํธ
โ LLM Fallback ์ ๋ต: LLM ์คํจ ์ Rule-based Parser๋ก ๋์ฒด
โ ๋ํ ์ํ ๊ด๋ฆฌ: Conversation State (In-Memory โ Redis)
โ ๋ค์ค ๊ณ์ ๋งคํ: UserProfile ํ ์ด๋ธ๋ก sender โ calendar_id ๋งคํ
โ ๊ฐ์ฌ ๋ก๊ทธ: ๋๊ฐ, ์ธ์ , ๋ฌด์์ ํ๋์ง SQLite์ ๊ธฐ๋ก
โ ๊ตฌ์กฐํ๋ ๋ก๊น : JSON ํ์์ผ๋ก ๋๋ฒ๊น ์ฉ์ดํ๊ฒ
3๏ธโฃ ํ์ฌ๊น์ง์ ๊ฒฐ๊ณผ๋ฌผ
๐ design.md (์ต์ข ๋ณธ)
์ด ์ฝ 1,700์ค
์์คํ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ
API ๋ช ์ธ์
๋ณด์ ์ฒดํฌ๋ฆฌ์คํธ
Phase๋ณ ๊ตฌํ ๊ณํ (Week 1-5)
ํ ์คํธ ์๋๋ฆฌ์ค
์์ ์ด์ ๋ฐ ํด๊ฒฐ ๋ฐฉ์
๐ dev-history.md (๊ฐ๋ฐ ํ์คํ ๋ฆฌ)
ํ๋ก์ ํธ ์์๋ถํฐ ํ์ฌ๊น์ง์ ๋ชจ๋ ์์ฌ๊ฒฐ์ ๊ธฐ๋ก
๊ธฐ์ ์คํ ํ์ ๊ณผ์
์ค๊ณ ๊ฐ์ ํ์คํ ๋ฆฌ
๊ฒฐ๊ณผ์ ๋ฐฐ์ด ์
1๏ธโฃ AI ๊ต์ฐจ ๊ฒ์ฆ์ ์ค์์ฑ โญโญโญ
๋จ ํ๋์ AI Agent๋ง ์ฌ์ฉํ๋ ๊ฒ์ ์ํํฉ๋๋ค.
Claude Code๋ง ์ฌ์ฉํ์ ๋,
๋ณด์ ์ด์๋ฅผ ๋์นจ (Webhook Secret ๊ฒ์ฆ ์์)
ํ์ฅ์ฑ ๊ณ ๋ ค ๋ถ์กฑ (๋ค์ค ๊ณ์ ๋งคํ ์ ๋ต ๋ถ์ฌ)
์ฃ์ง์ผ์ด์ค ๋๋ฝ (๋ํ ์ํ ๊ด๋ฆฌ, LLM Fallback ์์)
์ต์ ๋ ๊ฐ์ AI๋ฅผ ๋ณํํ๋ฉด์ ์๋ก์ ๊ฒฐ๊ณผ๋ฌผ์ ๋น๊ต ํ๊ฐํ๊ณ ํผ๋๋ฐฑ์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ๊ฒฐ๊ณผ๋ฌผ์ ํ๋ฆฌํฐ๋ฅผ ๋์ด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๊ต์ฐจ ๊ฒ์ฆ ํ๋ก์ธ์ค:
1. Claude Code โ ์ด์ ์์ฑ
2. Codex โ ๋นํ์ ๋ฆฌ๋ทฐ
3. Claude Code โ ํผ๋๋ฐฑ ๋ฐ์
4. Codex โ ์ฌ๊ฒ์ฆ
(ํ์์ ๋ฐ๋ณต)์ด๋ ๊ฒ ํ๋๊น ์ข์๋ ์ :
ํ AI๊ฐ ๋์น ๋ถ๋ถ์ ๋ค๋ฅธ AI๊ฐ ์ก์๋
์๋ก ๋ค๋ฅธ ๊ด์ ์์ ์ค๊ณ๋ฅผ ๋ฐ๋ผ๋ด
Claude Code: ๊ตฌ์กฐ์ , ์ฒด๊ณ์ ์ค๊ณ - ์์ฑ์, ์ค๊ณ์, ์ค๋ฌด์ ์ญํ
Codex: ์ค์ฉ์ , ๋นํ์ ๊ฒ์ฆ - ๊ฐ๋ ๋ฐ ์์ฌ ์ญํ
์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑ๋๊ฐ 2๋ฐฐ ์ด์ ๋์์ง
์ญํ ๋ถ๋ด:
Claude Code: ์์ฑ์ (์ด์ ์์ฑ, ๊ตฌ์กฐ ์ค๊ณ)
Codex: ๊ฒ์ฆ์ (๋นํ, ๋ณด์์ ์ ์)
์ด๋ ๊ฒ ์ญํ ์ ๋๋๋๊น ํจ์ฌ ํจ์จ์ ! ๐
โ ํต์ฌ ๊ฟํ: ์ง์์ ์ธ ๊ต์ฐจ ๊ฒ์ฆ ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์ณ ์ค๊ณ ํ์ง์ ๋์ฌ์ผ ํฅํ ๋ถํ์ํ ๋๋ฒ๊น ์ ์ค์ผ ์ ์์ต๋๋ค!
2๏ธโฃ ๊ธฐํ์ ๋จ๊ณ๊ฐ 80%๋ค
์ด๋ฒ ์ฃผ๋ ์ฝ๋ ํ ์ค ์ ์งฐ๋๋ฐ, ์คํ๋ ค ์ด๊ฒ ์ ์ผ ์ค์ํ ์๊ฐ์ด์์ด์.
์๋ชป๋ ์ ๊ทผ (๊ณผ๊ฑฐ์ ๋):
"์ผ๋จ ์ฝ๋๋ถํฐ ์ง๊ณ ๋ณด์!"
โ ๋์ค์ ๊ตฌ์กฐ ์ ์ฒด๋ฅผ ๊ฐ์์๊ฒ ๋จ
โ 3์ผ์น ์์
์ด ๋ ์๊ฐ
์ฌ๋ฐ๋ฅธ ์ ๊ทผ (ํ์ฌ):
1์ฃผ์ฐจ: design.md ์์ฑ (๊ต์ฐจ ๊ฒ์ฆ ํฌํจ)
2์ฃผ์ฐจ ์ดํ: ๋จ๊ณ๋ณ ๊ตฌํ
๊ธฐํ์๋ฅผ ํํํ๊ฒ ๋ง๋ค๋ฉด:
์ฝ๋ ์์ฑ์ด ์คํ๋ ค ๋น ๋ฆ (์ค๊ณ์ ๋ณด๊ณ ๊ทธ๋๋ก ๊ตฌํ)
๋ฒ๊ทธ๊ฐ ์ ์ (์ฃ์ง์ผ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ๊ณ ๋ ค)
ํผ์ ๊ฐ๋ฐํด๋ ๊ธธ์ ์์ง ์์
โ ๊ฟํ: ์ฝ๋ ์ง๊ธฐ ์ ์ AIํํ "์์ธ ์ค๊ณ ๋ฌธ์ ์์ฑํด์ค"๋ถํฐ ์ํค์ธ์! ๊ทธ๋ฆฌ๊ณ ๋ฐ๋์ ๋ค๋ฅธ AI๋ก ๊ฒ์ฆํ์ธ์!
3๏ธโฃ ๋ณด์์ ๋์ค์ด ์๋๋ผ ์ง๊ธ!
์ฒ์์ "์ผ๋จ ์๋๋ง ํ๊ฒ ๋ง๋ค๊ณ , ๋ณด์์ ๋์ค์..." ์๊ฐํ๋๋ฐ, Codex๊ฐ ๊ฒฝ๊ณ ํ์ด์:
Codex์ ๊ฒฝ๊ณ :
"๊ฐ์ธ ์บ๋ฆฐ๋ ๋ฐ์ดํฐ๋ ๋ฏผ๊ฐ ์ ๋ณด์ ๋๋ค. ๋์ค์ ๋ณด์ ์ถ๊ฐํ๋ ค๋ฉด ์ฝ๋ ์ ์ฒด๋ฅผ ๋ค์ ์ง์ผ ํฉ๋๋ค. ์ง๊ธ ์ค๊ณ์ ํฌํจํ์ธ์."
design.md์ ํฌํจ๋ ๋ณด์ ์ฒดํฌ๋ฆฌ์คํธ:
โ HTTPS ์ ์ฉ (ํ๋ก๋์ ํ์)
โ Webhook Secret ํ ํฐ ๊ฒ์ฆ
โ IP ํ์ดํธ๋ฆฌ์คํธ (์ ํ)
โ OAuth ํ ํฐ ์์ ์ ์ฅ (ํ๊ฒฝ๋ณ์)
โ ๋ก๊ทธ์ ๋ฏผ๊ฐ์ ๋ณด ์ ์ธ (ํ ํฐ ๋ง์คํน)
โ ๊ฟํ: ๊ฐ์ธ์ ๋ณด ๋ค๋ฃจ๋ ํ๋ก์ ํธ๋ ์ค๊ณ ๋จ๊ณ๋ถํฐ ๋ณด์ ์ฒดํฌ๋ฆฌ์คํธ ํ์!
4๏ธโฃ Phase๋ณ ๊ตฌํ ์ ๋ต
๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋ฒ์ ๋ง๋ค๋ ค๊ณ ํ๋ฉด ์๋๋นํฉ๋๋ค.
Phase ๊ตฌ๋ถ ์ ๋ต:
Week 1: ๊ธฐํ ๋ฐ ์ค๊ณ (โ ํ์ฌ)
Week 2: ์ผ์ ์กฐํ๋ง (MVP)
Week 3: ์ผ์ ์ถ๊ฐ (LLM ํ์ฑ)
Week 4: ์ผ์ ์์ /์ญ์
Week 5: ๊ณ ๊ธ ๊ธฐ๋ฅ (๊ฐ์ฌ ๋ก๊ทธ, ๊ตฌ์กฐํ๋ ๋ก๊น )
๊ฐ Phase๋ง๋ค:
์๋ํ๋ ์ํ๋ก ์์ฑ
๋ฐ๋ก ํ ์คํธ ๊ฐ๋ฅ
๋ค์ Phase๋ก ์์ฐ์ค๋ฝ๊ฒ ํ์ฅ
โ ๊ฟํ: ๊ธฐํ์๋ ํํํ๊ฒ, ๊ตฌํ์ ๋จ๊ณ๋ณ๋ก!
๐ฏ ๋ค์์ ํ ์ผ
Week 2 ๊ณํ: Phase 1 ๊ตฌํ (์ผ์ ์กฐํ)
Google Calendar API ์ฐ๋
๋ฉ์ ์ ๋ดR ์ฐ๊ฒฐ
"์ค๋ ์ผ์ ๋ณด์ฌ์ค" ์๋ ํ์ธ
Week 3 ์ดํ:
์ผ์ ์ถ๊ฐ ๊ธฐ๋ฅ (์์ฐ์ด ํ์ฑ)
์ถฉ๋ ์ฒดํฌ
์ผ์ ์์ /์ญ์
๊ฐ์ฌ ๋ก๊ทธ ๋ฐ ๊ตฌ์กฐํ๋ ๋ก๊น
๋ง์น๋ฉฐ...
ํต์ฌ ๋ฉ์์ง:
AI ๊ต์ฐจ ๊ฒ์ฆ์ ํ์! ์ต์ 2๊ฐ ์ด์์ AI๋ก ์๋ก ๊ฒ์ฆํ์ธ์.
๊ธฐํ์ด 80% ์ฝ๋ ์ง๊ธฐ ์ ์ ํํํ ์ค๊ณ์๋ถํฐ!
๋ณด์์ ์ง๊ธ! ๋์ค์ผ๋ก ๋ฏธ๋ฃจ์ง ๋ง์ธ์.
Phase๋ณ๋ก ๊ตฌํ ํ๋ฒ์ ๋ค ํ๋ ค๊ณ ํ์ง ๋ง์ธ์.
๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
#FastAPI #GoogleCalendarAPI #๋ฉ์ ์ ๋ดR #ClaudeCode #Codex #AI๊ต์ฐจ๊ฒ์ฆ