ํ๋กฌํํธ ์์ง๋์ด๋ง์ ์ํ IDE ์ค์
๐ In One Sentence
Cursor์ Continue.dev๊ฐ ํ์ฌ๋ VS Code๋ ๋๋ถ๋ถ์ ๊ฐ๋ฐ์ ํ๋กฌํํธ ์์ง๋์ด๋ง ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ๋ ๊ฐ์ง IDE๋ก, Cursor๋ ํด๋ผ์ฐ๋ API ์ํฌํ๋ก์ฐ์, Continue.dev๋ ์คํ์์ค ๋ฐ ๋ก์ปฌ ๋ชจ๋ธ ์๊ตฌ์ฌํญ์ ์ ํฉํฉ๋๋ค.
๐ฌ In Plain Terms
์ด๋ฏธ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ๋ณด๋ด๋ IDE๋ฅผ ์ ํํ์ญ์์ค. TypeScript ๋๋ Python์ ์ฌ์ฉํ๊ณ ํด๋ผ์ฐ๋ API(OpenAI, Anthropic, Google)๋ฅผ ํธ์ถํ๋ค๋ฉด Cursor๊ฐ ๊ฐ์ฅ ์ ์ ๋ง์ฐฐ์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ธ์ ๋ก์ปฌ์์ ์คํํด์ผ ํ๊ฑฐ๋ ์คํ์์ค ์๊ตฌ์ฌํญ์ด ์๋ค๋ฉด Continue.dev๊ฐ ํ์ฌ๋ VS Code๊ฐ ์ ํฉํฉ๋๋ค.
๋๋ถ๋ถ์ ๊ฐ๋ฐ์ ํ๋กฌํํธ ์์ง๋์ด๋ง ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ๋ ๊ฐ์ง IDE๊ฐ ์์ต๋๋ค: Cursor(๋ค์ดํฐ๋ธ AI ํตํฉ, ํ๋กฌํํธ๋ฅผ ์ผ๊ธ ์๋ฏผ์ผ๋ก ์ทจ๊ธ)์ Continue.dev๊ฐ ํ์ฌ๋ VS Code(์คํ์์ค, ๋ก์ปฌ ๋ชจ๋ธ ์ง์). ์ ํ์ ์ฃผ์ ์ธ์ด์ ๋ชจ๋ธ ์ก์ธ์ค ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
Cursor๋ ํ๋กฌํํธ ํ์ผ์ ๋ค์ดํฐ๋ธ๋ก ์ทจ๊ธํฉ๋๋ค โ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ํจ๊ป ํธ์ง๊ธฐ์์ ์ง์ ํ๋กฌํํธ๋ฅผ ์ฐธ์กฐ, ํธ์ง, ํ ์คํธํ ์ ์์ต๋๋ค. OpenAI ํธํ API์์ ๋ค์ดํฐ๋ธ ํตํฉ์ ์ ๊ณตํ๋ฉฐ TypeScript์ Python์ ์ ์ง์ํฉ๋๋ค. ์ฃผ๋ก ์ด ์ธ์ด๋ค์ ์ฌ์ฉํ๊ณ ๋ง์ฐฐ์ด ๊ฐ์ฅ ์ ์ ํ๋กฌํํธ ํธ์ง ๊ฒฝํ์ ์ํ๋ค๋ฉด Cursor๋ฅผ ์ฌ์ฉํ์ญ์์ค.
Continue.dev๊ฐ ํ์ฌ๋ VS Code๋ ์คํ์์ค์ด๋ฉฐ, Ollama๋ฅผ ํตํด ๋ก์ปฌ ๋ชจ๋ธ์ ์ง์ํ๊ณ , ๋ชจ๋ ์ธ์ด ์ํ๊ณ์ ํจ๊ป ์๋ํฉ๋๋ค. Continue.dev๋ ํธ์ง๊ธฐ ๋ด ํ๋กฌํํธ ์์ฑ ๋ฐ ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์คํ์์ค ์๊ตฌ์ฌํญ์ด ์๊ฑฐ๋, ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋๋ ๋น์ฉ ์ ๊ฐ์ ์ํด ๋ชจ๋ธ์ ๋ก์ปฌ์์ ์คํํด์ผ ํ๊ฑฐ๋, Cursor์์ ์ ์ง์๋์ง ์๋ ์ธ์ด ์ํ๊ณ์์ ์์ ํ๋ค๋ฉด VS Code + Continue.dev๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๊ฒฐ์ ๊ธฐ์ค: TypeScript ๋๋ Python์ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ํ์ด ํด๋ผ์ฐ๋ API๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Cursor๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋ก์ปฌ ๋ชจ๋ธ ์ง์, ์คํ์์ค ์๊ตฌ์ฌํญ, ๋๋ ์กฐ์ง์์ ํด๋ผ์ฐ๋ API ์ฌ์ฉ์ ์ ํ์ด ์๋ค๋ฉด VS Code + Continue.dev๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๐ก ํ๋กฌํํธ ๋ฐ๋ณต ์๋๋ฅผ ์ํ Cursor
Cursor๋ฅผ ์ฌ์ฉํ๋ฉด ํธ์ง๊ธฐ ๋ด๋ถ์์ ํ๋กฌํํธ ํ์ผ์ Claude 4.6 Sonnet์ ์ง์ ์คํํ ์ ์์ต๋๋ค. ์ด๋ฏธ ์ฝ๋ ์์ ์ Cursor๋ฅผ ์ฌ์ฉํ๋ ํ์ ๊ฒฝ์ฐ ์์ฑ-ํ ์คํธ ์ฃผ๊ธฐ๊ฐ ์ ๋ถ์์ ์ ์ด๋ก ๋จ์ถ๋ฉ๋๋ค.
๋ก์ปฌ ํ๋กฌํํธ ํ ์คํธ ๋ฃจํ
๋ก์ปฌ ํ๋กฌํํธ ํ ์คํธ ๋ฃจํ๋ 4๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค: ํ๋กฌํํธ ์์ฑ, 3๊ฐ์ ๋ํ ์ ๋ ฅ์ผ๋ก ํ ์คํธ, ๊ธฐ์ค์ ๊ณผ ๋น๊ต, ํต๊ณผ ์ ์ปค๋ฐ. Promptfoo๋ฅผ ๋ก์ปฌ์ ๊ตฌ์ฑํ๋ฉด ์ด ๋ฃจํ๊ฐ 30์ด ๋ฏธ๋ง์ผ๋ก ์๋ฃ๋์ด์ผ ํฉ๋๋ค.
1๋จ๊ณ: IDE์์ ํ๋กฌํํธ๋ฅผ ์์ฑํ๊ฑฐ๋ ํธ์งํฉ๋๋ค. 2๋จ๊ณ: 3๊ฐ์ ๋ํ ์ ๋ ฅ(์ผ๋ฐ์ ์ธ ์ ๋ ฅ 1๊ฐ, ์ฃ์ง ์ผ์ด์ค 1๊ฐ, ์ด์ ์ ์คํจ๋ฅผ ์ ๋ฐํ ์ ๋ ฅ 1๊ฐ)์ ๋ํด ํ๋กฌํํธ๋ฅผ ์คํํฉ๋๋ค. 3๋จ๊ณ: ๊ธฐ์ค์ (๋ง์ง๋ง์ผ๋ก ์ปค๋ฐ๋ ๋ฒ์ )๊ณผ ์ถ๋ ฅ์ ๋น๊ตํฉ๋๋ค. 4๋จ๊ณ: ํ์ง์ด ์ ์ง๋๊ฑฐ๋ ๊ฐ์ ๋๋ค๋ฉด ์ปจ๋ฒค์ ๋ ๋ฉ์์ง์ ํจ๊ป ์ปค๋ฐํฉ๋๋ค.
๋ก์ปฌ ๋ฃจํ๋ฅผ ์ํ Promptfoo ์ค์ : `npm install -g promptfoo`๋ก ์ค์นํ๊ณ , 3๊ฐ์ ํ ์คํธ ์ผ์ด์ค์ LLM-as-judge ํ๊ฐ์๊ฐ ํฌํจ๋ `promptfooconfig.yaml`์ ํ๋ก์ ํธ ๋ฃจํธ์ ์์ฑํฉ๋๋ค. `promptfoo eval`์ ์คํํ์ฌ ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํฉ๋๋ค. ๊ธฐ์กด ํ๋กฌํํธ์ ์ ์ฒด ์ค์ ์๊ฐ์ 15๋ถ ๋ฏธ๋ง์ ๋๋ค.
๊ธฐ์ค์ ๋น๊ต๊ฐ ํต์ฌ ๋จ๊ณ์ ๋๋ค. ์ด ๋จ๊ณ ์์ด๋ ์ ๋์ ํ์ง๋ง ํ ์คํธํ๊ณ ์๋์ ํ์ง์ ํ ์คํธํ์ง ๋ชปํฉ๋๋ค โ ํ๋กฌํํธ๊ฐ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ๋๋ผ๋ ๋ฏธ๋ฌํ ์ฐจ์์์ ์ด์ ๋ฒ์ ๋ณด๋ค ๋ ๋์ ์ ์์ต๋๋ค.
โ ๏ธ ๊ธฐ์ค์ ๋น๊ต๋ ์ ํ์ฌํญ์ด ์๋๋๋ค
๊ธฐ์ค์ ๊ณผ ๋น๊ตํ์ง ์์ผ๋ฉด, ์ ๋ ์๊ณ๊ฐ์ด ๋ฎ์ ๊ฒฝ์ฐ ์ฃ์ง ์ผ์ด์ค์์ ํ์ง์ด ์ ํ๋ ํ๋กฌํํธ๋ ํ ์คํธ๋ฅผ "ํต๊ณผ"ํ ์ ์์ต๋๋ค. ํญ์ ๋ง์ง๋ง์ผ๋ก ๋ฐฐํฌ๋ ๋ฒ์ ๊ณผ ๋น๊ตํ์ญ์์ค.
๋ฒ์ ๊ด๋ฆฌ์ ํ๋กฌํํธ ์ ์ฅํ๊ธฐ
ํ๋กฌํํธ๋ฅผ ๋ฆฌํฌ์งํฐ๋ฆฌ ๋ฃจํธ์ `/prompts` ๋๋ ํฐ๋ฆฌ์ `.txt` ๋๋ `.ts` ํ์ผ๋ก ์ ์ฅํ์ญ์์ค. Git์์ ํ๋กฌํํธ๋ฅผ ๋ฒ์ ๊ด๋ฆฌํ๋ฉด ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ์ ๋์ผํ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค: ์ ์ฒด ์ด๋ ฅ, blame, ๋กค๋ฐฑ, PR ๊ธฐ๋ฐ ๊ฒํ .
๋ช ๋ช ๊ท์น: `task-version.txt` โ ์๋ฅผ ๋ค์ด `customer-support-v3.txt`, `email-draft-v1.txt`. ๋ ์ง๊ฐ ์๋ ์์ฐจ์ ๋ฒ์ ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ญ์์ค. ํ๋กฌํํธ๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ๋๋ ์ญ์ ํ์ง ๋ง๊ณ `/prompts/archive/`๋ก ์ด๋ํ์ญ์์ค.
ํ๋กฌํํธ ๋ณ๊ฒฝ์ ๋ํ ์ปค๋ฐ ๋ฉ์์ง ํ์: ์ปจ๋ฒค์ ๋ ์ปค๋ฐ์ ์ฌ์ฉํ์ญ์์ค โ `feat: add few-shot examples to customer-support prompt`, `fix: reduce hallucination in email-draft prompt`, `refactor: simplify chain-of-thought in summarizer prompt`. ์ด๋ฅผ ํตํด ํ๋กฌํํธ ๋ณ๊ฒฝ์ฌํญ์ด ํ์ค `git log` ์ถ๋ ฅ์์ ์ฝ๋ ๋ณ๊ฒฝ์ฌํญ๊ณผ ํจ๊ป ๋ณด์ด๊ฒ ๋ฉ๋๋ค.
Git ํ๊ทธ๋ฅผ ํ๋ก๋์ ๋ฒ์ ์ ์ฌ์ฉํ์ญ์์ค: ๋ชจ๋ ์ฑ๊ณต์ ์ธ ํ๋ก๋์ ๋ฐฐํฌ ํ, `prompts/task/version` ํ์์ผ๋ก ์ปค๋ฐ์ ํ๊ทธ๋ฅผ ๋ถ์ด์ญ์์ค (์: `prompts/customer-support/v3`). ์ด ํ๊ทธ๋ค์ ํ๋ก๋์ ์์ ํ๋กฌํํธ ๋ณ๊ฒฝ์ฌํญ์ ๋๋๋ ค์ผ ํ ๋ ๋กค๋ฐฑ ๋์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๐ ํ๋กฌํํธ๋ ์ฝ๋์ ๋๋ค
ํ๋กฌํํธ ํ์ผ์ ์ฝ๋ ํ์ผ๊ณผ ๋์ผํ ๊ท์จ๋ก ์ทจ๊ธํ์ญ์์ค: PR ๊ฒํ , ์์ฑ์ ๋ช ์, ์๋งจํฑ ๋ฒ์ ๊ด๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ญ์ ํ์ง ๋ง๊ณ /prompts/archive/๋ก ์ด๋ํ์ญ์์ค.
ํ๋กฌํํธ์ฉ CI/CD ๊ฒ์ดํธ
๋ชจ๋ ํ ๋ฆฌํ์คํธ์์ Promptfoo ๋๋ Braintrust๋ฅผ ์คํํ๊ณ ํต๊ณผ์จ์ด ์๊ณ๊ฐ ์ดํ๋ก ๋จ์ด์ง๋ฉด ๋น๋๋ฅผ ์คํจ์ํค๋ GitHub Actions ์ํฌํ๋ก์ฐ๋ฅผ ์ถ๊ฐํ์ญ์์ค. ์๊ณ๊ฐ์ 85%๋ก ์์ํ๊ณ 3๊ฐ์๊ฐ ์์ ์ ์ธ ํ ์คํธ ํ 95%๋ก ์ํฅํ์ญ์์ค.
GitHub Actions ์ํฌํ๋ก์ฐ ๊ตฌ์กฐ: `pull_request`์์ ํธ๋ฆฌ๊ฑฐ๋๊ณ , Promptfoo๋ฅผ ์ค์นํ๊ณ , `promptfoo eval --config promptfooconfig.yaml`์ ์คํํ๊ณ , ์ข ๋ฃ ์ฝ๋๊ฐ 0์ด ์๋๋ฉด ์คํจํ๋ ์์ ์ ํฌํจํ๋ `.github/workflows/prompt-test.yml`์ ์์ฑํ์ญ์์ค (Promptfoo๋ ์๊ณ๊ฐ ์ดํ๋ก ํ ์คํธ๊ฐ ์คํจํ๋ฉด ์ฝ๋ 1๋ก ์ข ๋ฃํฉ๋๋ค).
์๊ณ๊ฐ ์ ๋ต: 85%๋ก ์์ํ์ฌ ์ฃผ์ ํ๊ท๋ฅผ ์ก์ผ๋ฉด์๋ ์ผ๋ถ ๋ถ์ฐ์ ํ์ฉํ์ญ์์ค. ๊ฑฐ์ง ์คํจ ์์ด 3๊ฐ์๊ฐ ์์ ์ ์ธ ํ ์คํธ ํ 95%๋ก ์ํฅํ์ญ์์ค. ์ค์ํ ํ๋กฌํํธ(๊ณ ๊ฐ ๋๋ฉด, ๊ธ์ต, ์๋ฃ)์ ๊ฒฝ์ฐ 90%๋ก ์์ํ์ญ์์ค.
๋ฆฌํฌ์งํฐ๋ฆฌ ๋ธ๋์น ๋ณดํธ ์ค์ ์์ prompt-test ์์ ์ ํ์ ์ํ ๊ฒ์ฌ๋ก ์ถ๊ฐํ์ญ์์ค. ์ด๋ฅผ ํตํด ํ๋กฌํํธ๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๋ PR์ ์ฐจ๋จํ์ง ์์ผ๋ฉด์, ํ๋กฌํํธ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ ์คํธ ์คํจ๊ฐ ๋ฐ์ํ๋ PR์ ๋ณํฉ์ ๋ฐฉ์งํฉ๋๋ค.
ํ๋กฌํํธ ํ๋ก๋์ ๋ชจ๋ํฐ๋ง
ํ๋กฌํํธ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๊ธฐ๋กํ๊ณ , ๋ชจ๋ ์๋ต์ ํ์ง ์ ์ ์ธก์ ์ ์คํํ๊ณ , 24์๊ฐ ๋กค๋ง ์๋์ฐ ๊ธฐ์ค ํ์ง ์ ์๊ฐ 10% ์ด์ ํ๋ฝํ๋ฉด ์๋ฆผ์ ์ค์ ํ์ญ์์ค. ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ํ๋กฌํํธ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ , ๋ด๋ถ ํ๋กฌํํธ์ ๋ํด์๋ ๋ก๊ทธ ๊ธฐ๋ก๋ง์ผ๋ก๋ ํ์ฉ๋ฉ๋๋ค.
๊ธฐ๋กํ ํญ๋ชฉ: ํ๋กฌํํธ ์๋ณ์์ ๋ฒ์ , ๋ชจ๋ธ๋ช , ์ ๋ ฅ ํ ํฐ ์, ์ถ๋ ฅ ํ ํฐ ์, ๋ฐ๋ฆฌ์ด ๋จ์ ์ง์ฐ ์๊ฐ, ๊ทธ๋ฆฌ๊ณ ํ๊ฐ์์ ํ์ง ์ ์. ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋กฌํํธ์ ๊ฒฝ์ฐ, ๋ก๊ทธ์ PII๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ์ํด ์์ ์ ๋ ฅ ๋์ ํด์๋ฅผ ๊ธฐ๋กํ์ญ์์ค.
ํ์ง ์ ์ ์ธก์ ์ต์ : Braintrust๋ ์๋ต๋ณ ์ ์์ ๋์๋ณด๋๊ฐ ํฌํจ๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์์ฒด ํธ์คํ ๋ฐฉ์์ ๊ฒฝ์ฐ, ์๋ต์ 10% ์ํ์ ๋ํด ๊ฒฝ๋ LLM-as-judge ํธ์ถ์ ์คํํ์ญ์์ค. ์๋ต๊ณผ ํจ๊ป ์ ์๋ฅผ ๊ธฐ๋กํ์ญ์์ค.
์๋ฆผ ์๊ณ๊ฐ: 7์ผ ๋กค๋ง ํ๊ท ๋๋น ํ๊ท ํ์ง ์ ์๊ฐ 10% ์ด์ ํ๋ฝํ๊ฑฐ๋, ์ง์ฐ ์๊ฐ์ด ๊ธฐ์ค P95์ 2๋ฐฐ๋ฅผ ์ด๊ณผํ๊ฑฐ๋, ์ค๋ฅ์จ์ด 1%๋ฅผ ์ด๊ณผํ๋ฉด ์๋ฆผ์ ํธ๋ฆฌ๊ฑฐํ์ญ์์ค. ํ๋กฌํํธ๋ณ ์๋ฆผ์ ์ผ๋ฐ DevOps ๋๊ธฐ์ด์ด ์๋ ํด๋น ํ๋กฌํํธ๋ฅผ ์์ ํ ํ์ผ๋ก ๋ผ์ฐํ ํ์ญ์์ค.
๊ฐ๋ฐ์ ํ๋กฌํํธ ์ํฌํ๋ก์ฐ์ ์ผ๋ฐ์ ์ธ ์ค์
โ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์ง์ ํ๋กฌํํธ ์์ฑ
Why it hurts: ํ๋์ฝ๋ฉ๋ ํ๋กฌํํธ๋ ์ ์ฒด ๋ฐฐํฌ ์์ด๋ ๋ฒ์ ๊ด๋ฆฌ, ํ ์คํธ, ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค
Fix: ํ๋กฌํํธ๋ฅผ /prompts ๋๋ ํฐ๋ฆฌ์ ๋ณ๋ ํ์ผ๋ก ์ ์ฅํ์ญ์์ค. ๋ฐํ์์ ๋ก๋ํ์ญ์์ค.
โ ๋ก์ปฌ์์๋ง ํ ์คํธํ๊ณ CI/CD์์๋ ํ ์คํธํ์ง ์์
Why it hurts: ๋ก์ปฌ ํ ์คํธ๋ ์๊ฐ ์๋ฐ ํ์ ๊ฑด๋๋ฐ๊ฒ ๋ฉ๋๋ค; CI/CD ๊ฒ์ดํธ๋ ํ์์ ๋๋ค
Fix: GitHub Actions์ Promptfoo ํ ์คํธ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ญ์์ค. ํต๊ณผ์จ์ด 85% ์ดํ๋ก ๋จ์ด์ง๋ฉด ๋ณํฉ์ ์ฐจ๋จํ์ญ์์ค.
โ ํ๋ก๋์ ๋ชจ๋ํฐ๋ง ์์
Why it hurts: ํ๋กฌํํธ ํ์ง์ด ๋ฐฐํฌ ํ ๊ฐ์์ฑ ์์ด ์ ํ๋ฉ๋๋ค
Fix: ํ๋กฌํํธ๋ณ ์ผ๋ณ ํต๊ณผ์จ์ ๊ธฐ๋กํ์ญ์์ค. ํต๊ณผ์จ์ด ์ฃผ๊ฐ 5% ์ด์ ํ๋ฝํ๋ฉด ์๋ฆผ์ ๋ฐ์กํ์ญ์์ค.
โ ํ๋์ ๋ชจ๋ธ๋ก๋ง ํ ์คํธ
Why it hurts: GPT-5.5์์ ์๋ํ๋ ํ๋กฌํํธ๊ฐ Claude 4.6 Sonnet์์๋ ์คํจํ ์ ์์ต๋๋ค
Fix: CI/CD์์ ์ต์ 2๊ฐ์ ๋ชจ๋ธ์ ๋ํด ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํ์ญ์์ค.
ํต์ฌ ์์
- ํด๋ผ์ฐ๋ API๋ฅผ ์ฌ์ฉํ๋ TypeScript/Python ๊ฐ๋ฐ์๋ Cursor๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋ก์ปฌ ๋ชจ๋ธ์ด๋ ์คํ์์ค ์๊ตฌ์ฌํญ์๋ VS Code + Continue.dev๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ๋ก์ปฌ ํ ์คํธ ๋ฃจํ๋ 4๋จ๊ณ์ ๋๋ค: ์์ฑ, 3๊ฐ์ ๋ํ ์ ๋ ฅ์ผ๋ก ํ ์คํธ, ๊ธฐ์ค์ ๊ณผ ๋น๊ต, ํต๊ณผ ์ ์ปค๋ฐ. Promptfoo๋ก 30์ด ๋ฏธ๋ง์ ๋ชฉํ๋ก ํ์ญ์์ค.
- ํ๋กฌํํธ๋ฅผ /prompts์ .txt ๋๋ .ts ํ์ผ๋ก ์ ์ฅํ์ญ์์ค. task-version.txt ๋ช ๋ช ๊ท์น์ ์ฌ์ฉํ์ญ์์ค. Git์์ ํ๋ก๋์ ๋ฐฐํฌ ๋ฒ์ ์ ํ๊ทธ๋ฅผ ๋ถ์ด์ญ์์ค.
- ํต๊ณผ์จ์ด 85% ์ดํ๋ก ๋จ์ด์ง๋ฉด ๋น๋๋ฅผ ์คํจ์ํค๋ GitHub Actions CI/CD ๊ฒ์ดํธ๋ฅผ ์ถ๊ฐํ์ญ์์ค. 3๊ฐ์๊ฐ ์์ ์ ์ธ ํ ์คํธ ํ 95%๋ก ์ํฅํ์ญ์์ค.
- ํ๋ก๋์ ์์ ํ๋กฌํํธ ์๋ณ์, ๋ชจ๋ธ, ํ ํฐ ์, ์ง์ฐ ์๊ฐ, ํ์ง ์ ์๋ฅผ ๊ธฐ๋กํ์ญ์์ค. 24์๊ฐ ๋ด ํ์ง ์ ์ 10% ์ด์ ํ๋ฝ ์ ์๋ฆผ์ ๋ฐ์กํ์ญ์์ค.
- ํ์ง ์ ์ ์ธก์ ์ผ๋ก ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ํ๋กฌํํธ๋ฅผ ๋ชจ๋ํฐ๋งํ์ญ์์ค. ๋ด๋ถ ์ ์ฉ ํ๋กฌํํธ์ ๋ํด์๋ ๋ก๊ทธ ๊ธฐ๋ก๋ง์ผ๋ก๋ ํ์ฉ๋ฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
ํ๋กฌํํธ ์์ง๋์ด๋ง์ ๊ฐ์ฅ ์ ํฉํ IDE๋ ๋ฌด์์ ๋๊น?
Cursor๋ ์ฃผ๋ก TypeScript ๋๋ Python์ผ๋ก ์์ ํ๋ฉฐ ํ๋กฌํํธ ํ์ผ์ ์ผ๊ธ ์๋ฏผ์ผ๋ก ์ทจ๊ธํ๋ ๋ค์ดํฐ๋ธ AI ํตํฉ์ ์ํ๋ ๊ฐ๋ฐ์์๊ฒ ๊ถ์ฅ๋๋ IDE์ ๋๋ค. ๋ก์ปฌ ๋ชจ๋ธ ์ง์, ์คํ์์ค ์๊ตฌ์ฌํญ, ๋๋ Cursor์์ ์ ์ง์๋์ง ์๋ ์ธ์ด ์ํ๊ณ์์ ์์ ํ๋ ๊ฒฝ์ฐ Continue.dev๊ฐ ํ์ฌ๋ VS Code๋ฅผ ๊ถ์ฅํฉ๋๋ค.
๋ฒ์ ๊ด๋ฆฌ์ ํ๋กฌํํธ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํด์ผ ํฉ๋๊น?
๋ฆฌํฌ์งํฐ๋ฆฌ ๋ฃจํธ์ /prompts ๋๋ ํฐ๋ฆฌ์ .txt ๋๋ .ts ํ์ผ๋ก ํ๋กฌํํธ๋ฅผ ์ ์ฅํ์ญ์์ค. task-version.txt ๋ช ๋ช ๊ท์น์ ์ฌ์ฉํ์ญ์์ค (์: customer-support-v3.txt). ํ๋กฌํํธ ๋ณ๊ฒฝ์๋ ์ปจ๋ฒค์ ๋ ์ปค๋ฐ ๋ฉ์์ง ํ์์ ์ฌ์ฉํ์ญ์์ค (feat:, fix:, refactor:). ํ๋ก๋์ ์ ๋ฐฐํฌ๋ ๋ชจ๋ ๋ฒ์ ์ Git ํ๊ทธ๋ฅผ ์ถ๊ฐํ์ญ์์ค.
ํ๋กฌํํธ์ฉ CI/CD ๊ฒ์ดํธ๋ฅผ ์ด๋ป๊ฒ ์ค์ ํฉ๋๊น?
๋ชจ๋ ํ ๋ฆฌํ์คํธ์์ Promptfoo ๋๋ Braintrust๋ฅผ ํ ์คํธ ์ค์ํธ์ ์คํํ๋ GitHub Actions ์ํฌํ๋ก์ฐ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ญ์์ค. ํต๊ณผ์จ์ด ์๊ณ๊ฐ ์ดํ๋ก ๋จ์ด์ง๋ฉด ๋น๋๋ฅผ ์คํจ์ํค๋๋ก ๋จ๊ณ๋ฅผ ๊ตฌ์ฑํ์ญ์์ค โ 85%๋ก ์์ํ๊ณ 3๊ฐ์๊ฐ ์์ ์ ์ธ ํ ์คํธ ํ 95%๋ก ์ํฅํ์ญ์์ค. ํต๊ณผ์จ ์๊ณ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ๋๋๋ก ๋ฆฌํฌ์งํฐ๋ฆฌ์ ๊ตฌ์ฑ ํ์ผ์ ์ ์ฅํ์ญ์์ค.
ํ๋ก๋์ ํ๋กฌํํธ ๋ชจ๋ํฐ๋ง์ ์ํด ๋ฌด์์ ๊ธฐ๋กํด์ผ ํฉ๋๊น?
ํ๋กฌํํธ ์ ๋ ฅ(PII๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํด์), ๋ชจ๋ธ ์๋ต, ์ง์ฐ ์๊ฐ, ํ ํฐ ์, ํ๊ฐ์์ ํ์ง ์ ์๋ฅผ ๊ธฐ๋กํ์ญ์์ค. ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋กฌํํธ์ ๊ฒฝ์ฐ, ๋ก๊ทธ๋ฅผ ์ต์ 30์ผ๊ฐ ๋ณด๊ดํ๊ณ 24์๊ฐ ๋กค๋ง ์๋์ฐ ๊ธฐ์ค ํ์ง ์ ์ 10% ์ด์ ํ๋ฝ ์ ์๋ฆผ์ ์ค์ ํ์ญ์์ค.
Git ๋ฆฌํฌ์งํฐ๋ฆฌ์ ํ๋กฌํํธ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํฉ๋๊น?
๊ฐ ํ๋กฌํํธ๋ฅผ `/prompts/theme/` ๋๋ ํฐ๋ฆฌ์ ์ผ๋ฐ ํ ์คํธ ํ์ผ๋ก ์ ์ฅํ์ญ์์ค. ์ฌ๋ฌ๊ทธ์ ๋ฒ์ ์ผ๋ก ํ์ผ๋ช ์ ์ง์ ํ์ญ์์ค: `classify-intent-v2.txt`. ๋ฒ์ , ์์ฑ์, ์์ ์ผ, ๋ชจ๋ธ, ํ ์ค ์ค๋ช ์ด ํฌํจ๋ YAML ํ๋ก ํธ๋งคํฐ๋ฅผ ์ถ๊ฐํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋กฌํํธ๋ฅผ ํ์ค ์ฝ๋ ๋ฆฌ๋ทฐ ๋๊ตฌ์์ ๊ฒ์, ๋น๊ต, ๊ฒํ ํ ์ ์์ต๋๋ค.
ํ๋กฌํํธ์ฉ CI/CD ๊ฒ์ดํธ๋ ๋ฌด์์ ๋๊น?
CI/CD ๊ฒ์ดํธ๋ ๋ชจ๋ PR์์ ํ๋กฌํํธ ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํ๊ณ ํต๊ณผ์จ์ด ์๊ณ๊ฐ(์ผ๋ฐ์ ์ผ๋ก 85%) ์ดํ๋ก ๋จ์ด์ง๋ฉด ๋ณํฉ์ ์ฐจ๋จํ๋ ์๋ํ๋ ํ ์คํธ ๋จ๊ณ์ ๋๋ค. Promptfoo์ CLI๋ฅผ ์ฌ์ฉํ์ฌ GitHub Actions์์ ๊ตฌํํ์ญ์์ค: `npx promptfoo eval --threshold 0.85`. ํ ์คํธ๊ฐ ์คํจํ๋ฉด PR์ด ์๋์ผ๋ก ์ฐจ๋จ๋ฉ๋๋ค.
ํ๋กฌํํธ ์์ง๋์ด๋ง์ ๊ฐ์ฅ ์ข์ IDE๋ ์ด๋ ๊ฒ์ ๋๊น?
Cursor๋ ํ๋กฌํํธ ๋ฐ๋ณต์ ์ํ ๋ด์ฅ AI ์ง์๊ณผ ํ๋กฌํํธ ํ์ผ์์ Claude 4.6 Sonnet์ ์ง์ ์คํํ ์ ์๋ ๊ธฐ๋ฅ ๋๋ฌธ์ ํ๋กฌํํธ ์์ง๋์ด๋ง์ ๊ฐ์ฅ ์ข์ IDE์ ๋๋ค. Continue.dev๊ฐ ํ์ฌ๋ VS Code๋ ์คํ์์ค ํด๋ง์ด ํ์ํ ํ์๊ฒ ๊ฐ๋ ฅํ ๋์์ ๋๋ค. ๋ IDE ๋ชจ๋ ํ๋กฌํํธ ํ์์ ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์๋ฅผ ์ง์ํ๊ณ Git๊ณผ ํตํฉ๋ฉ๋๋ค.