Tony Lee
Tony Lee
← λͺ©λ‘μœΌλ‘œ
4 λΆ„ μ†Œμš” 2026

πŸ”€ 병렬 μ—μ΄μ „νŠΈλ₯Ό 잘 κ΄€λ¦¬ν•˜λ €λ©΄ κ²©λ¦¬ν•˜κ³  κΈ°λ‘ν•˜κ³  ν•©μΉ˜λŠ” ꡬ쑰가 λ¨Όμ €μž…λ‹ˆλ‹€

Blog version of a 2026-04-13 LinkedIn note β€” same claims, cleaned structure for reading.

μ—μ΄μ „νŠΈ μ—¬λŸ¬ 개λ₯Ό λ™μ‹œμ— λŒλ¦¬λŠ” 게 항상 쒋은 건 μ•„λ‹™λ‹ˆλ‹€. 혼자 μ§‘μ€‘ν•΄μ„œ ν•œ μž‘μ—…μ„ λλ‚΄λŠ” 게 더 λΉ λ₯Έ κ²½μš°λ„ λ§Žμ•„μš”.

κ·ΈλŸ°λ°λ„ 병렬 μ—μ΄μ „νŠΈμ— μ‹œκ°„μ„ μ“°λŠ” μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ 개발 μ›Œν¬ν”Œλ‘œμš°κ°€ κ°€λŠ” λ°©ν–₯에 제일 가깝닀고 λŠκΌˆκ±°λ“ μš”.

아직 맀번 λ°°μš°λŠ” 쀑이고 μ‚½μ§ˆλ„ 많이 ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ κ³Όμ •μ—μ„œ 반볡적으둜 νš¨κ³Όκ°€ μžˆμ—ˆλ˜ ꡬ쑰λ₯Ό 두 κ°€μ§€ 경둜둜 λ‚˜λˆ μ„œ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

1️⃣ Parallel Path. μ‚¬λžŒμ΄ κ°œμž…ν•˜λ©° λ°©ν–₯을 μž‘μ•„μ£ΌλŠ” 경둜

이 κ²½λ‘œλŠ” Plan β†’ Spawn β†’ Gate β†’ Merge μˆœμ„œλ‘œ μ›€μ§μž…λ‹ˆλ‹€. tmux μ•ˆμ—μ„œ interactive worker λ₯Ό λ„μš°κ³  μ‚¬λžŒμ΄ 쀑간에 λ°©ν–₯을 μž‘μ•„μ€„ 수 μžˆλŠ” κ΅¬μ‘°μ˜ˆμš”.

β€’ Isolate. agent_workers.py 에 μž‘μ—… 이름과 base λΈŒλžœμΉ˜μ™€ μ—μ΄μ „νŠΈ CLI λ₯Ό μ§€μ •ν•˜λ©΄ worktree 생성뢀터 μ—μ΄μ „νŠΈ μ‹€ν–‰κΉŒμ§€ ν•œλ²ˆμ— 끝남. one branch and worktree per bounded task κ°€ 원칙 β€’ Steer. μ—μ΄μ „νŠΈκ°€ λ§‰νžˆλ©΄ tmux send-keys 둜 후속 ν”„λ‘¬ν”„νŠΈλ₯Ό 보냄. λ―Έμ™„λ£Œ worker λ₯Ό λκΉŒμ§€ λ°€μ–΄μ£ΌλŠ” 게 핡심 β€’ Control. λͺ¨λ“  worker λŠ” changelog ν•­λͺ©μ΄λ‚˜ fragment λ₯Ό 남겨야 함. ν†΅κ³Όν•œ μž‘μ—…λ§Œ starting branch 둜 merge 되고 μ‹€νŒ¨ν•œ 건 blocker report κ°€ 생성

ν•œ λΈŒλžœμΉ˜μ—μ„œ μ—μ΄μ „νŠΈ 2개λ₯Ό 돌린 적이 μžˆμŠ΅λ‹ˆλ‹€. 10λΆ„ λ§Œμ— λ‘˜ λ‹€ 같은 μ»΄ν¬λ„ŒνŠΈλ₯Ό μˆ˜μ •ν•΄μ„œ diff κ°€ κΌ¬μ˜€μ–΄μš”. worktree 격리 없이 병렬을 돌리면 κ²°κ΅­ μ‚¬λžŒμ΄ μΆ©λŒμ„ μˆ˜μŠ΅ν•˜λŠλΌ 더 λŠλ €μ§‘λ‹ˆλ‹€. Spawn λ‹¨κ³„μ—μ„œ scope λ₯Ό 쒁게 μž‘μ•„μ•Ό Gate μ—μ„œ 리뷰할 λΆ„λŸ‰μ΄ μ€„μ–΄λ“€μ–΄μš”.

2️⃣ Deterministic Path. μ‚¬λžŒ 없이 반볡 κ°€λŠ₯ν•œ 경둜

Parallel Path κ°€ μ‚¬λžŒμ˜ κ°œμž…μ„ μ „μ œλ‘œ ν•œλ‹€λ©΄ 이μͺ½μ€ μ •λ°˜λŒ€μž…λ‹ˆλ‹€.

Preflight β†’ Backups β†’ Logs β†’ Pass Gate μˆœμ„œλ‘œ 움직이고 μ‚¬λžŒμ΄ 쀑간에 끼어듀지 μ•Šμ•„μš”. backup μ΄λ‚˜ 쑰건 κ²€μ¦μ΄λ‚˜ 둜그 기둝처럼 맀번 같은 κ²°κ³Όκ°€ λ‚˜μ™€μ•Ό ν•˜λŠ” μž‘μ—…μ— μ“°λŠ” κ²½λ‘œμž…λ‹ˆλ‹€.

β€’ Repeat. JSON plan 이 Bash λ‚˜ Python 루프λ₯Ό λ Œλ”λ§. render_worker_loop.py 에 config 파일과 언어와 좜λ ₯ 경둜λ₯Ό μ§€μ •ν•˜λ©΄ 결정둠적 μŠ€ν¬λ¦½νŠΈκ°€ 생성됨 β€’ Fail. preflight λ‹¨κ³„μ—μ„œ backup 이 μ‹€νŒ¨ν•˜λ©΄ λͺ¨λ“  worker 의 μ‹œμž‘ 자체λ₯Ό 차단. 반μͺ½μ§œλ¦¬ 싀행을 μ›μ²œ λ΄‰μ‡„ν•˜λŠ” 섀계 β€’ Inspect. λ‘€λ°± λͺ…λ Ήμ–΄λŠ” 기둝만 해두고 μžλ™ μ‹€ν–‰ν•˜μ§€ μ•ŠμŒ. β€œrecorded, not auto-fired” κ°€ 이 경둜의 핡심 원칙

두 경둜의 ꡬ뢄 기쀀은 κ°„λ‹¨ν•©λ‹ˆλ‹€.

μ—μ΄μ „νŠΈμ—κ²Œ 쀑간에 λ°©ν–₯을 ν‹€μ–΄μ€˜μ•Ό ν•˜λ©΄ Parallel Path 둜 tmux worker λ₯Ό μ“°κ³ , 맀번 λ™μΌν•˜κ²Œ λŒμ•„κ°€μ•Ό ν•˜λ©΄ Deterministic Path 둜 Python μ΄λ‚˜ Bash 루프λ₯Ό μ”λ‹ˆλ‹€.

직접 μ¨λ³΄λ‹ˆ λ³΄ν†΅μ˜ 경우 κΈ°λŠ₯ κ°œλ°œμ€ Parallel Path κ°€ 맞고 μ„œλ²„ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄λ‚˜ DB λ°±μ—… 같은 운영 μž‘μ—…μ€ Deterministic Path κ°€ λ§žμ•˜μ–΄μš”.

3️⃣ Changelog Gate. 두 경둜 λͺ¨λ‘λ₯Ό κ΄€ν†΅ν•˜λŠ” ν†΅μ œ μž₯치

μ–΄λ–€ 경둜λ₯Ό μ“°λ“  merge 전에 λ°˜λ“œμ‹œ κ±°μΉ˜λŠ” 관문이 changelog gate μž…λ‹ˆλ‹€. 운영 원칙은 β€œChangelog first, merge back last” μ˜ˆμš”.

β€’ λͺ¨λ“  worker κ°€ changelog ν•­λͺ©μ΄λ‚˜ fragment λ₯Ό 남기도둝 κ°•μ œ. 기둝 μ—†μœΌλ©΄ merge λΆˆκ°€ β€’ diff λ¦¬λ·°λŠ” μ‚¬λžŒμ΄ ν•˜λ˜ μ—μ΄μ „νŠΈκ°€ ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € ν†΅κ³Όν•œ κ²ƒλ§Œ 리뷰 λŒ€μƒμ— 올림 β€’ ν†΅κ³Όν•œ μž‘μ—…μ€ starting branch 둜 λŒμ•„κ°€κ³  μ‹€νŒ¨ν•œ 건 blocker report 에 μ΄μœ κ°€ 기둝

changelog gate λ„μž… μ „μ—λŠ” merge ν›„ 버그λ₯Ό μ°ΎλŠ” 데 μ—μ΄μ „νŠΈκ°€ μ½”λ“œ μ§œλŠ” μ‹œκ°„λ³΄λ‹€ 였래 κ±Έλ ΈμŠ΅λ‹ˆλ‹€. gate λ₯Ό λ„£κ³  λ‚˜μ„œμ•Ό λ³‘λ ¬μ˜ 속도가 μ‹€μ œ μƒμ‚°μ„±μœΌλ‘œ μ „ν™˜λμ–΄μš”.

4️⃣ Harness Converter. μ—μ΄μ „νŠΈλ₯Ό 바꿔도 μ›Œν¬ν”Œλ‘œμš°λŠ” κ·ΈλŒ€λ‘œ μœ μ§€

Recursive Harness Converter λŠ” νŠΉμ • μ—μ΄μ „νŠΈ CLI 에 μ’…μ†λ˜μ§€ μ•Šκ²Œ λ§Œλ“œλŠ” λ³€ν™˜κΈ°μž…λ‹ˆλ‹€. generic defaults λ₯Ό target agent CLI 에 λ§€ν•‘ν•˜λŠ” λ°©μ‹μ΄μ—μš”.

β€’ inspect help. λŒ€μƒ μ—μ΄μ „νŠΈ CLI 의 μ˜΅μ…˜κ³Ό 기본값을 μžλ™ 탐색 β€’ convert. docs 와 scripts 와 examples 와 tests λ₯Ό ν•œλ²ˆμ— λ³€ν™˜ β€’ log. conversion report 와 changelog status 와 merge-back blocker λͺ©λ‘μ΄ μžλ™ 생성. λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 톡합 ν…ŒμŠ€νŠΈλ₯Ό edge case ν¬ν•¨ν•΄μ„œ κ΄‘λ²”μœ„ν•˜κ²Œ λŒλ¦¬λŠ” κ²ƒκΉŒμ§€κ°€ converter 의 λ²”μœ„

ν˜„μž¬μ˜ μ—μ΄μ „νŠΈ λ„κ΅¬λŠ” 6κ°œμ›”μ΄λ©΄ λ§Žμ€ 것이 λ°”λ€λ‹ˆλ‹€. Claude Code λ₯Ό μ“°λ‹€κ°€ Codex 둜 κ°ˆμ•„νƒˆ 수 있고 κ·Έ λ°˜λŒ€λ„ κ°€λŠ₯ν•΄μ•Ό ν•΄μš”. κ·Έλ•Œ μ›Œν¬ν”Œλ‘œμš° 전체λ₯Ό λ‹€μ‹œ μ§œλŠ” 게 μ•„λ‹ˆλΌ harness μ„€μ • ν•˜λ‚˜λ§Œ λ°”κΎΈλ©΄ λ˜λŠ” ꡬ쑰가 ν•„μš”ν•©λ‹ˆλ‹€.

κ²°κ΅­ μ—μ΄μ „νŠΈλ₯Ό λͺ‡ 개 λŒλ¦¬λŠλƒλ³΄λ‹€ 각 μ—μ΄μ „νŠΈκ°€ 뭘 ν–ˆκ³  μ–΄λ””μ„œ λ§‰ν˜”λŠ”μ§€ changelog 와 blocker report 둜 읽을 수 μžˆλŠλƒκ°€ μ€‘μš”ν•©λ‹ˆλ‹€. μž‘μ—…μ„ κ²©λ¦¬ν•˜κ³  κ²°κ³Ό μƒνƒœλ₯Ό μ „λ‹¬ν•˜λŠ” ꡬ쑰만 있으면 μ—μ΄μ „νŠΈκ°€ 3κ°œλ“  10κ°œλ“  같은 λ°©μ‹μœΌλ‘œ 관리할 수 μžˆμ–΄μš”.

병렬 μ—μ΄μ „νŠΈκ°€ κΌ­ μ •λ‹΅μΈμ§€λŠ” 아직 λͺ¨λ¦…λ‹ˆλ‹€. λ‹€λ§Œ 이 λ°©ν–₯이 κ²°κ΅­ AI κ°€ μ§€ν–₯ν•˜λŠ” λ°©ν–₯이지 μ•Šμ„κΉŒ ν•˜λŠ” λ§ˆμŒμ— μ˜€λŠ˜λ„ 계속 λ„μ „ν•©λ‹ˆλ‹€.

λ‰΄μŠ€λ ˆν„° κ΅¬λ…ν•˜κΈ°

μ΅œμ‹  AI에 λŒ€ν•œ μΈμ‚¬μ΄νŠΈλ₯Ό λ°›μ•„λ³΄μ„Έμš”.