2025λ , μννΈμ¨μ΄ κ°λ°μ μ΄μ κ³Όλ νμ°ν λ€λ₯Έ νκ²½μ κ·Έλ¦¬κ³ μμ΅λλ€. νΉν 'λ°μ΄λΈ μ½λ©(Vibe Coding)'μ΄λΌλ ν₯λ―Έλ‘μ΄ κ°λ μ΄ κ°λ°μλ λ¬Όλ‘ λΉκ°λ° μ§κ΅°μκ²κΉμ§ λΉ λ₯΄κ² νμ°λλ©΄μ, μ°λ¦¬κ° κΏκΏμλ μ±μ΄λ μΉμ¬μ΄νΈλ₯Ό μ΄μ λ³΄λ€ ν¨μ¬ μμνκ² λ§λ€ μ μλ μλκ° μ΄λ¦¬κ³ μμ΅λλ€.
μΆμ²: https://age-of-product.com/wp-content/
β λ°μ΄λΈ μ½λ©(Vibe Coding)μ΄λ?
μΆμ²: μν€λ°±κ³Ό, λ°μ΄λΈ μ½λ©(Vibe Coding)μ΄λ?
- λ°μ΄λΈ μ½λ©(Vibe Coding)μ 2023λ , μΉ΄νμ(Karpathy)κ° μ μνλ "κ°μ₯ μΈκΈ° μλ μλ‘μ΄ νλ‘κ·Έλλ° μΈμ΄λ μμ΄"λΌλ μ£Όμ₯μμ ν κ±Έμ λ λμκ° κ°λ μ λλ€.
- μ΄λ κ±°λ μΈμ΄ λͺ¨λΈ(LLM)μ λλΌμ΄ λ₯λ ₯ λλΆμ, λ μ΄μ μΈκ°μ΄ μ»΄ν¨ν°μκ² λͺ λ ΉνκΈ° μν΄ λ³΅μ‘ν νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ μ¨ λ°°μ°μ§ μμλ λλ€λ νμ μ μΈ λ³νλ₯Ό μλ―Έν©λλ€.
OpenAIκ° κ³΅κ°ν Codexλ λ¨μν μ½λ μμ±κΈ°κ° μλλΌ, μ€μ κ°λ° μ 무λ₯Ό μλννκ³ νμ ν μ μλ AI μννΈμ¨μ΄ μμ§λμ΄λ§ μμ΄μ νΈμ λλ€.
μ΄ κΈμμλ Codexκ° μ΄λ€ μλ¦¬λ‘ μλνλμ§, μ΄λ€ μμ μ μλνν μ μλμ§, κ·Έλ¦¬κ³ λ°ν μμμ μ€μ λ°λͺ¨ μ¬λ‘λ₯Ό λ°νμΌλ‘ Codexμ νμ¬μ λ―Έλλ₯Ό μκ°ν©λλ€.
μΆμ²:
Codexλ OpenAI ν΄λΌμ°λ κΈ°λ°μμ μλ
νλ AI κ°λ° μμ΄μ νΈμ
λλ€.
λ¨μν μ½λ μλ μμ± μμ€μ λμ΄, λ€μκ³Ό κ°μ κΈ°λ₯μ μνν©λλ€:
π§ Codexλ GPT κΈ°λ° λͺ¨λΈμΈ codex-1(μ½λ±μ€-1)
μ κΈ°λ°μΌλ‘ νλ©°, μ΄λ μ€μ νλ‘λμ
νκ²½μμ λ³ν© κ°λ₯ν μμ€μ μ½λ νμ§μ λͺ©νλ‘ νμ΅λμμ΅λλ€.
μ¬μ© λ°©λ²
π» ChatGPTμ μ¬μ΄λλ°λ₯Ό ν΅ν΄ Codexμ μ μνμ¬ ν둬ννΈλ₯Ό μ λ ₯νκ³ μ¬μ©ν μ μμ΅λλ€.
μ½λλ² μ΄μ€μ λν΄ Codexμ μ§λ¬Ένκ³ μΆλ€λ©΄
"Ask"λ₯Ό ν΄λ¦νμΈμ.
(μ°Έκ³ ) μ½λ λ² μ΄μ€λ?
μμ
μλ£ ν Codexλ μ체 νκ²½ λ΄μμ λ³κ²½ μ¬ν
μ 컀λ°(commit)ν©λλ€.
AGENTS.md
Codexλ μ¬λμ²λΌ μ½λλ₯Ό μ½κ³ μμ
νμ§λ§, λ¬Έλ§₯κ³Ό κ·μΉμ λ μ μ΄ν΄νλλ‘ μλ΄ν μ μλ κ΅¬μ± νμΌμ΄ μ‘΄μ¬ν©λλ€.
λ°λ‘ AGENTS.md
μ
λλ€.
π€ AGENTS.mdλ "AI κ°λ°μλ₯Ό μν κ°μ΄λλΌμΈ λ¬Έμ"μ λλ€.
- μΈκ° κ°λ°μκ° νλ‘μ νΈμ μ²μ ν©λ₯νμ λ
README.md
,CONTRIBUTING.md
,docs/
λ±μ μ½μΌλ©° μ½λλ₯Ό μ΄ν΄νλ―,- Codexλ
AGENTS.md
λ₯Ό μ½κ³ βμ΄ νλ‘μ νΈλ μ΄λ κ² μ΄ν΄νκ³ , μ΄λ κ² μμ νλ©΄ λΌμβλΌλ μ§μΉ¨(instruction)μ λ°μ΅λλ€.
νλͺ© | README.md | AGENTS.md |
---|---|---|
π― λμ | μΈκ° κ°λ°μ (μ¬λ) | Codex κ°μ AI κ°λ° μμ΄μ νΈ |
π λͺ©μ | νλ‘μ νΈ μκ°, μ€μΉλ², μ¬μ©λ² μλ΄ | μ½λ νμ λ°©μ, ν μ€νΈ μ€ν λ°©μ, μ€νμΌ κ°μ΄λ μλ μ΄ν΄μ© μ§μΉ¨ |
π νμ μμ λ | λ¬Έμ₯ μμ£Ό, Markdown μ€νμΌ μμ λ‘μ | ꡬ쑰νλ μ§μΉ¨ μμ£Ό, μ€ν κ°λ₯ν λͺ λ Ήμ΄λ κ·μΉ μ λ¬ |
βοΈ μ€ν κΈ°λ° | μ¬λμ΄ λ³΄κ³ μ§μ μ€ν | Codexκ° μλ λΆμ, μ€ν, ν μ€νΈνλ λ° μ°Έκ³ |
π§ AGENTS.md
λ 무μμ νλμ?
Codexλ νλ‘μ νΈ λ΄μ AGENTS.md
νμΌμ΄ μ‘΄μ¬νλ©΄, λ€μκ³Ό κ°μ λ°©μμΌλ‘ μ΄λ₯Ό μ°Έκ³ νμ¬ μμ
μ νλλ₯Ό λμ
λλ€:
μν | μ€λͺ |
---|---|
π§ μ½λ ꡬ쑰 μλ΄ | ν΄λ/λͺ¨λ κ°μ κ΄κ³λ μ§μ μ μ Codexμκ² μ€λͺ ν©λλ€. |
π§ͺ ν μ€νΈ λͺ λ Ή μ§μ | μ: pytest , pnpm test λ± Codexκ° μλμΌλ‘ ν
μ€νΈλ₯Ό μ€νν μ μλλ‘ μ§μ |
π§βπ» μ½λ μ€νμΌ λ° κ·μΉ μλ΄ | μ: "BlackμΌλ‘ ν¬λ§·ν
" , "μ»€λ° λ©μμ§λ Conventional Commits μ¬μ©" λ± |
π 리ν¬μ§ν 리 νμ ννΈ | μ΄λ€ λλ ν 리λ₯Ό 무μν΄μΌ νλμ§, 무μμ λ¨Όμ μ½μ΄μΌ νλμ§ λ± λͺ μ κ°λ₯ |
π μμ κ΅¬μ± (AGENTS.md
)
# AGENTS.md
## Code Style
- Use Black formatter for all Python files.
- Follow PEP8 for naming conventions.
## Testing
- Run `pytest tests/` before submitting a PR.
- Ensure test coverage does not drop.
## Repository Structure
- `src/` contains main application code.
- `scripts/` contains developer utilities.
## PR Guidelines
- PR title format: `[Fix] Short description`
- Include test results in the description.
(μ°Έκ³ ) Codexλ
AGENTS.md
μμ΄λ μλνμ§λ§, μ΄ νμΌμ΄ μμ κ²½μ° ν¨μ¬ λ λμ νμ§μ κ²°κ³Όλ₯Ό μμ±ν©λλ€.
OpenAIλ Codexμ κΈ°λ₯μ μμ°νλ μ€μ λ°λͺ¨λ₯Ό ν΅ν΄ λ€μκ³Ό κ°μ μ¬μ© νλ¦μ μκ°νμ΅λλ€.
μ°Έκ³ λ‘ νμ¬ Plus Userλ€μκ²λ μ€νλμ§ μμμΌλ―λ‘, Demo μμ λ΄μ©μ λ€λ£Ήλλ€.
(Images are from OpenAI Youtube Demo Talk)
preparedness
, codex-cli
μ¬μ©μλ μ¬λ¬ μμ μ λμμ ν λΉν μ μμ΅λλ€:
μμ μ’ λ₯ | μ€λͺ |
---|---|
Ask | μ½λλ² μ΄μ€μ ꡬ쑰λ νΉμ ν¨μμ λν μ€λͺ μμ² |
Code | μ½λ λ΄ λ²κ·Έλ₯Ό μ°Ύμ μμ |
Suggest | μ½λ κ°μ μμ΄λμ΄ μ μ |
Fix Typos | μ€νμ λ° λ¬Έλ² μ€λ₯ μλ μμ |
Codexλ κ° μμ μ λ 립μ μΌλ‘ μ²λ¦¬νλ©°, μ¬λ¬ μμ΄μ νΈλ₯Ό λ³λ ¬λ‘ μ€νν©λλ€.
λ€μμ λ°λͺ¨μμ μνλ μ€μ μμ μ λλ€:
π₯οΈ DEMO 1. μ½λ μ μ§λ³΄μμ± λ° λ²κ·Έ κ°λ₯μ± κ²ν (Maintainability & Bugs)
μ¬μ©μκ° Codexμκ² λ€μκ³Ό κ°μ μμ μ μμ²ν©λλ€:
βμ΄ μ½λλ² μ΄μ€λ₯Ό μ μ§λ³΄μ κ°λ₯νκ³ λ²κ·Έκ° μλλ‘ μ μ§νκ³ μΆμ΅λλ€. TODO μΈμ λΆλΆμμ κ°μ μ΄ νμν λΆλΆμ μ½κ³ , κ·Έ μ΄μ μ ν¨κ» μμ μ μ(task)μ ν΄μ£ΌμΈμ.β
Codexλ μ½λλ² μ΄μ€λ₯Ό λΆμν ν, μ λ’°μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν¬ μ μλ μμμ λ€μκ³Ό κ°μ΄ μλ³ν©λλ€:
β 1. Avoid mutable default arguments
mutable default argument
λ¬Έμ λ₯Ό κ°μ§νκ³ ν¨μ μκ·Έλμ² μμ
κ°κ°μ taskλ€μ΄ κ°λ³ SANDBOXμμ μ€νλκ³ μλ€λ μμ
(μ°Έκ³ ) β μλλ°μ€(Sandbox)λ μΈλΆ μμ€ν μΌλ‘λΆν° 격리λ(λΆλ¦¬λ) νκ²½μ μλ―Ένλ©°, μ½λ μ€ν, μ€ν, λΆμ, ν μ€νΈ λ±μ μμ νκ² μννκΈ° μν΄ μ¬μ©λ©λλ€.
β 2. Correct variable spelling
β 3. Consistent timeout constant
β 4. Ensure recorder writes are flushed
π₯οΈ DEMO 2. νΉμλ¬Έμ νμΌλͺ
μμ /diff
λͺ
λ Ή μ€λ₯ ν΄κ²° μμ² μ¬λ‘
μ¬μ©μκ° Codexμκ² λ€μκ³Ό κ°μ CLI λ²κ·Έ μμ μ μμ²ν©λλ€:
β
/diff
λͺ λ Ήμ΄κ° νΉμλ¬Έμ($
)κ° ν¬ν¨λ νμΌλͺ μ μ²λ¦¬νμ§ λͺ»ν΄ μ€λ₯κ° λ°μν©λλ€. μ΄λ₯Ό ν΄κ²°ν΄μ£ΌμΈμ.β
- μ:
'a$b.txt'
νμΌμ λ§λ λ€/diff
μ€ν μ μλ¬ λ°μ
Codexλ CLI νκ²½μμ λ¬Έμ λ₯Ό μ¬ννκΈ° μν΄ μλλ°μ€(격리λ 컨ν μ΄λ νκ²½)λ₯Ό μμνκ³ , μλμ κ³Όμ μ ν΅ν΄ λ¬Έμ λ₯Ό λΆμν©λλ€:
β 1. μ¬ν μ€ν¬λ¦½νΈ μλ μμ± λ° μ€ν μλ
/tmp/repro.ts
μ TypeScript μ€ν¬λ¦½νΈλ₯Ό μμ±
$
κ° ν¬ν¨λ νμΌ 'a$b.txt'
λ₯Ό μΆκ°get-diff.js
λͺ¨λ κ²½λ‘ λ¬Έμ λ°μ β Codexκ° μμΈ νμ
ν λ€μ λ¨κ³λ‘ μ§νβ 2. μ€λ₯ μμ λ° λͺ¨λ ν¨μΉ
ν΅μ¬ μμ : child_process
μμ execFileSync
λ₯Ό λͺ
μμ μΌλ‘ μ¬μ©νμ¬ μ
Έμ μ°ν
execSync()
λ $
λ₯Ό μ
Έ λ³μλ‘ μ€μΈν¨execFileSync()
λ λ¬Έμμ΄μ κ·Έλλ‘ μ λ¬νλ―λ‘ νΉμλ¬Έμ μμ λ³κ²½μ¬ν μ μ© ν regression testκΉμ§ μμ± μλ£
β 3. ν μ€νΈ μλν λ° κ²μ¦ μλ£
pnpm test
λ‘ μλ‘μ΄ ν
μ€νΈ ν΅κ³Ό νμΈ$
λ¬Έμκ° ν¬ν¨λ νμΌλ diff κ²°κ³Όμ μ μμ μΌλ‘ ν¬ν¨λλ κ²μ νμΈβ 4. Git λ‘κ·Έ μ 리 λ° PR μ€λΉ μλ£
Codexλ μμ λ΄μ©μ 컀λ°νκ³ μμ½:
get-diff.ts
: κΈ°λ₯ μμ get-diff-special-chars.test.ts
: νκ· ν
μ€νΈ μΆκ°μ»€λ° λ©μμ§:
"fix diff for special chars"
2 files changed, 40 insertions(+), 6 deletions(-)
π§ Codexλ μμ μ΄ μ μν μμ μ μ€μ€λ‘ μ€ννκ³ , ν μ€νΈνκ³ , PRκΉμ§ μμ±ν μ μμ΅λλ€.
Codexλ μμ μ μλ£ν ν λ€μ μ 보λ₯Ό μ 곡ν©λλ€:
μ¬μ©μλ κ²°κ³Όλ₯Ό κ²ν ν ν λ³ν©νκ±°λ, λ‘컬μμ λ€μ ν μ€νΈν μ μμ΅λλ€.
codex-1
μ΄ λ λμ μ νλλ₯Ό 보μμ±λ₯ν μ 리
νλͺ© | μλ―Έ |
---|---|
π Codex-1 μ νλ | SWE λ²€μΉλ§ν¬ κΈ°μ€ μ΅κ³ μ±λ₯ |
π§ Reasoning λ₯λ ₯ | λ λμ λ¬Έλ§₯κ³Ό λ 볡μ‘ν μμ μμ μμ μ μΆλ‘ κ°λ₯ |
π§ͺ μ ν κΈ°λ μμ€ | μ€μ μ 무 μμ€μ λ¬Έμ ν΄κ²° λ₯λ ₯ ν보 νμΈλ¨ |
Codexλ ν΄λΌμ°λ κΈ°λ° μμ΄μ νΈ μΈμλ λ‘컬 CLI μμ΄μ νΈλ₯Ό μ 곡ν©λλ€.
Codex CLI: ν°λ―Έλ κΈ°λ° μΈν°νμ΄μ€
codex-mini-latest
: λΉ λ₯Έ λ°μ μλμ μ΅μ νλ κ²½λ λͺ¨λΈ
ChatGPT κ³μ μΌλ‘ κ°νΈ λ‘κ·ΈμΈ λ° API μλ μ€μ
μκΈ:
Codexλ λ€μκ³Ό κ°μ λ°©μμΌλ‘ ν¬λͺ μ±κ³Ό μμ μ±μ ν보ν©λλ€:
Codexλ λ¨μν μλνλ₯Ό λμ΄μ, κ°λ°μμ μμ°μ±μ κ·Ήλννλ λꡬμ λλ€:
μμ§ Plus μ μ λ μ μ΄λ¦°κ±° λ€μ νμΈ π₯Ή (https://chatgpt.com/codex)
Codexλ λ¨μ§ λΉ λ₯Έ μ½λ μμ±κΈ°κ° μλλλ€.
ν¨κ» μΌνλ λλ£, λΉλκΈ° μμ
μ²λ¦¬μ, μ½λ νμ§μ 보μ₯νλ κ΄λ¦¬μμ
λλ€.
π¬ κ°λ°μκ° μμ΄λμ΄λ§ μ£Όλ©΄ Codexλ:
μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€ π§Έ