Iteration 1 Prompt Log Choi Haeseong - snuhcs-course/swpp-2026-project-team-01 GitHub Wiki
ใ
ใ
.env.local์ ์ด์ ํ์ฉํด์, ๋
ธ์
์ ๋ด์ฉ์ ์ญ ํ์ด์ค๊ณ , ๋ด์ผ ์ค์ ๊น์ง ๋ง๋ค์ด์ผ ํ๋ MVP์ ๋ญ๊ฐ ๋ค์ด๊ฐ์ผ ํ๋์ง ์ ๋ฆฌํด์๋ด
๋ด์ผ๊น์ง ๋ง๋ค MVP๋ ๋ค๊ฐ ์ ๋ฆฌํ ๋ฒ์ ๋ณด๋ค๋ ์ข ๋ ์์ ์์ ์. 
- ์ฑ๋ด์ ์ ํธ๋ฅผ ์๋ ค์ฃผ๋ ๊ณผ์ ์๋ต. ์ฌ๊ธฐ์ LLM์ด ์ฐ๊ฒฐ๋์ด์ผ ํ๋๋ฐ, ๊ทธ๊ฒ ์ฝ์ง ์์๊ฒ์ด๋ผ ํ๋จ. ์๊ฐ ๋จ์ผ๋ฉด ๊ทธ๊ฒ๊น์ง ์งํ.
- ์ผ์ ์์ ์๊ฐ google calender๋ฅผ ์ฐ๋ํ๋ค.
- ๋ฏธํ
์์ฒญ์๊ฐ google calender๋ฅผ ์ฐ๋ํ๋ค.
- ๋ฏธํ
์์ฒญ์๊ฐ ๋ชฉ์ , ์์์๊ฐ ์ ๋๋ฅผ ์ ๋ฌํ๋ฉด, AI๊ฐ ์บ๋ฆฐ๋์ ์๊ฐ์ ์ถฉ๋, ์ฅ์์ ์ถฉ๋๋ก ์ธํ buffer ์๊ฐ ์๋ถ ๋ฑ์ ํ๋จํด์, \*\*์ผ์ ์์ ์\*\*์๊ฒ ์๊ฐ ํ๋ณด 2-3๊ฐ์ ์ถ์ฒ ์ด์ ๋ฅผ ๋ณด์ฌ์ค๋ค. 
์ด ์ ๋๊น์ง ํ๋ฉด ๋ ๋ฏ.
์ด๊ฑธ first-MVP.md๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ๋ฆฌํด์ ์ด๋ ์ ์ด๋.
**first-MVP** ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ธ์
.
์ผ๋จ git worktree๋ฅผ ํ์. HS-first-MVP๋ผ๋ ์ด๋ฆ์ผ๋ก.
์ด๋ฏธ ์๋ github์ main branch์ ๋ด์ฉ๋ค์์, ๋ด๊ฐ ๋ฏธ๋ฆฌ ์์์ผ ํ๋ ๊ฒ๋ค์ ์ ๋ฆฌํด์ ์๋ ค์ค๋ด.
๊ทธ ํฉ์์ฌํญ์ ๋ฐ๋ผ์ first-MVP๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค.
์ถฉ๋์ด ์๋ค๋ฉด github์ ์ฌ๋ ค์ ธ์๋๊ฒ์ ๊ธฐ์ค์ผ๋ก ํ์.
- ์น ์ฑ์ด๋ค.
- ํ๋ก์ ํธ ๋ฐฉํฅ์ **์ธ๋ถ ๋ฏธํ
์ด ์ฆ์ ์ง์ฅ์ธโVC, ์คํํธ์
๋ํ, ์์
์งโ์ ์ํ AI ์ผ์ ์กฐ์จ ๋์ฐ๋ฏธ**์
๋๋ค. ์๋๋ฐฉ์ ์ผ์ ์์ฒญ์ ๋ํ๋ก ๋ฐ๊ณ , ์บ๋ฆฐ๋ ์์ ์์ ์ผ์ ๊ณผ ์ ํธ๋ฅผ ๊ณ ๋ คํด ์๊ฐ์ ์ถ์ฒํ ๋ค, ๋ณธ์ธ ์น์ธ ํ ์ผ์ ์ ํ์ ํ๋ ํ๋ฆ์ด์์ 
- ํ๋ฐํธ ํ๋ ์์ํฌ ์ ํด์ง ๊ฑฐ ์๋? 
- 4, 5๋ฒ์ ๋ญ ์๊ธด์ง ๋ชจ๋ฅด๊ฒ ์.
๋
ธ์
์์ frontend framework๋ฅผ ๋ญ๋ก ์ ํ๋์ง ์ดํด๋ด.
๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ ํ์๋ก์๋ง ์์ผ๋, ๋ค๋ฅธ ๊ณณ์ ๊ตณ์ด ์ดํด๋ณผ ํ์ ์๋ค.
๊ทธ๋ผ ์ผ๋จ Next.js ๋ฅผ ์ฐ๋๋ก ํ์. first-MVP.md์ ๊ทธ๊ฑฐ ์ ์ด์ค. ์ต์ข
ํ์ ์ฌ๋ถ๋ ์๋์ง๋ง ์ผ๋จ first mvp๋ ๊ทธ๊ฑธ๋ก ํ๊ฒ ๋ค๊ณ .
`AGENTS.md`์ โlegacy migraโ ์ค๋ช
์ ๊ทธ ์ค์ ๊ณผ ๋ง์ง ์์ผ๋ฏ๋ก ์ค๋๋ ์๋ด๋ก ๋ณด๊ฒ ์ต๋๋ค. -> AGENTS.md ์ต์ ํํด์ค.
## ์ฒซ ๋ฒ์ ์์ ํ ์ผ
1. ์ฑ๋ด์ ์ ํธ๋ฅผ ์๋ ค์ฃผ๋ ๊ณผ์ ์๋ต. ์ฌ๊ธฐ์ LLM์ด ์ฐ๊ฒฐ๋์ด์ผ ํ๋๋ฐ, ๊ทธ๊ฒ ์ฝ์ง ์์๊ฒ์ด๋ผ ํ๋จ. ์๊ฐ ๋จ์ผ๋ฉด ๊ทธ๊ฒ๊น์ง ์งํ.
2. ์ผ์ ์์ ์๊ฐ google calender๋ฅผ ์ฐ๋ํ๋ค.
3. ๋ฏธํ
์์ฒญ์๊ฐ google calender๋ฅผ ์ฐ๋ํ๋ค.
4. ๋ฏธํ
์์ฒญ์๊ฐ ๋ชฉ์ , ์์์๊ฐ ์ ๋๋ฅผ ์ ๋ฌํ๋ฉด, AI๊ฐ ์บ๋ฆฐ๋์ ์๊ฐ์ ์ถฉ๋, ์ฅ์์ ์ถฉ๋๋ก ์ธํ buffer ์๊ฐ ์๋ถ ๋ฑ์ ํ๋จํด์, \*\*์ผ์ ์์ ์\*\*์๊ฒ ์๊ฐ ํ๋ณด 2-3๊ฐ์ ์ถ์ฒ ์ด์ ๋ฅผ ๋ณด์ฌ์ค๋ค. 
## 4๋ฒ์ ๋ํด์
google calender๋ฅผ ์ฐ๋ํ๋๊ฒ์ ๋ฐ๋์ ํด์ผ ํจ. ๊ทธ๊ฒ๋ง ํ๋ค๊ณ ์๊ฐํ์.
## frontend framework
์ผ๋จ ์ด๋ฒ MVP๋ง๋ค๋์ Next.js๋ฅผ ์ฐ๋๋ก ํ๋ค.
---
๋ด๊ฐ ์ง๊ธ๋ถํฐ ํ๋์ - 3\~4์๊ฐ๋์ ์๋ฆฌ๋ฅผ ๋น์ธํ
๋ฐ, ๊ทธ๋์ ๋ํํ
๋ง ๋งก๊ฒจ๋ ์๊ฐ์.
๊ทธ๋์ ๊ณ์ ์ผ ํ ์ ์๊ฒ ๋ด๊ฐ ์ง๊ธ ์ง์๋ด๋ ค์ผ ํ ๊ฒ ์ ๋ถ ์๊ธฐํด์ค.
Supabase๋ฅผ ์ฐ๋๋ก ํ๊ณ , ์ฑ ์ด๋ฆ์ Caltalk๋ก ํด์ค. Google gws ์ค์ ์ ๋ด๊ฐ ํด ๋์ํ
๋ฐ, ๊ทธ๊ฑธ๋ก ์๋๋?
๋ก์ปฌ๋ง๊ณ ์ค์ ๋ก ์๋ฒ๋ฅผ ์ฌ๋๊ฑด ๋์ด ๋๋?
Oauth๋ผ๊ณ ํ๋ฉด ๋ด๊ฐ ์ ์ดํด๊ฐ ์ ๋๋๋ฐ, ์ง๊ธ ์ฆ ์์์ ๊ตฌ๊ธ ๊ณ์ ์ด ์ฐ๋๊ฐ๋ฅํ ์ํ์ธ๊ฑฐ์ง? ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ํ์๋ ๋ง์ผ.
๊ทธ๊ฑด ์๋ฌด๋ ํ ์ ์๋๊ฒ ์๋๊ฑด๊ฐ? ์ฌ์ฌ๋ฅผ ๋ฐ์์ผํ๋ค๋ ๊ฑฐ๊ตฌ๋ง.
๊ทธ ์ ๊น์ง๋ ๊ฐ ์ฌ์ฉ์๊ฐ ์ง์ ๋ญ๊ฐ๋ฅผ ํด์ผ ํ๋๊ฑฐ๊ณ . ๋ด ๋ง์ด ๋ง๋?
์ง๊ธ ๋๊ฐ ๊ทธ๊ฑธ ๊ฐ์ ํ๊ธฐ ์ํด ํ ์ ์๋๊ฑด ๋ฑํ ์๋๊ฑฐ๋ผ๋ ๊ฑฐ์ง?
์ง๊ธ ์ด๋์ ์์ฑ๋๊ฑธ ํ์ธํด๋ณผ ์ ์์ง?
๊ฐ๋ฐ ๊ณผ์ ์ค๊ฐ์ค๊ฐ์ ์ปค๋ฐ ์ ํ๋? ์ ํ์ผ๋ฉด ์ง๊ธ ์ปค๋ฐํ์
. "๋ธ๊น๊ฒฐ๊ณผ๋ฌผ_base"์ด๋ฆ์ผ๋ก ํด์
๋ด๊ฐ ์น ๊ฐ๋ฐ์ ๋ํด์ ์ ํ ๋ชจ๋ฅด๊ฑฐ๋ ?
์๋ฒ๋ supabase ์ด๊ฒ์ ๊ฒ๋ถํฐ,
ํ๋ก ํธ๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค์๋์ง, ๊ฐ ํ์ด์ง๋ค์ด ์ด๋์์ ๊ตฌํ๋์ด์๋๊ฑด์ง,
๊ตฌ๊ธ ๊ณ์ ์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ๋ฉฐ ๊ณ์ ๊ด๋ฆฌ๋ ์ด๋ป๊ฒ ํ๋ฉด ๋๋์ง
๋ฑ๋ฑ๋ฑ ์ ๋ถ ์ ๋ง ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ์ ๋ฆฌํด์ค ์ ์์ด?
openspec์ ๊ฐ์ง๊ณ ํ์ฌ์ ์ค๊ณ spec, design๋ฑ์ ์ ์ฅํ๊ณ ์ถ์๋ฐ, ์ด๋ป๊ฒ ํ๋ฉด ๋ ๊น?
AGENTS.md๋ฅผ ์์ ํด. OpenSpec์ ์ผ๋จ ๋ ํผ์๋ง ์ฐ๋๊ฑฐ๊ณ , ํ์๊ณผ ๊ณต์ ๋๊ธธ ์์น ์๋๋ค ํ์ฌ๋ก์๋. ๊ทธ๋ฌ๋ฏ๋ก ๊ทธ ๋ถ๋ถ์ gitignore๋ฅผ ํด๋์๊ณ .
๊ทผ๋ฐ worktree ๋ฐ๋๋ฉด ๋ด openspec๋ ๋ด๊ฐ ํ์ธ์ ๋ชปํ ์๋ ์๊ฒ ๋ค.... ๊ทธ๊ฑด ๋ฌธ์ ๋ฐ. ์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น?
์, ๊ทธ๋ฐ๋ฐ ๊ทธ๋ฌ๋ฉด branch๋ก ๊ฐ๋ผ์ง ์ฌ๋ฌ ๋ฒ์ ๋ค์ด ์ด๋ป๊ฒ ๊ด๋ฆฌ๊ฐ ๋๋ ๊ทธ๋ฌ๋ฉด?
๊ทธ๋ฅ openspec๋ git์ผ๋ก ๊ฐ์ด ๊ด๋ฆฌํ๋๊ฒ ๋ง๋...?
ํ๋ํ์ง ๋ง๊ณ ์ผ๋จ ์๊ฐ๋ง ํด์ค๋ด. ์ด๋ป๊ฒ ํ๋๊ฒ ๋ง์์ง
์ผ ๊ทธ๋ผ ๊ทธ๋ฅ ํ์ด๋ ๊ณต์ ๋๋๋ก ํ์. ๊ทธ๋ฅ ๊ฐ์ git repo์์ ๊ด๋ฆฌ๋๋๋ก ํด์ผ๊ฒ ๋ค. openspec ๊ทธ๋ค์ ์ ์ฐ๋๋ผ๋ ๊ทธ๋ฅ ๋ ํผ์๋ง ์ฐ๋ฉด ๋์ง ๋ญ. ๊ทธ๊ฑฐ ์์ฒด๊ฐ ํฐ ๋ถ๋ด์ ์ ๋ ๊ฑฐ์.
AGENTS.md๋ ๊ทธ๋ ๊ฒ ์์ ํ๊ณ , openspec ๋ฌธ์๋ฅผ ์์ฑํด์ฃผ๋ผ.
ํฅํ 14์ผ์ ok. ๊ฐ๋ฅ ์๊ฐ์ 09~20์๊น์ง๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋์
google oauth ์ค์ ๊ณผ, supabaseํ๋ก์ ํธ ์์ฑ์ ๋ง์นจ. supabase secret key๋ `.env.local`์ ๋ค์ด ์๋ค.
์ด์ ๊ตฌ๊ธ ๊ณ์ ์ฐ๋๋ ์คํํด๋ณผ ์ ์๋๊ฑฐ์ง? ๋ด๊ฐ ์ข ๋ ๊ธฐ๋ค๋ฆฌ๋ฉด ๋๋?
๊ทธ๋ผ .env.local์๋ค๊ฐ ํ์ํ ํค๋ค ๊ฐ ๋น ์ฑ๋ก ๋ง๋ค์ด์ค. ๋ญ ์๋ฆฐ์ง ์์ง?
worktree ์ ๊ฑฐ ์ด๋์ ํ์ธํ ์ ์์ง? ๊ทธ๋ฅ ํ์ผํ์๊ธฐ๋ก๋ ์ด๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
๊ทธ๋ฅ ์ง๊ธ ๋ ๊ต์ฅํ ํ๊ฐ ๋ง์ด ๋จ ์์ด๋ ๊ฒ๋ชจ๋ฅด๋๊ฒ ๋ง์ง?
???????????????????? worktree๊ฐ ์ ๊ฑฐ๊ธฐ ๊ฐ ์์?
# openssl rand -base64 32
TOKEN_ENCRYPTION_KEY=
# openssl rand -base64 32
CALTALK_SESSION_SECRET=
์ด๊ฑด ๋ญ๋ฐ?
์๋ฃ.
์ด๊ฑด MVP๋๊น, ๋ก์ปฌ์์ ํ ์ ์๋๊ฑธ๋ก ์ถฉ๋ถํ๊ฑฐ๋ . ๊ตฌ๊ธ ์ฐ๋์ด ์ต์ฐ์ ์ด์ผ. ์๊ฒ ์ง?
์ด๊ฑฐ ์ง์ง ์ค์ํ ๋ด์ฉ์ด์ผ. ์ง์ง ์ค์ํ ๋ด์ฉ์ด๋ผ๊ณ . ๋ค์ ๋ฐ๋ณตํ ์ผ ์๊ฒ ํด์ค.
์ง์ง ์ง๊ธ ๋งค์ฐ ํ๊ฐ ๋๋๊น.
์ด์ ๋ด๊ฐ๋ค์์ ํ ์ผ ์๋ ค์ค.
. Supabase์ **Table Editor**์์ ๋ค์ ๋ค ํ
์ด๋ธ์ ํ์ธํด ์ฃผ์ธ์. -> ์ด๋ป๊ฒ ํ๋์ง ๋ชฐ๋ผ.
๊ทธ๋ฅ ๋๊ฐ ์ง์ ํ ์์๋? supabase cli๋ฅผ ๋ด๊ฐ ๋ถ๋ช
๊น์๋๋๊ฑฐ๊ฐ์๋ฐ? ์ ๊น๋ ค์๋?
## Error Type
Runtime SyntaxError
## Error Message
Failed to execute 'json' on 'Response': Unexpected end of JSON input
at load (app/owner/owner-dashboard.tsx:9:127)
## Code Frame
7 | export default function OwnerDashboard({ email }: { email: string }) {
8 | const [shares, setShares] = useState<Share[]>([]); const [link, setLink] = useState(""); const [error, setError] = useState(""); const [busy, setBusy] = useState(false);
> 9 | async function load() { const response = await fetch("/api/requests", { cache: "no-store" }); const result = await response.json(); if (response.ok) setShares(result.links ?? []); else setError(result.error ?? "์์ฒญ์ ๋ถ๋ฌ์ค์ง ๋ชปํ์ต๋๋ค."); }
| ^
10 | useEffect(() => { const timer = window.setTimeout(() => { void load(); }, 0); return () => window.clearTimeout(timer); }, []);
11 | async function createLink() { setBusy(true); setError(""); try { const response = await fetch("/api/share", { method: "POST" }); const result = await response.json(); if (!response.ok) throw new Error(result.error); setLink(result.url); await navigator.clipboard.writeText(result.url); await load(); } catch (cause) { setError(cause instanceof Error ? cause.message : "๋งํฌ๋ฅผ ๋ง๋ค์ง ๋ชปํ์ต๋๋ค."); } finally { setBusy(false); } }
12 | return <main className="min-h-screen bg-[#f7f7fb] px-5 py-10"><div className="mx-auto max-w-5xl"><header className="flex flex-wrap items-center justify-between gap-4"><Link href="/" className="text-xl font-bold">Caltalk<span className="text-indigo-600">.</span></Link><span className="text-sm text-slate-600">์ฐ๊ฒฐ๋ ์บ๋ฆฐ๋ ยท {email}</span></header><section className="mt-10 rounded-3xl bg-white p-7 shadow-sm"><div className="flex flex-wrap items-center justify-between gap-5"><div><p className="text-sm font-bold tracking-widest text-indigo-600">OWNER DASHBOARD</p><h1 className="mt-2 text-3xl font-semibold">๋ฏธํ
์์ฒญ์ ํ์ธํ์ธ์</h1><p className="mt-2 text-slate-600">์์ฒญ ๋งํฌ๋ฅผ ๊ณต์ ํ๋ฉด ์๋๋ฐฉ์ด ์์ชฝ ์บ๋ฆฐ๋์ ๋ง๋ ์๊ฐ์ ์์ฒญํ ์ ์์ด์.</p></div><button onClick={createLink} disabled={busy} className="rounded-xl bg-indigo-600 px-5 py-3 font-semibold text-white disabled:opacity-60">{busy ? "๋งํฌ ๋ง๋๋ ์คโฆ" : "์์ฒญ ๋งํฌ ๋ง๋ค๊ธฐ"}</button></div>{link && <div className="mt-5 brea...
Next.js version: 16.3.8 (Turbopack)
์ด๋ ๊ฒ ๋๋ ์ํฉ์.
---
์ ์ผ๋จ,, ์ผ๋จ ๋ถ์กฑํ๊ฒ ๋๊ฒ ๋ง์์ ๋๋ ๊ทธ๊ฑฐ ์ ๋ฆฌ ์ข ํ๊ณ ์๊ฒ ์.
์์ ์ํฉ ํด๊ฒฐ๋ถํฐ ํด๋ด.
์ฒจ๋ถ ์ด๋ฏธ์ง๋ ๋ก๊ทธ์ ๋ณต์ ํ์ง ์์๋ค.
์ค์ผ์ด ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ง๋ฌธ. ์ง๊ธ ์ผ์ ์กฐ์จํด์ ์ก๋๊ฑด ์ด๋ค ๊ท์น์ผ๋ก ํ๊ณ ์๋๊ฐ? ai๊ฐ ํ๊ณ ์๋? ๋ญ๋ก ์ฐ๊ฒฐํ๋๋ฐ?
1. ๋ก๊ทธ์ธ ํ ์งํ์ ์ฐฝ.
- ๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ํ์ผ๋ฉด, ์ผ๋จ ์ฝ์ด์จ ์บ๋ฆฐ๋ ์ผ์ ์ด ์๊ฐํ๊ฐ ๋์ด์ ๋ณด์ฌ์ก์ผ๋ฉด ์ข๊ฒ ์.
- ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ๋น์ทํ ๋์์ธ์ผ๋ก, ๋ณด์ฌ์ก์ผ๋ฉด ์ข๊ฒ ์.
- ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ๋น์ทํ ๋์์ธ์ผ๋ก ์ผ๋จ ์ฝ์ด์จ ์บ๋ฆฐ๋ ์ผ์ ์ ์๊ฐํํ๊ณ , ๊ทธ ์์ ai๊ฐ ์์ธกํ ๋์ ๋ฏธํ
๊ฐ๋ฅํ ์๊ฐ์ ํจ๊ป ๋ณผ ์ ์๋๋ก ์ ๊ณตํ๋๋ก ํ๋ค.
- ๊ทธ ๋ฏธํ
๊ฐ๋ฅํ ์๊ฐ์ ํด๋ฆญํ๋ฉด ๊ทธ๊ฑธ ์์ ํ๊ฑฐ๋, ์ญ์ ํ๊ฑฐ๋ ํ ์ ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง, ์ด๊ฑด ๋์ค์ ํ๋๋ก ํ์. mvp์๋ ๋ง์ง ์๋ค.
- ๋ก๊ทธ์ธํ ํ ์ํ์์, ์ผ์ชฝ์ ์ ์๋ค ํ๋ค ํ ์ ์๋ ํํ๋ก ๋ฉ๋ด๋ฅผ ๋ง๋ค์ด์, ์ฌ๋ฌ ์ค์ ์ ํ ์ ์๋๋ก ํ์ผ๋ฉด ์ข๊ฒ ๋ค. ๋ด ์ ํธ ์๊ฐ์ด๋ผ๋๊ฐ, ์ธ์ ๋ ๋ฏธํ
์ํ์ง ์๋๋ค๋๊ฐ.
=> ์ ์๋ค ํ๋คํ๋ ๋ฉ๋ด๊น์ง๋ ํ์์์ง๋ง, ์ต์ํ ๋ด ๋ฏธํ
์ ํธ ์ํ? ๋ด ๋น ๋ฏธํ
์๊ฐ์ ์ก๋ ์กฐ๊ฑด? ๊ฐ์๊ฑด ์ฌ์ฉ์๊ฐ ํ์ธํ ์ ์์ด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ๋ฌด์จ ์์ผ ๋ช ์ ์ดํ๋ ์ซ๋ค๋๊ฐ, ํด์ผ์ ์ํ๋ค๋๊ฐ.
2. ์์ฒญ ๋งํฌ ๋ง๋ค๊ธฐ
์์ฒญ ๋งํฌ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ์ ๋, ํด๋น ์์ฒญ๋งํฌ์ ๋ํ ์ค์ ์ ํ ์ ์๋๋ก ํด์ผ ํ ๊ฒ์ด๋ค.
์ต์ํ
- ๋งํฌ์ ์ด๋ฆ์ ์ค์ ํ ์ ์์ด์ผ ํ๋ค.
3. ์์ฒญ ๋งํฌ์ ๋ฐ์ ์์ฒญ
์ด๋ฏธ ๋ง๋ค์ด์ง ์์ฒญ ๋งํฌ์ ๋ํด์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์.
- ์ด๋ฏธ ๋ง๋ค์ด์ง ๋งํฌ๋ฅผ ํด๋ฆญํ์ ๋
- ํด๋น ๋งํฌ์ ๋ํ ์ ๋ณด๋ฅผ ํ์ธ. 1) ์ธ์ ์ธ์ ๋ฅผ ๊ฐ๋ฅํ ์๊ฐ๋๋ก ์ด์ด๋๋๊ฐ. 2) ๋๊ฐ ์ด ๋งํฌ๋ฅผ ํตํด์ ๋์ ์ฐ๊ฒฐ์ ์์ฒญํ๋๊ฐ?
- ํด๋น ๋งํฌ๋ฅผ ์ญ์ ํ ์ ์์ด์ผ ํ๋ค.
- ํด๋น ๋งํฌ๋ฅผ ์ผ์์ ์ผ๋ก ๋ซ์๋ค๊ฐ, ๋ค์ ์ด ์ ์์ด์ผ ํ๋ค. toggle.
4. ๋ฐ์ ์์ฒญ => ์ด๊ฑด ์ผ๋จ ๊ณ ์น์ง ๋ง๊ณ ์์ด๋ด
- ์์ฒญ์ ํ์ธํ์ ๋, ๊ทธ๊ฑฐ ํ ์ด๊ฑด ์ด๋์๋ถํฐ ๊ณ ์ณ์ผํ ์ง ๊ฐ๋ ์์ค๋
ธ
- ์์ฒญ์ ์๋ฝํ ์ ์๋๋ก ํด์ผ ํจ.
0. ์์ฒญ ๋งํฌ ๋ง๋ค๊ธฐ
- ์ด๊ฑฐ ๋ง๋ค ๋, ์ฌ์ฉ์๊ฐ ๊ณต๊ฐํ๋ ์๊ฐ๋๋ฅผ ์ ํํ ์ ์๋๋ก ํด์ผ ํ๋ค.
- ๋ช ์๊ฐ ๋ฏธํ
์ธ์ง, ๋งํฌ ํธ์คํธ๊ฐ ๊ฒฐ์ ํ ์ ์์ด์ผ ํ๋ค.
- ๊ทธ๋ ๊ฒ ๊ฒฐ์ ๋ ๋ฏธํ
๊ธธ์ด์ ๋ฐ๋ผ, ํ์ฌ ๋ด ์บ๋ฆฐ๋์์ ๋ฏธํ
๊ฐ๋ฅํ ์๊ฐ ์ค์์ ํ๋ณด๋ฅผ 5๊ฐ ์ ์ํด์ฃผ๊ณ , ๊ทธ ํ๋ณด ์ค 2๊ฐ ์ด์์ ํด๋ฆญํด์ ๋งํฌ๋ฅผ ์์ฑํ ์ ์๋๋ก ํ์.
1. ์์ฒญ ๋งํฌ ์ ๋ณด
- ์ด์ด๋ณผ ์ ์๊ฒ ํ๋ ๊ฒ ์ข์์.
- ๊ณต๊ฐํ๋ ๋ฏธํ
์๊ฐ๋๊ฐ ์๊ฒ weekly ์๊ฐํ๋ก ์๊ฐํ๊ฐ ๋๋ฉด ์ข๊ฒ ์.
2. ์์ฒญ ๋งํฌ ์ ๋ณด - `์ด ๋งํฌ๋ก ๋ค์ด์จ ์์ฒญ`
- ์ฌ๊ธฐ์ ์์ฒญ์ ๋ฐ๋ก ์๋ฝํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋๋ฐ.
- ์์ฒญ์ ์๋ฝํ ์์ ๋ด ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ๋ฐ๋ก ๋ฑ๋ก์ํฌ ์ ์๋?
- ์์ฒญ ํ ์ฌ๋์๊ฒ ์ด๋ฉ์ผ๋ก ๊ตฌ๊ธ ์บ๋ฆฐ๋ ์ผ์ ์ด๋ ๋ฉ์ผ์ ๋ณด๋ผ ์ ์๋?
์ ์ ํ ์ด๋ฆ์ผ๋ก commitํ๊ณ , openspec๋ ๋ง์ถฐ์ ์
๋ฐ์ดํธํด์ค ์ ์๊ฒ ๋?
`์์ฒญ ๋งํฌ์ ๋ฐ์ ์์ฒญ` ํญ์ ์ด๋ฆ์ ๋ณ๊ฒฝํด์ `๋ฐ์ ์์ฒญ`์ผ๋ก ๋ฐ๊พธ๊ณ , ํ์ฌ๋ ์ญ์ ํ ๋งํฌ๋ค๋ ๊ทธ๋๋ก ๋จ์ ์์ผ๋ ๊ทธ๊ฑฐ ์ต์ ํ๋๋๋ก ํด์ฃผ๋ผ.
ํ์ฌ ์ํฉ ์ปค๋ฐ. ์ด๋ฆ์ ์ ์ ํ ๋ฐ์์์ฒญ ํญ ์ค๋ฅ ๊ณ ์ณค๋ค๋ ๋ด์ฉ์ด ๋ด๊ธฐ๊ฒ ํด์ค
github repo์ pushํ๊ณ ์ถ๋ค. ํ์ฌ์ ๋ด ๊ธฐ๋ฅ๋ค์ ๋ํด์ ํ๊ธ๋ก ์ ๋นํ ๋ถ๋์ผ๋ก ์ค๋ช
ํ์ผ๋ฉด ์ข๊ฒ ๊ณ ,
์ง๊ธ ๋์๊ฐ๋ ํ๊ฒฝ, supabase ์ค์ ์ ๋ํด์ ์ค๋ช
ํ๊ณ ์ถ์.
supabase์ ๋ํด์๋ ํนํ ๊ณต์ฉ ํ๋ก์ ํธ? ๋ฅผ ๋ชป ์ฐพ์์ ๊ทธ๋ฅ ๋ด๊ฐ ๋ฐ๋ก ํ์ ํ๊ณ , ์ถํ ํ์ํ๋ฉด ๋ค์ ์ค์ ํ๊ฒ ๋ค๊ณ ์ ์ด๋๊ณ ,
๋์๊ฐ๋ ํ๊ฒฝ์ด ๋ก์ปฌ์์ ๋ช
์ํด์ฃผ๊ณ .
๋ฐฐํฌํ๋ ค๋ฉด ์ง๊ธ ์ฌ๊ธฐ์ ๋ญ ๋ ํด์ผํ์ง? ๋ ์ง๊ธ ํผ๊ณคํด์ ๊ทธ๋ฅ ๋ด์ผ ์์นจ์ ํ ๊น ํ๋๋ฐ, ์ ๊น ํ๋ฉด ๋๋ ์ ๋์ ์ผ์ธ๊ฐ?
๊ทธ๋ผ ๊ทธ๋ฅ ์ง๊ธ ํ์ ํ
์คํธ์ฉ ๋ฐฐํฌ ํด๋ณด์. ๋ด๊ฐ ์ ๋์ผ์ด ์์ผ๋ ค๋? ๊ทธ๋ฅ ์์ผ๋๊ณ ์๋ฌ ๊ฐ๋ฉด ์๋ ๊น? ์ค๊ฐ์ ๋ด๊ฐ ๋ญ๊ฐ ํด์ผ ํ๋ ์ผ์ด ์๊ธฐ๋ ค๋?
์น์ธ โ ํด๋น Vercel ํ๋ก์ ํธ์ ๋ฑ๋ก
์ด ํ์ด. ํ์ฌ ์ํฉ ์ปค๋ฐํ๊ณ pushํด.
๋ด๊ฐ ์ด๋๋ก ๋ค์ด๊ฐ๋ณด๋ฉด ๋์ง?
๋งค๋ฒ ๋ก๊ทธ์ธ ํ ๋ ๋ง๋ค google ์ฐ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ ๋ถํธํจ. Caltalk ๊ณ์ ์ ๋ง๋ค์ด์, ๊ตฌ๊ธ์ฐ๋์ ํ ๋ฒ ๊ฑฐ์น๋ฉด ๊ทธ ๋ค๋ก๋ ํ ํ์ ์๋๋ก ํ์ผ๋ฉด ์ข๊ฒ ๋ค.
์ผ์ ์์ฒญ์? ์
์ฅ์์๋ ๋งค๋ฒ ๊ตฌ๊ธ ์ฐ๋์ ํ๋๊ฒ ๋ถํธํ๋ฐ.... ๊ทธ ๋ญ๋ ์บ๋ฆฐ๋ ์๋ ์ฐ๋ ๋ฐฉ์์ด ์๋ ์ง๊ธ์ ๊ทธ๋๋ก ๋๊ณ ,
์๋์ผ๋ก ์บ๋ฆฐ๋ ์ฐ๋ ํ ํ์์์ด ๋ฐ๋ก ์ ํ๊ฐ๋ฅํ ๋ฒํผ๋ ๋ง๋ค์ด์ค.
๋ฐ์์์ฒญ ์์
๋งํฌ ยท 2026. 10. 5.
์์ง ๋ค์ด์จ ์์ฒญ์ด ์์ต๋๋ค.
์ด๋ ๊ฒ ๋จ๋๋ฐ,
"๋งํฌ" ๋์ ํด๋น ๋งํฌ์ ์ด๋ฆ์ด ๋จ๋๋ก ํด ์ค. ๋งํฌ ์์ฑํ ๋ ์ ์๋ ์ด๋ฆ ๋ง์ด์ง.
๋์ค์ ๋งํฌ ์ด๋ฆ์ ๋ฐ๊พธ๋๋ผ๋ ๋๊ธฐํ๋๋๋ก ์ ๊ฒฝ๋ ์จ ์ฃผ๊ณ ,
๊ทธ ๋ค์ openspec ์ต์ ํํด์ค.
ใ
ใ
ํธ์คํ
์ ๊ณ์ ์ผ ๋๋๊ฒ์ ๋ํ ๋ถ๋ด์ ์๋? ์ง๊ธ์ ์ผ๋ํ์ ์์ด์ ๊บผ๋ ๋จ
๊ทธ๋ผ ์ผ ์ฃผ๊ณ , ๋ฉ์ธ ํ๋ฉด ์ฃผ์ ์ข ์ค
์ฐ๋ฆฌ ๋๋ ํ ๋ฆฌ์์ ์ด ์ฑ ์คํ ๋ฌธ์ ์ข ๊ฐ์ ธ์๋ด
์ด๊ฑฐ ํ๋ฉด์ token usage๊ฐ ์ผ๋ง๋ ๋๋์ง ์ ์ ์๋?
์ด๋ฒ ์ดํฐ๋ ์ด์
์ AI๊ฐ ์ค์ ์์ฑํ ์ฝ๋์๋ง ์ถ์ฒ ์ฃผ์์ ๋ฌ์์ค. ํ์ธ ๊ฐ๋ฅํ ๋๊ตฌยท๋ ์ง๋ฅผ ์ ๊ณ , ์ฌ๋์ด ์ค์ ๋ก ๊ฒํ ํ์ง ์์๋ค๋ฉด `reviewed by`๋ ์ฐ์ง ๋ง. ์์ฑ ์ฌ๋ถ๊ฐ ๋ถํ์คํ ์ฝ๋๋ ๊ฑด๋๋ฆฌ์ง ๋ง๊ณ ์๋ ค์ค. ์ฃผ์ ๋ณ๊ฒฝ๋ง ๋ด ์์
๋ธ๋์น์ ์ปค๋ฐยทํธ์ํ ๋ค, \*\*๊ฐ ์ฃผ์์ GitHub ์ค ๋งํฌ(์ปค๋ฐ ๊ธฐ์ค)\*\*์ ์ปค๋ฐ ๋งํฌ๋ฅผ ๋ณด๋ด์ค. `main` ์ง์ ํธ์, ๋ค๋ฅธ ๋ณ๊ฒฝ์ ์ปค๋ฐ, PR ๋ณํฉ, Wiki ์์ ์ ํ์ง ๋ง.
mvp/haeseong์ ๊ธฐ์กด codex/hs-first-mvp๋ฅผ ์ด๋ฆ๋ง ๋ฐ๊พผ๊ฑฐ์ผ. ๊ทธ๋ฌ๋ ๋ก์ปฌ์ branch์ด๋ฆ์ github์ ๋ง๊ฒ ๋ฐ๊พผ ๋ค, ๋ก์ปฌ์ ์์ง ํธ์ํ์ง ์์ ์ปค๋ฐ๋ค์ ์ถ์ฒ ์ฃผ์๊ณผ ํจ๊ป ์ปค๋ฐ, ํธ์ํด
๋ฏธ์ปค๋ฐ ๋ณ๊ฒฝ๋ ๊ทธ๋ฅ ๋ค ๊ฐ์ด ํ๋ฉด ๋๋๋ฐ..
ํ์ฌ ์ฃผ์๋ค์ 
`(e.g., "AI-generated with Claude, 2026-03-14, reviewed by Alice")` ์ด ํ์์ผ๋ก ๋ฐ๊ฟ์ค ์ ์๊ฒ ์ด? ๋ด ์ฝ๋๋ review ์ํ์ผ๋ reviewed by ์ด์ฉ๊ณ ๋ ์์ ์์ ๋ฉด ๋ ๊ฑฐ๊ณ .