diff --git a/00_Raw/Agent-Computer Interfaces (ACI).md b/00_Raw/Agent-Computer Interfaces (ACI).md deleted file mode 100644 index 1fa97c72..00000000 --- a/00_Raw/Agent-Computer Interfaces (ACI).md +++ /dev/null @@ -1,67 +0,0 @@ -# [[Agent-Computer Interfaces (ACI)]] - -## ๐Ÿ“Œ Brief Summary -**Agent-Computer Interface (ACI)**๋Š” AI ์—์ด์ „ํŠธ๊ฐ€ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทœ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค(Agent Harness)๊ฐ€ ์„ค๊ณ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ์„ธํŠธ, ์ˆ˜์‹ ํ•˜๋Š” ์ƒํƒœ ํ‘œํ˜„, ํŒŒ์‹ฑํ•ด์•ผ ํ•˜๋Š” ์—๋Ÿฌ ํฌ๋งท ๋“ฑ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค [2]. ACI์˜ ์„ค๊ณ„๋Š” ๊ธฐ์ดˆ ๋ชจ๋ธ(Underlying model)์˜ ํ’ˆ์งˆ๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์—์ด์ „ํŠธ์˜ ๊ณ„ํš ์„ฑ๋Šฅ๊ณผ ์—ญ๋Ÿ‰์„ ๊ฒฐ์ •์ง“๋Š” ํ•ต์‹ฌ ์š”์†Œ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค [1, 2]. - -## ๐Ÿ“– Core Content - -* **ํ•˜๋„ค์Šค์˜ ๊ณ ์œ  ๊ถŒํ•œ ๋ฐ ์ฑ…์ž„:** ACI๋Š” ์ „์ ์œผ๋กœ ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค์— ์˜ํ•ด ์„ค๊ณ„ ๋ฐ ํ†ต์ œ๋ฉ๋‹ˆ๋‹ค [2]. ์—์ด์ „ํŠธ ๋ชจ๋ธ ์ž์ฒด๋Š” ์ž์‹ ์—๊ฒŒ ์ฃผ์–ด์ง„ ๋ช…๋ น์–ด ์„ธํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์ˆ˜์‹ ํ•˜๋Š” ์ƒํƒœ ํ‘œํ˜„์„ ์žฌ์„ค๊ณ„ํ•˜๊ฑฐ๋‚˜, ์—๋Ÿฌ ํฌ๋งท์„ ๋ฐ”๊ฟ€ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค [2]. ๋”ฐ๋ผ์„œ, ACI๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋ธ ์ž์ฒด์˜ ๊ธฐ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•˜๋„ค์Šค ์—”์ง€๋‹ˆ์–ด๋ง์˜ ์ฃผ์š” ์ฑ…์ž„์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค [2, 3]. -* **์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ๊ฒฐ์ •์  ์˜ํ–ฅ:** SWE-agent์˜ ์—ฐ๊ตฌ ๋“ฑ์—์„œ ์ž…์ฆ๋˜์—ˆ๋“ฏ, ACI ์„ค๊ณ„๋Š” ์—์ด์ „ํŠธ ์—ญ๋Ÿ‰์˜ '1์ฐจ ๊ฒฐ์ • ์š”์ธ(first-order determinant)'์ž…๋‹ˆ๋‹ค [1]. ๋ถ€์‹คํ•˜๊ฒŒ ์„ค๊ณ„๋œ ACI๋Š” ๋ชจ๋ธ์˜ ์ถ”๋ก  ์‹คํŒจ๊ฐ€ ์•„๋‹ˆ๋ผ, ์˜ฌ๋ฐ”๋ฅธ ์ถ”๋ก ์„ ๊ตฌ์กฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ฆ์œผ๋กœ์จ ๋†’์€ ์—๋Ÿฌ์œจ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [1, 4]. ์ฆ‰, ACI์˜ ๊ตฌ์กฐ์  ์„ค๊ณ„๊ฐ€ ๋ชจ๋ธ ์ž์ฒด์˜ ์—ญ๋Ÿ‰๋ณด๋‹ค ๊ณ„ํš ์„ฑ๋Šฅ์— ๋” ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค [2]. -* **ํ•„์ˆ˜ ์„ค๊ณ„ ์š”๊ตฌ์‚ฌํ•ญ:** ํšจ๊ณผ์ ์ธ ACI๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ํ•˜๋„ค์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์†Œ๋“ค์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3]. - * ๊ฐ ํ–‰๋™ ์ดํ›„์˜ **๋ชจํ˜ธํ•˜์ง€ ์•Š์€ ๋ช…ํ™•ํ•œ ์ƒํƒœ ํ‘œํ˜„(unambiguous state representations)** ์ œ๊ณต. - * ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์‹คํŒจ์™€ ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹คํŒจ๋ฅผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” **๊ตฌ์กฐํ™”๋˜๊ณ  ํŒŒ์‹ฑ ๊ฐ€๋Šฅํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€(structured, parseable error messages)** ๋ฐ˜ํ™˜. - * ๋ชจ๋ธ์ด ์œ ํšจํ•œ ํ–‰๋™ ์ˆœ์„œ๋ฅผ ์ถ”์ธกํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•˜๋Š” **์ตœ์†Œํ•œ์ด๋˜ ์™„์ „ํ•œ ๋ช…๋ น์–ด ์–ดํœ˜(minimal but complete command vocabulary)** ๋…ธ์ถœ. - * ๋Œ์ดํ‚ฌ ์ˆ˜ ์—†๋Š” ํ–‰๋™์ด ์‹คํ–‰๋˜๊ธฐ ์ „์—, ๊ณ„ํš ์Šน์ธ ๊ฒŒ์ดํŠธ(plan approval gate)๋ฅผ ํ†ตํ•ด ์ ๊ฒ€๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” **๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๊ณ„ํš ํฌ๋งท(checkable plan formats)** ์ œ์‹œ. -* **๋„๋ฉ”์ธ ํŠนํ™” ๋ฐ ๊ถŒํ•œ ์ œ์–ด:** ACI๋Š” ๋ชจ๋ธ์— ๋ฒ”์šฉ์ ์ธ bash ์…ธ์„ ๊ทธ๋Œ€๋กœ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹ , ๋ชฉ์ ์— ๋งž๊ฒŒ ํŠนํ™”๋œ(purpose-built) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5]. ์˜ˆ๋ฅผ ๋“ค์–ด SWE-agent์˜ ACIface ๋ชจ๋ธ์€ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์ž‘์—…์— ์ ์ ˆํ•˜๋„๋ก ํŒŒ์ผ ๋ทฐ์–ด, ๊ฒ€์ƒ‰, ํŽธ์ง‘ ๋„๊ตฌ๋ฅผ ๋ช…์‹œ์  ์ƒํƒœ ์ œ์•ฝ๊ณผ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [5, 6]. ์ด๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ „์ฒด ๋„๊ตฌ ์นดํƒˆ๋กœ๊ทธ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ , ์‹คํ–‰ ์ „ ์—ญ๋Ÿ‰์„ ์ œํ•œ(pre-execution capability restriction)ํ•˜์—ฌ ์•ˆ์ „์„ฑ์„ ๋†’์ด๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค [6, 7]. - -## โš–๏ธ Trade-offs & Caveats - -* **์ธํ„ฐํŽ˜์ด์Šค ์„ธ๊ธˆ(Interface Tax)์˜ ๋ฐœ์ƒ ์œ„ํ—˜:** ACI๊ฐ€ ๋ชจํ˜ธํ•œ ์ƒํƒœ ํ‘œํ˜„์ด๋‚˜ ๋ถˆ์ถฉ๋ถ„ํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ž˜๋ชป ์„ค๊ณ„๋  ๊ฒฝ์šฐ, ๋ชจ๋ธ์˜ ๊ณ„ํš ์˜ˆ์‚ฐ(planning budget)์— ์ด๋ฅธ๋ฐ” '์ธํ„ฐํŽ˜์ด์Šค ์„ธ๊ธˆ'์ด ๋ถ€๊ณผ๋ฉ๋‹ˆ๋‹ค [2]. ๋ชจ๋ธ์€ ์‹ค์ œ ๋‹น๋ฉดํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ์ถ”๋ก ํ•˜๋Š” ๋Œ€์‹ , ํ•˜๋„ค์Šค๊ฐ€ ์–ด๋–ค ์˜๋ฏธ๋กœ ์ด๋Ÿฌํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ–ˆ๋Š”์ง€ ์œ ์ถ”ํ•˜๋Š” ๋ฐ ์œ ํ•œํ•œ ํ† ํฐ๊ณผ ์—ฐ์‚ฐ ์ž์›์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [2]. -* **ํŠนํ™”(Specialization) vs. ๋ฒ”์šฉ์„ฑ(Generality)์˜ ๊ท ํ˜•:** ๋„๋ฉ”์ธ์— ํŠนํ™”๋œ ์ œํ•œ์  ์…ธ ์ธํ„ฐํŽ˜์ด์Šค(์˜ˆ: ACIface)๋ฅผ ๋…ธ์ถœํ•˜๋ฉด ๋ณด์•ˆ๊ณผ ์ •ํ™•๋„๋Š” ๋†’์•„์ง€์ง€๋งŒ, ๋ชจ๋ธ์ด ์›๋ž˜ ํ•˜๋„ค์Šค์— ์กด์žฌํ•˜๋Š” ์ „์ฒด ๋„๊ตฌ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ์ œ์•ฝ์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค [6]. ๋”ฐ๋ผ์„œ ACI๋Š” ์—์ด์ „ํŠธ์˜ ์ž ์žฌ๋ ฅ์„ ์ œํ•œํ•˜์ง€ ์•Š๋„๋ก "์ตœ์†Œํ•œ์ด๋˜ ์™„์ „ํ•œ(minimal but complete)" ๋ช…๋ น์–ด ์„ธํŠธ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊นŒ๋‹ค๋กœ์šด ์„ค๊ณ„ ๊ท ํ˜•์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค [3]. -* **ํ•˜๋„ค์Šค์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ์ข…์†:** ๋ชจ๋ธ์€ ACI์˜ ๊ฒฐํ•จ(์˜ˆ: ์ž˜๋ชป๋œ ์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ ํ˜•์‹, ๋ˆ„๋ฝ๋œ ๋„๊ตฌ ๋ช…๋ น์–ด)์„ ์Šค์Šค๋กœ ์šฐํšŒํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค [2]. ์ด๋Š” ์—์ด์ „ํŠธ์˜ ์„ฑ๊ณต ์—ฌ๋ถ€๊ฐ€ ์ „์ ์œผ๋กœ ํ•˜๋„ค์Šค๋ฅผ ๊ฐœ๋ฐœํ•œ ์—”์ง€๋‹ˆ์–ด์˜ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„ ์—ญ๋Ÿ‰์— ์ข…์†๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [2]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -* [[Agent Harness]] - * ์—ฐ๊ฒฐ ์ด์œ : ACI๋Š” ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค๊ฐ€ ์ „์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฏ€๋กœ ํ•˜๋„ค์Šค์˜ ํ•ต์‹ฌ ์ฑ…์ž„ ์˜์—ญ์— ์†ํ•ฉ๋‹ˆ๋‹ค [2]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ง€๋Šฅํ˜• ๋ชจ๋ธ์ด ์•„๋‹Œ ํ•˜๋„ค์Šค ์ธํ”„๋ผ๊ฐ€ ์–ด๋–ป๊ฒŒ ์—์ด์ „ํŠธ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ํ–‰๋™์„ ์ œ์–ดํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”์ง€ ๊ทผ๋ณธ์ ์ธ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. -* [[Execution Environment]] - * ์—ฐ๊ฒฐ ์ด์œ : ACI๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทœ์ •ํ•˜๋Š” ์ ‘์ (Interface)์ž…๋‹ˆ๋‹ค [1]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„๊ฐ€ ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ๋‚˜ ์ƒŒ๋“œ๋ฐ•์Šค ๊ฐ™์€ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์—์ด์ „ํŠธ์˜ ์„ฑ๋Šฅ ๋ฐ ์—๋Ÿฌ์œจ์— ๋ฏธ์น˜๋Š” ๋…๋ฆฝ์ ์ธ ์˜ํ–ฅ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ์„ค๊ณ„ ์›์น™ ๋ฐ ์ œ์•ฝ] -* [[Interface Tax]] - * ์—ฐ๊ฒฐ ์ด์œ : ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ๋ถˆ์ถฉ๋ถ„ํ•œ ACI ์„ค๊ณ„๋Š” ์—์ด์ „ํŠธ์˜ ๊ณ„ํš ์˜ˆ์‚ฐ(planning budget)์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” '์ธํ„ฐํŽ˜์ด์Šค ์„ธ๊ธˆ'์„ ๋ถ€๊ณผํ•ฉ๋‹ˆ๋‹ค [2]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„์˜ ๊ฒฐํ•จ์ด ์–ด๋–ป๊ฒŒ ์—์ด์ „ํŠธ์˜ ์ถ”๋ก  ํ† ํฐ๊ณผ ์‹œ์Šคํ…œ ์ž์›(์˜ˆ์‚ฐ)์„ ๊ณ ๊ฐˆ์‹œํ‚ค๋Š”์ง€ ๊ฒฝ์ œ์ , ์„ฑ๋Šฅ์  ์ธก๋ฉด์—์„œ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. -* [[Capability Restriction]] - * ์—ฐ๊ฒฐ ์ด์œ : ACI ์„ค๊ณ„(์˜ˆ: SWE-agent์˜ ACIface)๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ „์ฒด ๋„๊ตฌ๋ฅผ ๋‹ค ๋ณด๋„๋ก ๋‘๋Š” ๋Œ€์‹  ์ž‘์—…์— ์ ํ•ฉํ•œ ์ œํ•œ๋œ ์…ธ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋…ธ์ถœํ•˜๋„๋ก ์ œ์•ฝ์„ ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค [6]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ•˜๋„ค์Šค๊ฐ€ ์‹คํ–‰ ์ „ ๋‹จ๊ณ„(pre-execution)์—์„œ ์–ด๋–ป๊ฒŒ ์—์ด์ „ํŠธ์˜ ํ–‰๋™ ๋ฐ˜๊ฒฝ์„ ์ขํ˜€ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ  ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 7]. - -### Deeper Research Questions - -* ๋ฒ”์šฉ bash ์…ธ ๋Œ€์‹  ๋„๋ฉ”์ธ์— ํŠนํ™”๋œ ACI๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, "์ตœ์†Œํ•œ์ด๋˜ ์™„์ „ํ•œ(minimal but complete)" ๋ช…๋ น์–ด ์–ดํœ˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ •๋Ÿ‰์  ํ‰๊ฐ€ ๊ธฐ์ค€์ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€? -* ๋ชจํ˜ธํ•œ ์ƒํƒœ ํ‘œํ˜„๊ณผ ๋ถˆ์ถฉ๋ถ„ํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ถ€๊ณผํ•˜๋Š” '์ธํ„ฐํŽ˜์ด์Šค ์„ธ๊ธˆ(Interface Tax)'์„ ๋ชจ๋ธ์˜ ์ถ”๋ก  ํ† ํฐ ๋ฐ ์‹œ๊ฐ„ ๋น„์šฉ ์ธก๋ฉด์—์„œ ์–ด๋–ป๊ฒŒ ์ •๋Ÿ‰์ ์œผ๋กœ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -* ACI์˜ ๊ฐ•๋ ฅํ•œ ๊ถŒํ•œ ๋ฐ ๋„๊ตฌ ๋…ธ์ถœ ์ œ์•ฝ(์˜ˆ: ACIface ๋ชจ๋ธ)์ด ์—์ด์ „ํŠธ์˜ ์ž์œจ์  ํƒ์ƒ‰(Autonomous exploration) ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ฐฝ์˜์„ฑ์— ๋ฏธ์น˜๋Š” ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์–ด๋–ป๊ฒŒ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -* ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์‹คํŒจ(recoverable)์™€ ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹คํŒจ(unrecoverable)๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ACI์˜ ์—๋Ÿฌ ํฌ๋งท ์„ค๊ณ„๊ฐ€ ์—์ด์ „ํŠธ์˜ ์ž์ฒด ์ˆ˜์ •(Self-correction) ์‚ฌ์ดํด ์†๋„์— ๋ฏธ์น˜๋Š” ๊ตฌ์ฒด์ ์ธ ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? -* ๋‹ค์–‘ํ•œ ๋ชจ๋ธ ์ œ๊ณต์ž(OpenAI, Anthropic ๋“ฑ)์˜ ์ƒ์ดํ•œ ๊ธฐ๋Šฅ, ์ปจํ…์ŠคํŠธ ์ œํ•œ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ทœ๊ฒฉ์„ ๋ชจ๋‘ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ACI ์„ค๊ณ„๋Š” ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€? - -### Practical Application Contexts - -* **Implementation:** SWE-agent์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•  ๋•Œ, ๋ชจ๋ธ์ด ์ž„์˜์˜ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋‘์ง€ ์•Š๊ณ , ํŒŒ์ผ ๋ทฐ์–ด๋‚˜ ๊ฒ€์ƒ‰ ๋„๊ตฌ ๋“ฑ ๋ชฉ์ ์— ๋งž๊ฒŒ ํŠนํ™”๋œ(purpose-built) ์ œํ•œ์  ์…ธ ์ธํ„ฐํŽ˜์ด์Šค(ACI)๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์—์ด์ „ํŠธ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค [5, 6]. -* **System Design:** ์—์ด์ „ํŠธ๊ฐ€ ๋Œ์ดํ‚ฌ ์ˆ˜ ์—†๋Š” ํŒŒ๊ดด์ ์ธ ํ–‰๋™์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—, ์ธ๊ฐ„์ด๋‚˜ ์ •์ฑ… ๊ฒŒ์ดํŠธ๊ฐ€ ๊ณ„ํš์„ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช…ํ™•ํ•˜๊ณ  ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๊ณ„ํš ํฌ๋งท(checkable plan formats)์„ ์ƒ์„ฑํ•˜๋„๋ก ACI๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [3]. -* **Operation / Maintenance:** ๋ชจ๋ธ์ด ์ž‘์—… ์‹คํŒจ ์ด์œ ๋ฅผ ๋ช…ํ™•ํžˆ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์‹œ์Šคํ…œ ๋กœ๊ทธ์—์„œ ๋‹จ์ˆœํžˆ ์›์‹œ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๋Š” ๋Œ€์‹  ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์—๋Ÿฌ์™€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์—๋Ÿฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด ํŒŒ์‹ฑ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐํ™”๋œ ํ˜•ํƒœ์˜ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋กœ๊น… ์‹œ์Šคํ…œ์„ ์œ ์ง€๋ณด์ˆ˜ํ•ฉ๋‹ˆ๋‹ค [3]. -* **Learning Path:** ์—์ด์ „ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋ชจ๋ธ์˜ ํ”„๋กฌํ”„ํŠธ๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ๋งŒ ๋ชฐ๋‘ํ•˜์ง€ ์•Š๊ณ , ๋ชจ๋ธ์ด ํ™˜๊ฒฝ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” '์ ‘์ (Interface)'์˜ ์„ค๊ณ„๊ฐ€ ์—์ด์ „ํŠธ์˜ ์„ฑ๋Šฅ๊ณผ ์—๋Ÿฌ์œจ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ๋ณ€์ˆ˜์ž„์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [1, 2]. -* **My Project Relevance:** ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์—์„œ ์—์ด์ „ํŠธ์— ์ž์œจ์„ฑ์„ ๋ถ€์—ฌํ•  ๋•Œ, ๋ฒ”์šฉ ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœํ•˜๋Š” ๋Œ€์‹  ์—„๊ฒฉํ•œ ์ œ์•ฝ๊ณผ ์ƒํƒœ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ACI ๊ณ„์ธต์„ ๋„์ž…ํ•˜์—ฌ ์—์ด์ „ํŠธ์˜ ๋ฌดํ•œ ๋ฃจํ”„, ํ™˜๊ฐ, ๊ถŒํ•œ ๋‚จ์šฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 3, 5]. - -### Adjacent Topics - -* [[Context Engineering]] - * ํ™•์žฅ ๋ฐฉํ–ฅ: ACI๊ฐ€ ์—์ด์ „ํŠธ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์ƒํƒœ ํ‘œํ˜„์ด๋‚˜ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒฐ๊ตญ ์—์ด์ „ํŠธ์˜ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋กœ ์œ ์ž…๋˜๋ฏ€๋กœ, ์ด ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ์••์ถ•ํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ๊ฒƒ์ธ์ง€ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์œผ๋กœ ์กฐ์‚ฌ ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -* [[Agent Harness Security]] - * ํ™•์žฅ ๋ฐฉํ–ฅ: ACIface ๋ชจ๋ธ์ด ๋„๊ตฌ ๋…ธ์ถœ์„ ์ œ์•ฝํ•˜์—ฌ ๋ณด์•ˆ์„ ๋†’์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ํ•˜๋„ค์Šค ์ˆ˜์ค€์—์„œ์˜ ์ƒŒ๋“œ๋ฐ•์‹ฑ ๊ตฌ์กฐ, ๊ถŒํ•œ ์ œ์–ด, ํŒŒ๊ดด์  ํ–‰๋™์— ๋Œ€ํ•œ ๊ฐ€๋“œ๋ ˆ์ผ ์„ค๊ณ„ ๊ธฐ์ˆ  ์ „๋ฐ˜์œผ๋กœ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-05-01* \ No newline at end of file diff --git a/00_Raw/Agent-to-Agent (A2A).md b/00_Raw/Agent-to-Agent (A2A).md deleted file mode 100644 index 1e3a8850..00000000 --- a/00_Raw/Agent-to-Agent (A2A).md +++ /dev/null @@ -1,53 +0,0 @@ -# [[Agent-to-Agent (A2A)]] - -## ๐Ÿ“Œ Brief Summary -Agent-to-Agent (A2A)๋Š” ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์—์ด์ „ํŠธ๋‚˜ ํ•˜๋„ค์Šค ๊ฐ„์˜ ์ž‘์—… ์œ„์ž„ ๋ฐ ์ƒํ˜ธ ํ†ต์‹ ์„ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ์˜คํ”ˆ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค [1-3]. ์ฃผ๋กœ HTTPS, JSON-RPC, Server-Sent Events(SSE)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒํƒœ ๊ธฐ๋ฐ˜์˜ ์ž‘์—… ๊ด€๋ฆฌ์™€ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [3-6]. ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๊ด€์ ์—์„œ A2A๋Š” ๊ฐœ๋ณ„ ๋„๊ตฌ ํ˜ธ์ถœ(MCP)์„ ๋„˜์–ด ์—์ด์ „ํŠธ ๊ฐ„์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐ ์กฐ์ • ๊ฒฝ๊ณ„(E-์ปดํฌ๋„ŒํŠธ)๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํ•ต์‹ฌ ์ธํ”„๋ผ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค [7, 8]. - -## ๐Ÿ“– Core ์†Œ Content -* **๋น„๋Œ€์นญ์  ๊ณ„์ธต ์œ„์ž„ ๊ตฌ์กฐ**: A2A ํ”„๋กœํ† ์ฝœ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋น„๋Œ€์นญ์ (asymmetric) ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์œ„์ž„ํ•˜๋Š” ํ•˜๋„ค์Šค์™€ ์œ„์ž„๋ฐ›๋Š” ํ•˜๋„ค์Šค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ด๋Š” ๋‹ค์ค‘ ํ•˜๋„ค์Šค ํ™˜๊ฒฝ์—์„œ ์ฃผ(Main) ์—์ด์ „ํŠธ๊ฐ€ ํ•˜์œ„ ์ž‘์—…์„ ์›๊ฒฉ ์—์ด์ „ํŠธ์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๊ณ„์ธต์ (hierarchical) ๊ตฌ์กฐ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค [9, 10]. -* **์—์ด์ „ํŠธ ๊ฒ€์ƒ‰(Discovery) ๋ฉ”์ปค๋‹ˆ์ฆ˜**: ๊ฐ ํ•˜๋„ค์Šค๋Š” ์ž์‹ ์ด ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์—์ด์ „ํŠธ์˜ ๊ธฐ๋Šฅ(capability)๊ณผ ํ†ต์‹  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ช…์‹œํ•˜๋Š” **'์—์ด์ „ํŠธ ์นด๋“œ(Agent Card)'**๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ์—์ด์ „ํŠธ๋ฅผ ๋™์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ์ž‘์—…์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9-11]. -* **๋ฉ”์‹œ์ง€์™€ ์•„ํ‹ฐํŒฉํŠธ์˜ ๋ถ„๋ฆฌ**: A2A ํ”„๋กœํ† ์ฝœ์€ ํ†ต์‹  ๊ณผ์ •์—์„œ ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€(messages)์™€ ๊ฒฐ๊ณผ๋ฌผ์ธ ์•„ํ‹ฐํŒฉํŠธ(artifacts)๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช…ํ™•ํ•œ ํ˜•ํƒœ์˜ ์ž‘์—… ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์„ ์›์น™์œผ๋กœ ์‚ผ์•„ ํ•˜๋„ค์Šค ๋‚ด๋ถ€์˜ ์•„ํ‹ฐํŒฉํŠธ ์šฐ์„ (artifact-first) ์„ค๊ณ„์™€ ๊ฐ•๋ ฅํ•œ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค [11]. -* **ํ”„๋กœํ† ์ฝœ ์Šคํƒ์—์„œ์˜ ์—ญํ• **: ์—์ด์ „ํŠธ๊ฐ€ ๊ณ ์ˆ˜์ค€์˜ ์˜๋„๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐ๋Š” ACP(Agent Communication Protocol)๊ฐ€, ๊ตฌ์ฒด์ ์ธ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” MCP(Model Context Protocol)๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, **A2A๋Š” ๊ทธ ์ค‘๊ฐ„์—์„œ ์ž‘์—… ์œ„์ž„(task delegation)์„ ๊ด€์žฅ**ํ•˜์—ฌ ์ผ๊ด€๋œ ํ•˜๋„ค์Šค ํ†ต์‹  ์Šคํƒ์„ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค [12, 13]. - -## โš–๏ธ Trade-offs & Caveats -* **๋„คํŠธ์›Œํฌ ์ง€์—ฐ(Latency)์˜ ํ•œ๊ณ„**: A2A๋Š” ์ธํ„ฐ๋„ท ๊ทœ๋ชจ์˜ ์กฐ์ง ๊ฐ„ ํ†ต์‹ ์„ ์ „์ œ๋กœ ์„ค๊ณ„๋˜์–ด ์›๊ฒฉ ์—์ด์ „ํŠธ ์œ„์ž„ ์‹œ ์•ฝ **50-200ms์˜ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„**์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค์—์„œ 2-15ms ๋งŒ์— ์ฒ˜๋ฆฌ๋˜๋Š” MCP ๊ธฐ๋ฐ˜ ๋„๊ตฌ ํ˜ธ์ถœ์— ๋น„ํ•ด ํ›จ์”ฌ ๋А๋ฆฌ๋ฏ€๋กœ, ๊ธด๋ฐ€ํ•˜๊ณ  ๋นˆ๋ฒˆํ•œ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•œ ๋ฃจํ”„๋ณด๋‹ค๋Š” ๊ทœ๋ชจ๊ฐ€ ํฐ ์ž‘์—…์˜ ์›๊ฒฉ ์œ„์ž„์— ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5, 6]. -* **๊ถŒํ•œ ๋ณ€ํ™˜์˜ ํ‘œ์ค€ํ™” ๋ถ€์žฌ**: A2A๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ ์›๊ฒฉ ์ž‘์—… ์ง€์‹œ๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ์˜ MCP ๋„๊ตฌ ๊ถŒํ•œ(permission grants)์œผ๋กœ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋งตํ•‘๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ **๋ช…์‹œ์ ์ธ ํ†ตํ•ฉ ๊ฒฝ๊ณ„๊ฐ€ ์•„์ง ํ”„๋กœํ† ์ฝœ ์ˆ˜์ค€์—์„œ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค**. ์ด๋กœ ์ธํ•ด ํ˜„์žฌ ๋ฐฐํฌ์ž๋“ค์€ A2A์™€ MCP ์‚ฌ์ด์˜ ๊ถŒํ•œ ๋ณ€ํ™˜ ๋กœ์ง์„ ์ž„์‹œ๋ฐฉํŽธ(ad-hoc)์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ณด์•ˆ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์˜ ๋ถ€๋‹ด์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค [14, 15]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [ํ†ต์‹  ๋ฐ ํ†ตํ•ฉ ํ”„๋กœํ† ์ฝœ] -* **[[MCP (Model Context Protocol)]]** - * ์—ฐ๊ฒฐ ์ด์œ : A2A๊ฐ€ ์—์ด์ „ํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, MCP๋Š” ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค์™€ ์™ธ๋ถ€ ๋„๊ตฌ ๊ฐ„์˜ ํ˜ธ์ถœ ๊ฒฝ๊ณ„๋ฅผ ํ‘œ์ค€ํ™”ํ•˜์—ฌ ์ƒํ˜ธ ๋ณด์™„์ ์ธ ํ†ต์‹  ์Šคํƒ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [7, 8, 16, 17]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ•˜๋„ค์Šค ๋‚ด๋ถ€์˜ ๋กœ์ปฌ ๋„๊ตฌ ์ ‘๊ทผ(MCP)๊ณผ ํ•˜๋„ค์Šค ์™ธ๋ถ€๋กœ์˜ ์ž‘์—… ์œ„์ž„(A2A)์ด ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด ๋™์ž‘ํ•˜๋Š”์ง€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14, 15]. - -* **[[ACP (Agent Communication Protocol)]]** - * ์—ฐ๊ฒฐ ์ด์œ : IBM์—์„œ ์ œ์•ˆํ•œ ํ”„๋กœํ† ์ฝœ๋กœ, ํ•˜๋„ค์Šค ๊ฐ„์˜ ๊ณ ์ˆ˜์ค€ ์˜๋„(intent) ํ†ต์‹ ์— ์ดˆ์ ์„ ๋งž์ถ”๋ฉฐ, ํ–ฅํ›„ A2A์™€ ํ•˜๋‚˜์˜ ํ‘œ์ค€์œผ๋กœ ํ†ตํ•ฉ(merge)๋˜๋Š” ์ƒํƒœ๊ณ„์  ์—ฐ๊ด€์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [12, 13, 18]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ•˜์œ„ ์ž‘์—… ์ง€์‹œ(A2A)๋ฅผ ๋„˜์–ด ์—์ด์ „ํŠธ ๊ฐ„ ๊ณ ์ˆ˜์ค€์˜ ์ž์œจ์  ๋ชฉํ‘œ ์ „๋‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12, 13]. - -#### [ํ•˜๋„ค์Šค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ์š”์†Œ] -* **[[Execution Loop (E-component)]]** - * ์—ฐ๊ฒฐ ์ด์œ : ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์—์„œ A2A ํ”„๋กœํ† ์ฝœ์€ ์—์ด์ „ํŠธ ๊ฐ„์˜ ์‹คํ–‰ ๋ฃจํ”„๋ฅผ ์กฐ์œจํ•˜๊ณ  ์กฐ์ •ํ•˜๋Š” E-์ปดํฌ๋„ŒํŠธ์˜ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ์„ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ๋กœ ํ™•์žฅํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [7-10]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ์—์ด์ „ํŠธ์˜ ๊ด€์ฐฐ-์ƒ๊ฐ-ํ–‰๋™ ๋ฃจํ”„๊ฐ€ A2A ์œ„์ž„ ํ˜ธ์ถœ์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ๋ณ‘๋ ฌ ๋˜๋Š” ์›๊ฒฉ ์„œ๋ธŒ ์—์ด์ „ํŠธ๋กœ ๋ถ„๊ธฐ(fan-out)๋˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 10]. - -### Deeper Research Questions -* A2A์˜ 50-200ms ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์žฆ์€ ํ”ผ๋“œ๋ฐฑ๊ณผ ์ƒํƒœ ๊ณต์œ ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋‹ค์ค‘ ์—์ด์ „ํŠธ ๊ธฐ๋ฐ˜ ํ˜‘์—… ์›Œํฌํ”Œ๋กœ์šฐ ์„ฑ๋Šฅ์— ์–ด๋– ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€? [5, 6] -* A2A ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํ•˜๋„ค์Šค ๊ฐ„ ์ž‘์—… ์œ„์ž„ ์‹œ ์ˆ˜์‹  ์ธก ํ•˜๋„ค์Šค๊ฐ€ A2A์˜ ์ž‘์—… ์Šน์ธ ์ •๋ณด๋ฅผ ๋กœ์ปฌ MCP ์„œ๋ฒ„์˜ ์•ˆ์ „ํ•œ ๊ถŒํ•œ ์ •์ฑ…์œผ๋กœ ๋ณ€ํ™˜(Translation)ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ์•„ํ‚คํ…์ฒ˜๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€? [14, 15] -* A2A์™€ ๊ฐ™์€ ์‹ ๋ขฐ๋œ ์—์ด์ „ํŠธ ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ฑ„๋„์„ ์•…์šฉํ•œ ๊ต์ฐจ ์—์ด์ „ํŠธ ํ”„๋กฌํ”„ํŠธ ์ธ์ ์…˜(Cross-agent prompt injection) ๊ณต๊ฒฉ์„ ํ•˜๋„ค์Šค์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ณ„์ธต์—์„œ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ์ฐจ๋‹จํ•  ๊ฒƒ์ธ๊ฐ€? [19, 20] -* ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ Agent Card๋ฅผ ์ด์šฉํ•œ ๋ถ„์‚ฐ ์—์ด์ „ํŠธ ๊ฒ€์ƒ‰(Discovery) ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ณด์•ˆ๊ณผ ์ƒํƒœ ๊ฐ€์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ์Šค์ผ€์ผ๋ง๋  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [9-11] -* A2A์˜ ๋น„๋Œ€์นญ์ (Asymmetric) ํ†ต์‹  ๋ชจ๋ธ์ด ์ž์œจ์ ์ธ P2P ํ˜‘๋ ฅ ํ† ํด๋กœ์ง€์™€ ๋น„๊ตํ•  ๋•Œ, ๊ณ„์ธตํ˜• ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ-์›Œ์ปค ํŒจํ„ด์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ œ์–ด ์—ญํ•™(Control dynamics)์˜ ๊ตฌ์ฒด์ ์ธ ์žฅ์ ๊ณผ ํ•œ๊ณ„๋Š” ๋ฌด์—‡์ธ๊ฐ€? [9, 10] - -### Practical Application Contexts -* **Implementation:** HTTPS ๋ฐ Server-Sent Events(SSE) ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ A2A ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์›๊ฒฉ ์—์ด์ „ํŠธ ๊ฐ„์— ์ž‘์—…(Task) ๊ตฌ์กฐ์ฒด์™€ ์ง„ํ–‰ ์ƒํƒœ, ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ณผ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [3, 4, 11]. -* **System Design:** ์ฃผ(Main) ์—์ด์ „ํŠธ์˜ ํ•˜๋„ค์Šค๊ฐ€ ๋กœ์ปฌ ๊ธฐ๋Šฅ์€ ๋‚ด๋ถ€์˜ MCP ์ปค๋„ฅํ„ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ์กฐ์ง ์™ธ๋ถ€์˜ ์›๊ฒฉ ํŠนํ™” ์—์ด์ „ํŠธ์—๊ฒŒ๋Š” A2A ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ•˜์œ„ ์ž‘์—…์„ ์œ„์ž„ํ•˜๋„๋ก ์ฑ…์ž„์„ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœํ† ์ฝœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [9, 10, 16, 17, 21]. -* **Operation / Maintenance:** ํ•˜๋„ค์Šค ๊ฐ„ ๋ถ„์‚ฐ ํ˜ธ์ถœ์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ตฌ์กฐ์ด๋ฏ€๋กœ, A2A ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ถŒํ•œ ์œ„์ž„ ์ฒด์ธ์— ๋Œ€ํ•œ ๊ฐ์‚ฌ ๋กœ๊ทธ(Audit log)๋ฅผ ๋‚จ๊ธฐ๊ณ , 50-200ms ์ง€์—ฐ ์‹œ๊ฐ„์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ์žฌ์‹œ๋„ ๋ฐ ์ค‘๋‹จ(Cancellation) ์ •์ฑ… ๋“ฑ ์žฅ์•  ๋ณต๊ตฌ ๋Ÿฐํƒ€์ž„์„ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5, 6, 11, 22]. -* **Learning Path:** ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค ์—”์ง€๋‹ˆ์–ด๋ง ํ•™์Šต ์‹œ, ๋‹จ์ผ ์—์ด์ „ํŠธ์˜ ๋„๊ตฌ ์—ฐ๋™(MCP)์„ ๋จผ์ € ์ตํžŒ ๋’ค ์‹œ์Šคํ…œ์ด ์ˆ˜ํ‰์ ์œผ๋กœ ํ™•์žฅ๋˜๋Š” ๋‹จ๊ณ„์—์„œ ์›๊ฒฉ ์—์ด์ „ํŠธ ๊ฐ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜(A2A) ๋ฐ ์˜๋„ ๊ตํ™˜(ACP) ์Šคํƒ์„ ํ•™์Šตํ•˜๋Š” ๋กœ๋“œ๋งต์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค [12, 13]. -* **My Project Relevance:** ์†Œ์Šค์— ํŠน์ • ์‚ฌ์šฉ์ž ํ”„๋กœ์ ํŠธ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ์ ์šฉ ๋งฅ๋ฝ์„ ์„œ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค์ค‘ ๋ชจ๋ธ์ด๋‚˜ ํƒ€ ์กฐ์ง์˜ ์ž์œจ ์—์ด์ „ํŠธ์™€ ์—ฐ๋™ํ•ด์•ผ ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์„ ๊ธฐํšํ•œ๋‹ค๋ฉด, ํ•˜๋„ค์Šค ๋‚ด๋ถ€์— A2A ์–ด๋Œ‘ํ„ฐ(Adapter)๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ๋ฒค๋” ์ข…์†์„ฑ ์—†์ด ์™ธ๋ถ€ ์—์ด์ „ํŠธ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ํ˜ธ์ถœํ•˜๊ณ  ํ†ต์ œํ•˜๋Š” ๊ธฐ๋ฐ˜์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 23]. - -### Adjacent Topics -* **[[Distributed Systems]]** - * ํ™•์žฅ ๋ฐฉํ–ฅ: ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์ด A2A๋ฅผ ํ†ตํ•ด ์„œ๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ณธ์งˆ์ ์œผ๋กœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ๊ณผ ๋™์ผํ•œ ๊ณผ์ œ(๋™์‹œ์„ฑ ์ œ์–ด, ๊ณต์œ  ์ƒํƒœ ์ผ๊ด€์„ฑ, ๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ…, ๋น„์ž”ํ‹ด ๊ฒฐํ•จ ํ—ˆ์šฉ ๋“ฑ)๋ฅผ ์ง๋ฉดํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ, ์ด๋ฅผ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„ ํŒจํ„ด ๊ด€์ ์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [24-27]. - ---- -*Last updated: 2026-05-01* \ No newline at end of file diff --git a/00_Raw/Atomic Commits.md b/00_Raw/Atomic Commits.md deleted file mode 100644 index b96104e2..00000000 --- a/00_Raw/Atomic Commits.md +++ /dev/null @@ -1,53 +0,0 @@ -# [[Atomic Commits]] - -## ๐Ÿ“Œ Brief Summary -Atomic Commits(์›์ž์  ์ปค๋ฐ‹)๋Š” ํ•œ ๋ฒˆ์˜ ์ปค๋ฐ‹์— ์˜ค์ง ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ(logical change)๋งŒ์„ ํฌํ•จ์‹œํ‚ค๋Š” ์ฝ”๋“œ ๊ธฐ๋ก ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [1]. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…๊ณผ ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์— ๋ฌถ์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ์ปค๋ฐ‹์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์˜ ์ˆ˜์ • ๋‚ด์—ญ(history)์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. - -## ๐Ÿ“– Core ๋‹จ๋ฝ Content -* **๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ์ ์šฉ**: ํ•œ ๋ฒˆ์˜ ์ปค๋ฐ‹์€ ์˜ค์ง ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 2]. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๋ฉด์„œ ๋™์‹œ์— ์—ฐ๊ด€ ์—†๋Š” ๋‹ค๋ฅธ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์‹์˜ ์ž‘์—…์„ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค [1]. -* **๋ฆฌ๋ทฐ ๋ฐ ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ์˜ ์ด์ **: ์ปค๋ฐ‹์„ ์ž‘๊ณ  ์˜๋ฏธ ์žˆ๋Š”(small and meaningful) ๋‹จ์œ„๋กœ ์œ ์ง€ํ•˜๋ฉด, ๋™๋ฃŒ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•  ๋•Œ ๋ณ€๊ฒฝ๋œ ์˜๋„๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ๋‹จ์ˆœํ•ด์ง‘๋‹ˆ๋‹ค [1, 3]. ๋˜ํ•œ, ์ถ”ํ›„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ถ”์ ํ•˜๊ฑฐ๋‚˜ ๋˜๋Œ๋ฆฌ๊ธฐ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค [1]. -* **์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์˜ ์—ญํ• **: ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ Feature Branch ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ตœ์‹  ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ๋‚ด์—์„œ ๋นˆ๋ฒˆํ•˜๊ณ  ์›์ž์ ์ธ ์ปค๋ฐ‹(Make atomic commits)์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๊ทœ์น™์œผ๋กœ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [2, 4]. - -## โš–๏ธ Trade-offs & Caveats -์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. (์ œ๊ณต๋œ ์†Œ์Šค์—์„œ๋Š” ์›์ž์  ์ปค๋ฐ‹์ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•œ๋‹ค๋Š” ์žฅ์ ๋งŒ ์–ธ๊ธ‰๋˜์–ด ์žˆ์„ ๋ฟ, ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€์ž‘์šฉ, ์ œ์•ฝ ์‚ฌํ•ญ ๋˜๋Š” ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค [1].) - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [ํ˜‘์—… ๋ฐ ๋ธŒ๋žœ์นญ ์ „๋žต] -- [[Feature Branching]] - - ์—ฐ๊ฒฐ ์ด์œ : ์›์ž์  ์ปค๋ฐ‹์€ ์ฃผ๋กœ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐ๋œ '๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature branch)' ๋‚ด์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ ์šฉ๋˜๋Š” ํ•ต์‹ฌ ๊ทœ์น™์ž…๋‹ˆ๋‹ค [1, 4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ๋…๋ฆฝ๋œ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœํ•  ๋•Œ, ์–ด๋–ป๊ฒŒ ์ž‘์—…์„ ๋‹จ์ผ ๋…ผ๋ฆฌ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ปค๋ฐ‹ํ• ์ง€ ๊ตฌ์กฐ์ ์ธ ํ๋ฆ„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 5]. - -- [[Pull Request (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์›์ž์  ์ปค๋ฐ‹๋“ค์„ ๋ชจ์•„ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์™„์„ฑํ•œ ํ›„, ์ด๋ฅผ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [1-3]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›์ž์  ์ปค๋ฐ‹์ด ์‹ค์ œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ํŒ€์›์˜ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ๊ณผ ์Šน์ธ์„ ์–ป๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1-3]. - -#### [์ปค๋ฐ‹ ๋ฐ ๋ณ‘ํ•ฉ ๊ธฐ๋ฒ•] -- [[Squash Merge]] - - ์—ฐ๊ฒฐ ์ด์œ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์›์ž์  ์ปค๋ฐ‹์ด ์Œ“์ธ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•  ๋•Œ, ์ „์ฒด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Squash Merge ์ „๋žต์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [3, 4, 6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›์ž์  ์ปค๋ฐ‹์œผ๋กœ ์ƒ์„ธํ•˜๊ฒŒ ์ชผ๊ฐœ์ง„ ์ž‘์—… ๋‚ด์—ญ์„ ์ตœ์ข…์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ๋‹จ์ผ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 6]. - -### Deeper Research Questions -- ๋‹จ์ผ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ(Logical change)์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์›์ž์  ์ปค๋ฐ‹์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ช…ํ™•ํ•œ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 2] -- ์žฆ์€ ์›์ž์  ์ปค๋ฐ‹(Commit frequently)์ด ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature branch)์˜ ๋ฆฌ๋ทฐ ๊ณผ์ •์— ๋ฏธ์น˜๋Š” ๊ตฌ์ฒด์ ์ธ ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 2] -- ์›์ž์  ์ปค๋ฐ‹๊ณผ Conventional Commits (์˜ˆ: `feat:`, `fix:`) ์ž‘์„ฑ ๊ทœ์น™์€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ์ปค๋ฐ‹์˜ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋Š”๊ฐ€? [2, 7] -- ์›์ž์  ์ปค๋ฐ‹๋“ค๋กœ ๊ตฌ์„ฑ๋œ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•  ๋•Œ, ์ผ๋ฐ˜ Merge์™€ Squash Merge ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ์— ๋” ์ ํ•ฉํ•œ๊ฐ€? [3, 4, 6] -- ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ์›์ž์  ์ปค๋ฐ‹์„ ์ง€์†์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž์˜ ๋™์‹œ ์ž‘์—… ์‹œ ์ถฉ๋Œ(Conflict) ์˜ˆ๋ฐฉ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€? [8, 9] - -### Practical Application Contexts - -- **Implementation:** ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ์ถ”๊ฐ€์™€ ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ ์ถ”๊ฐ€๋ฅผ ํ•œ ๋ฒˆ์— ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ , ๊ฐ๊ฐ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๊ฐœ์˜ ์ปค๋ฐ‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ง์ ‘์ ์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [1]. -- **System Design:** ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. -- **Operation / Maintenance:** ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋œ ์ปค๋ฐ‹ ๋‚ด์—ญ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ์ˆ˜์ • ์ด๋ ฅ์„ ์‰ฝ๊ฒŒ ์ถ”์ ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [1]. -- **Learning Path:** ์†Œ๊ทœ๋ชจ ๊ฐœ๋ฐœ ํŒ€์— ์ ํ•ฉํ•œ ๊ฐ€๋ณ๊ณ  ์ถฉ๋Œ ์—†๋Š” Git ๋ธŒ๋žœ์นญ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์ˆ˜์ ์ธ ๊ธฐ๋ณธ ์ˆ˜์น™์œผ๋กœ ํ•™์Šต๋ฉ๋‹ˆ๋‹ค [1, 8]. -- **My Project Relevance:** ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž‘์—…ํ•  ๋•Œ, `fix: handle null response in login API`์™€ ๊ฐ™์ด ์ž‘๊ณ  ์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹ ๋‹จ์œ„๋ฅผ ์œ ์ง€ํ•จ์œผ๋กœ์จ ํŒ€์›๋“ค์˜ ๋น ๋ฅด๊ณ  ํšจ๊ณผ์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 7]. - -### Adjacent Topics - -- [[Conventional Commits]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›์ž์  ์ปค๋ฐ‹์˜ ๋ชฉ์ ์„ ๋”์šฑ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด `feat:`, `fix:`, `chore:` ๋“ฑ์˜ ์ ‘๋‘์‚ฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•จ๊ป˜ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 7, 10]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Branching Strategies.md b/00_Raw/Branching Strategies.md deleted file mode 100644 index 0c39642f..00000000 --- a/00_Raw/Branching Strategies.md +++ /dev/null @@ -1,71 +0,0 @@ -# [[Branching Strategies]] - -## ๐Ÿ“Œ Brief ์†ŒSummary -Branching Strategies(๋ธŒ๋žœ์นญ ์ „๋žต)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ด€๋ฆฌํ•˜๊ณ  ํŒ€์› ๊ฐ„์˜ ํ˜‘์—…์„ ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Git ๋“ฑ)์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑ, ๋ณ‘ํ•ฉ, ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๊ทœ์น™๊ณผ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํŒ€์˜ ๊ทœ๋ชจ์™€ ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ Git Flow, GitHub Flow, Trunk-Based Development, Feature Branch Workflow ๋“ฑ ๋‹ค์–‘ํ•œ ์ „๋žต์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•œ ๋ธŒ๋žœ์นญ ์ „๋žต์˜ ๋„์ž…์€ ๋ฉ”์ธ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ์ถ”์ ์„ฑ์„ ๊ฐ•ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [1-3]. - -## ๐Ÿ“– Core Content -* **์ฃผ์š” ๋ธŒ๋žœ์นญ ์ „๋žต ์œ ํ˜•** - * **Feature Branch Workflow (๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ):** 2~5๋ช… ๊ทœ๋ชจ์˜ ์†Œ๊ทœ๋ชจ ํŒ€์— ๊ฐ€์žฅ ์ดˆ๋ณด์ž ์นœํ™”์ ์ด๊ณ  ์ถฉ๋Œ์ด ์ ์€ ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค [4]. `main` ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ • ์‹œ `main`์—์„œ ํŒŒ์ƒ๋œ ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [5]. ๊ฐœ๋ฐœ ์™„๋ฃŒ ํ›„ Pull Request(PR)๋ฅผ ์—ด๊ณ  ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ๋™๋ฃŒ ๋ฆฌ๋ทฐ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์นœ ํ›„ Squash Merge ๋ฐฉ์‹์œผ๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค [6, 7]. - * **Trunk-Based Development (ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ):** ๊ฐ•๋ ฅํ•œ CI(์ง€์†์  ํ†ตํ•ฉ) ํ™˜๊ฒฝ์„ ๊ฐ–์ถ˜ ์ˆ™๋ จ๋œ ํŒ€์— ์ ํ•ฉํ•œ ๊ฐ€๋ฒผ์šด ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [8, 9]. ์ˆ˜๋ช…์ด ๋งค์šฐ ์งง์€ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์ž‘์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์ฃผ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ตœ์†Œํ™”๋˜๊ณ  ํ”ผ๋“œ๋ฐฑ์ด ๋น ๋ฅด๋ฉฐ ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 10]. - * **Git Flow:** ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์Šค ์ผ์ •์„ ๊ฐ€์ง„ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค [9]. ํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์™ธ์—๋„ `develop`, `release` ๋“ฑ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋ธŒ๋žœ์น˜๊ฐ€ ๋งŽ์•„ ์†Œ๊ทœ๋ชจ ํŒ€์—๊ฒŒ๋Š” ๋ฌด๊ฒ๊ณ  ๊ณผ๋„ํ•œ ๋ณต์žก์„ฑ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 11, 12]. - * **GitHub Flow:** `main` ๋ธŒ๋žœ์น˜๋กœ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ๋‹จ์ˆœํ™”๋œ ๊ตฌ์กฐ๋กœ, Git Flow๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์ง€์†์ ์ธ ๋ฐฐํฌ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [11, 13]. - -* **๋ชจ๋“  ์ „๋žต์— ์ ์šฉ๋˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€ (Best Practices)** - * **ํ‹ฐ์ผ“ ID ๋ฐ ๋ช…๋ช… ๊ทœ์น™ ์‚ฌ์šฉ:** ๋ธŒ๋žœ์น˜ ์ด๋ฆ„๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ์š”๊ตฌ์‚ฌํ•ญ ์ถ”์ ์„ ์œ„ํ•œ ํ‹ฐ์ผ“ ID(์˜ˆ: `feature/PROJ-123-user-auth`)๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14, 15]. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์ผ€๋ฐฅ ์ผ€์ด์Šค(kebab-case)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์งง๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค [16, 17]. - * **์›์ž์  ์ปค๋ฐ‹ (Atomic Commits):** ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์—๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ํฌํ•จํ•˜์—ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํžˆ์Šคํ† ๋ฆฌ ์ถ”์ ์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค [7, 18]. - * **Conventional Commits ๊ทœ์น™:** ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” `feat:`, `fix:`, `chore:` ๋“ฑ์˜ ํ‘œ์ค€ํ™”๋œ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค [19-21]. - * **PR ๋ฐ ๋ณ‘ํ•ฉ ๊ทœ์น™:** ์ฝ”๋“œ๋ฅผ ์ ˆ๋Œ€ `main`์— ์ง์ ‘ ํ‘ธ์‹œํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ PR์„ ํ†ตํ•œ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค [6, 22]. ๋ณ‘ํ•ฉ ํ›„์—๋Š” ์‚ฌ์šฉ์ด ๋๋‚œ ๋ธŒ๋žœ์น˜๋ฅผ ์ฆ‰์‹œ ์‚ญ์ œํ•˜์—ฌ ์ €์žฅ์†Œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค [6, 23]. - -* **์ „๋žต ๊ฐ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐฉ๋ฒ•** - * ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณ€ํ™”ํ•จ์— ๋”ฐ๋ผ ์ „๋žต๋„ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ†ตํ•ฉ ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด Feature Branch์—์„œ Trunk-Based(๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ ๋ฐ ์ˆ˜๋ช… ๋‹จ์ถ•)๋กœ ์ „ํ™˜ํ•˜๊ณ , ๋” ๋งŽ์€ ์ฒด๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด GitHub Flow์—์„œ Git Flow(`develop` ๋ธŒ๋žœ์น˜ ๋ฐ ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜ ์ถ”๊ฐ€)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 12]. - -## โš–๏ธ Trade-offs & Caveats -* **๊ตฌ์กฐ์  ์˜ค๋ฒ„ํ—ค๋“œ vs. ์•ˆ์ •์„ฑ:** Git Flow๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์Šค์— ๊ฐ•์ ์ด ์žˆ์ง€๋งŒ, ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ(์˜ค๋ฒ„ํ—ค๋“œ)์ด ๋†’์Šต๋‹ˆ๋‹ค [9]. ๋ฐ˜๋ฉด Feature Branch๋‚˜ Trunk-Based ๋ฐฉ์‹์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€๋ฒผ์šด ๋Œ€์‹  ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ ๋ณดํ˜ธ(`main` ๋ธŒ๋žœ์น˜ ์ง์ ‘ ํ‘ธ์‹œ ๊ธˆ์ง€, ์—„๊ฒฉํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋“ฑ) ๊ทœ์น™์ด ๊ฐ•์ œ๋˜์ง€ ์•Š์œผ๋ฉด ์ฝ”๋“œ๊ฐ€ ์‰ฝ๊ฒŒ ๊นจ์งˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค [6, 22]. -* **๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…(Long-lived branches) ๋ฌธ์ œ:** ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋‚˜ GitHub Flow๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…์ด ๋ช‡ ์ฃผ ์ด์ƒ ๊ธธ์–ด์ง€๋ฉด ๋‹ค๋ฅธ ์ž‘์—…์ž์™€์˜ ์ฝ”๋“œ ๋ถ„๊ธฐ๊ฐ€ ์‹ฌํ•ด์ ธ ๊ฑฐ๋Œ€ํ•œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ(Merge conflicts)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [17]. ๋”ฐ๋ผ์„œ ๋งค์ผ `main`์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Pull ํ•˜๊ฑฐ๋‚˜ Rebaseํ•˜์—ฌ ์ถฉ๋Œ์„ ์˜ˆ๋ฐฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [7]. -* **Trunk-Based ๊ฐœ๋ฐœ์˜ ์˜์กด์„ฑ:** ๋น ๋ฅธ ๋ณ‘ํ•ฉ์„ ์ง€ํ–ฅํ•˜๋Š” Trunk-Based Development๋Š” ์ง€์†์ ์ด๊ณ  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(CI)๊ณผ ๋ฏธ์™„์„ฑ ๊ธฐ๋Šฅ์„ ํ”„๋กœ๋•์…˜์—์„œ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature Flags) ๊ตฌํ˜„ ๋“ฑ ๊ธฐ์ˆ ์  ๋’ท๋ฐ›์นจ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [9, 11]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๋ฐฉ๋ฒ•๋ก ] -- [[Feature Branch Workflow]] - - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ๊ทœ๋ชจ 3~5์ธ ๊ฐœ๋ฐœ ํŒ€์— ๊ฐ€์žฅ ์ถ”์ฒœ๋˜๋Š” ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ธŒ๋žœ์นญ ์ „๋žต์˜ ๊ธฐ๋ฐ˜ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Trunk-Based Development]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฌด๊ฑฐ์šด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํƒˆํ”ผํ•˜์—ฌ ๋ธŒ๋žœ์น˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ทนํ•œ์œผ๋กœ ์ค„์ด๊ณ  ๋น ๋ฅธ ํ†ตํ•ฉ์„ ์ค‘์‹œํ•˜๋Š” ์ตœ์‹  ํŠธ๋ Œ๋“œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: CI/CD ํ™˜๊ฒฝ์—์„œ์˜ ์žฆ์€ ์†Œ๊ทœ๋ชจ ๋ฐฐํฌ ๋ฐฉ์‹๊ณผ ์ถฉ๋Œ ์ตœ์†Œํ™” ์ „๋žต์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Git Flow]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋žœ์นญ ์ „๋žต์˜ ๊ณ ์ „์ ์ด๊ณ  ์ฒด๊ณ„์ ์ธ ํ˜•ํƒœ๋กœ์„œ, ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์˜ ์ •๊ธฐ์  ๋ฒ„์ €๋‹ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `develop`, `release`, `hotfix` ๋“ฑ ๊ฐœ๋ฐœ ํŒŒ์ดํ”„๋ผ์ธ์— ๋”ฐ๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์—ญํ•  ๋ถ„๋ฆฌ ๊ธฐ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ ๋ฐ ๊ทœ์น™] -- [[Pull Request & Code Review]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋žœ์นญ ์ „๋žต์ด ์•ˆ์ „ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๋ณ‘ํ•ฉ ์ „์— ํ•„์ˆ˜์ ์œผ๋กœ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ํ’ˆ์งˆ ๊ฒ€์ฆ ๊ด€๋ฌธ์ž…๋‹ˆ๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒ€์› ๊ฐ„์˜ ๋น„๋™๊ธฐ์  ํ”ผ๋“œ๋ฐฑ ์ˆ˜๋ ด, ์‹œ๊ฐ์  ๊ฒ€์ฆ, ๊ทธ๋ฆฌ๊ณ  CI ํ†ต๊ณผ๋ฅผ ์ „์ œ๋กœ ํ•œ ์•ˆ์ „ํ•œ ๋ณ‘ํ•ฉ ๊ณผ์ •์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Conventional Commits]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ ๋‚ด์—ญ์„ ์ถ”์ ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ํ†ต์šฉ๋˜๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `feat(scope): message` ์™€ ๊ฐ™์€ ํ˜•์‹์˜ ๊ตฌ๋ฌธ์„ ํ†ตํ•ด ์ฝ”๋“œ ํžˆ์Šคํ† ๋ฆฌ ํŒŒ์•… ๋ฐ ๋ฌธ์„œ ์ž๋™ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions -- Trunk-Based Development๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ธ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(CI)๊ณผ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature flags)์˜ ๊ตฌํ˜„ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์†Œ๊ทœ๋ชจ ํŒ€์ด ๋‹จ์ผ `main` ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ์‚ฌ์šฉํ•  ๋•Œ, ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฒ„๊ทธ๊ฐ€ ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•œ GitHub ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™(Branch Protection Rules) ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์žฅ๊ธฐ ์ฒด๋ฅ˜ ๋ธŒ๋žœ์น˜(Long-lived branch)์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ `merge`์™€ `rebase` ์ค‘ ์–ด๋–ค ๋ฐฉ์‹์ด ์ด๋ ฅ ๊ด€๋ฆฌ์— ๋” ํšจ๊ณผ์ ์ธ๊ฐ€? -- ์›์ž์  ์ปค๋ฐ‹(Atomic Commits)์„ ๊ฐ•์ œํ•˜๋Š” ์ •์ฑ…์ด Pull Request ๋ฆฌ๋ทฐ ์‹œ๊ฐ„๊ณผ ๋ฒ„๊ทธ ์ถ”์ ์„ฑ์— ์–ด๋– ํ•œ ์ •๋Ÿ‰์ /์ •์„ฑ์  ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€? -- Git Flow ๋ฐฉ์‹์—์„œ GitHub Flow ๋ฐฉ์‹์œผ๋กœ ํŒ€์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ ์˜ˆ์ƒ๋˜๋Š” ํ˜ผ๋ž€ ์š”์†Œ์™€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ์žฌ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ๋•Œ, ์ตœ์‹  `main` ๋ธŒ๋žœ์น˜์—์„œ `feature/ํ‹ฐ์ผ“ID-๊ฐ„๋‹จํ•œ-์„ค๋ช…` ์ด๋ฆ„์œผ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ์ƒํ•˜๊ณ , ์›์ž์  ๋‹จ์œ„๋กœ ์ž‘์€ ์ปค๋ฐ‹์„ ์ž์ฃผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. -- **System Design:** ํ”„๋ก ํŠธ์—”๋“œ ๋ชจ๋“ˆ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ, ๋…๋ฆฝ์ ์ธ ํ”ผ์ฒ˜(Feature) ํด๋”๋ณ„๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•จ์œผ๋กœ์จ ํŠน์ • ์ฝ”๋“œ ์˜์—ญ ๋ฐ–์œผ๋กœ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์˜ ํญ๋ฐœ ๋ฐ˜๊ฒฝ(Blast radius)์ด ํผ์ง€์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. -- **Operation / Maintenance:** ๋ธŒ๋žœ์น˜๊ฐ€ `main`์œผ๋กœ ๋ณ‘ํ•ฉ๋˜๋Š” ์ฆ‰์‹œ GitHub Action ๋“ฑ CI ์„œ๋ฒ„์—์„œ ์ž๋™์œผ๋กœ ๋ฆฐํŠธ(ESLint), ํ…Œ์ŠคํŠธ(Jest), ํฌ๋งทํŒ…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋ฐฉ์–ด๋ง‰์„ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. -- **Learning Path:** Git์˜ ๊ธฐ์ดˆ ๋ช…๋ น์–ด๋ฅผ ์Šต๋“ํ•œ ํ›„, ์†Œ๊ทœ๋ชจ ํŒ€ ๋‹จ์œ„์˜ Feature Branch Workflow๋ฅผ ์‹ค์Šตํ•˜๊ณ , ์ดํ›„ CI/CD ๋„๊ตฌ๋ฅผ ์—ฐ๋™ํ•œ Trunk-Based ํ™˜๊ฒฝ์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š” ์ˆœ์„œ๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. -- **My Project Relevance:** 3~5์ธ ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌด๊ฑฐ์šด Git Flow์˜ ๋„์ž…์„ ์ง€์–‘ํ•˜๊ณ , '๋‹จ๊ธฐ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ โ†’ PR ๋ฐ 1์ธ ์ด์ƒ ํ”ผ์–ด ๋ฆฌ๋ทฐ ์Šน์ธ โ†’ Squash Merge ๋ฐ ๋ธŒ๋žœ์น˜ ์ฆ‰์‹œ ์‚ญ์ œ'๋ผ๋Š” ๋‹จ์ˆœํ™”๋œ ๋ฃฐ์„ ์ ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„์™€ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋™์‹œ์— ์ฑ™๊น๋‹ˆ๋‹ค. - -### Adjacent Topics -- [[Continuous Integration / Continuous Deployment (CI/CD)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ธŒ๋žœ์นญ ์ „๋žต์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ(Trigger)๋˜์–ด ์‹คํ–‰๋˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊นŠ์ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. -- [[Feature-Sliced Design (FSD)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋„๋ฉ”์ธ๊ณผ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ, ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆŒ ๋•Œ ์ถฉ๋Œ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ตœ์†Œํ™”ํ•˜๋Š” ์ฝ”๋“œ ๊ตฌ์กฐ ์„ค๊ณ„๋ฒ•์„ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Clean Code and SOLID Principles.md b/00_Raw/Clean Code and SOLID Principles.md deleted file mode 100644 index 36c11673..00000000 --- a/00_Raw/Clean Code and SOLID Principles.md +++ /dev/null @@ -1,68 +0,0 @@ -# [[Clean Code and SOLID Principles]] - -## ๐Ÿ“Œ Brief Summary -Clean Code์™€ SOLID ์›์น™์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ, ๊ฐ€๋…์„ฑ, ํ™•์žฅ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™์ด๋‹ค [1]. SOLID๋Š” SRP, OCP, LSP, ISP, DIP์˜ 5๊ฐ€์ง€ ์›์น™์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋ช…ํ™•ํ•˜๊ณ  ์ž˜ ์กฐ์ง๋œ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์กฐ๋ฅผ ์•ˆ๋‚ดํ•˜๋ฉฐ, ๊ฐ์ฒด ์ง€ํ–ฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ React์˜ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—๋„ ์œ ํšจํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค [1, 2]. ๋”๋ถˆ์–ด DRY, KISS, YAGNI์™€ ๊ฐ™์€ Clean Code ์›์น™๋“ค์€ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ค‘๋ณต๊ณผ ๋ณต์žก์„ฑ์„ ์ค„์—ฌ, ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค [3, 4]. - -## ๐Ÿ“– Core Content - -**SOLID ์›์น™์˜ React ์ ์šฉ** -* **๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (SRP - Single Responsibility Principle):** ์ปดํฌ๋„ŒํŠธ๋‚˜ ์ปค์Šคํ…€ ํ›…์€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•  ์ด์œ ๊ฐ€ ๋‹จ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค [5]. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ํฌ๊ธฐ๊ฐ€ 300์ค„์„ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ, UI ์ปดํฌ๋„ŒํŠธ(์˜ˆ: UserProfile, UserPosts)๋‚˜ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค [2, 5]. -* **๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (OCP - Open/Closed Principle):** ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค [6]. React์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ(Composition), `children` prop, ํ˜น์€ ๋ Œ๋” ํ”„๋กญ์Šค(render-props)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [2, 7, 8]. -* **๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (LSP - Liskov Substitution Principle):** ํ•˜์œ„ ํƒ€์ž…์€ ์ƒ์œ„ ํƒ€์ž…์„ ๋ฌด๋ฆฌ ์—†์ด ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค [6]. ํ˜„๋Œ€ React๋Š” ํด๋ž˜์Šค ์ƒ์†์„ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ์˜ ์ž๋ฆฌ๋ฅผ ๋งค๋„๋Ÿฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด ์›์น™์„ ์ ์šฉํ•œ๋‹ค [2, 8]. -* **์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (ISP - Interface Segregation Principle):** ์ปดํฌ๋„ŒํŠธ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” props์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค [2, 7]. ๊ฑฐ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ํ†ต์งธ๋กœ props๋กœ ๋„˜๊ธฐ๊ธฐ๋ณด๋‹ค๋Š”, ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ช…ํ™•ํ•˜๊ณ  ์ž‘์€ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค [7, 8]. -* **์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (DIP - Dependency Inversion Principle):** ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„(Concretions)์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค [2]. ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ง์ ‘์ ์ธ ๊ฒฐํ•ฉ์„ ํ”ผํ•˜๊ณ , props๋‚˜ Context๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค [2, 8]. - -**์ถ”๊ฐ€์ ์ธ Clean Code ์›์น™** -* **DRY (Don't Repeat Yourself):** ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(HOC)๋กœ ์ถ”์ถœํ•œ๋‹ค [4, 9]. ๋‹จ, ์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ„ด์ด ์ตœ์†Œ ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค [10]. -* **KISS (Keep It Simple, Stupid):** ๋ณต์žก์„ฑ๋ณด๋‹ค ๋‹จ์ˆœ์„ฑ์„ ์ตœ์šฐ์„ ์œผ๋กœ ํ•ด์•ผ ํ•œ๋‹ค [4]. ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ์ˆ˜๋ฅผ '๋‹จ์ˆœํ•˜๊ณ  ๋ฐ”๋ณด๊ฐ™์ด(simple and dumb)' ์œ ์ง€ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ์กฐ๊ธฐ ์ตœ์ ํ™”๋ฅผ ํ”ผํ•ด์•ผ ํ•œ๋‹ค [9, 11]. -* **YAGNI (You Aren't Gonna Need It):** ๋ฏธ๋ž˜์— ์‚ฌ์šฉ๋ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ์ด์œ ๋กœ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค [4, 12]. ํ˜„์žฌ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ์ฃฝ์€ ์ฝ”๋“œ(dead code)๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค [9, 13]. - -## โš–๏ธ Trade-offs & Caveats -* **SOLID ๋„์ž…์˜ ๋ณต์žก์„ฑ:** SOLID ์›์น™์„ ๋„์ž…ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ณ ๋„๋กœ ์ฒด๊ณ„ํ™”๋˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋˜์ง€๋งŒ, ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ๋Š” ๊ตฌ์กฐ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ๋‹ค [14]. -* **DRY ์›์น™๊ณผ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”:** ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ ์šฉํ•  ๊ฒฝ์šฐ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์ถ”์ƒํ™”(overly complex abstractions)๋ฅผ ์ดˆ๋ž˜ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค [10, 14]. -* **KISS ์›์น™์˜ ์ง€๋‚˜์นœ ๋‹จ์ˆœํ™”:** ๋””๋ฒ„๊น…์„ ์‰ฝ๊ฒŒ ํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋‚˜, ๋•Œ๋กœ๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ๋„ˆ๋ฌด ๋‹จ์ˆœํ™”(oversimplify)ํ•  ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค [14]. -* **YAGNI์™€ ํ™•์žฅ์„ฑ ๊ฐ„๊ณผ:** ๋‚ญ๋น„๋˜๋Š” ๋…ธ๋ ฅ์„ ์ค„์ด๊ณ  ๊ธฐ๋ฏผํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์ง€๋งŒ, ํ˜„์žฌ์—๋งŒ ๋„ˆ๋ฌด ์ง‘์ค‘ํ•œ ๋‚˜๋จธ์ง€ ๋ฏธ๋ž˜์˜ ํ™•์žฅ์„ฑ(future scalability)์„ ๊ฐ„๊ณผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค [14]. -* **Clean Code ์œ ์ง€๋ฅผ ์œ„ํ•œ ๊ทœ์œจ:** ์ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ํŒ€ ์ „์ฒด์˜ ์ง€์†์ ์ธ ๋…ธ๋ ฅ๊ณผ ๊ฐ•๋ ฅํ•œ ๊ทœ์œจ(discipline)์ด ์š”๊ตฌ๋œ๋‹ค [14]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์•„ํ‚คํ…์ฒ˜ ์›์น™] -- [[Feature-Sliced Design]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๋ฅผ ๊ธฐ์ˆ ์ ์ธ ํŒŒ์ผ ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(Feature)์ด๋‚˜ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™) ๋ฐ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์—์„œ ์‹คํ˜„ํ•œ๋‹ค [15-17]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ ํ•˜์œ„ ๋ ˆ์ด์–ด๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜์กด์„ฑ์„ ์ œ์–ด(DIP์™€ ์œ ์‚ฌ)ํ•˜์—ฌ, ๋…๋ฆฝ์ ์ธ ์ฝ”๋“œ ๋ชจ๋“ˆํ™”๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [16, 17]. - -#### [React ๊ตฌํ˜„ ํŒจํ„ด ๋ฐ ๊ธฐ์ˆ ] -- [[Custom Hooks]] - - ์—ฐ๊ฒฐ ์ด์œ : React์—์„œ DRY ์›์น™์„ ์‹คํ˜„ํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ UI์™€ ๋ถ„๋ฆฌํ•˜์—ฌ SRP๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฆฌํŒฉํ† ๋ง ๋‹จ์œ„์ด์ž ๋„๊ตฌ์ด๋‹ค [10, 18]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ํผ(Form) ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๋ณต์žกํ•œ ๋…ผ๋ฆฌ๋ฅผ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ(KISS) ์œ ์ง€ํ•˜๋Š” ํŒจํ„ด์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [9]. -- [[Component Composition]] - - ์—ฐ๊ฒฐ ์ด์œ : OCP(๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)๋ฅผ React์—์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ํŒจํ„ด์œผ๋กœ, ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  `children`์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์กฐํ•ฉ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค [7, 8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: React ํ™˜๊ฒฝ์—์„œ ์ƒ์† ์—†์ด ํ•ฉ์„ฑ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. - -### Deeper Research Questions - -- React์˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ ํด๋ž˜์Šค ์ƒ์†์„ ์ „์ œ๋กœ ํ•œ LSP(๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)๋Š” ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ์‹œ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์žฌํ•ด์„๋˜๊ณ  ์ ์šฉ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€? -- DRY ์›์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ๊ณตํ†ต ๋กœ์ง์„ ์ถ”์ƒํ™”ํ•  ๋•Œ, ์ง€๋‚˜์นœ ์ถ”์ƒํ™”๋ฅผ ๊ฒฝ๊ณ„ํ•˜๋Š” KISS ์›์น™๊ณผ ์ถฉ๋Œํ•œ๋‹ค๋ฉด ์ด๋ฅผ ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•œ ์‹ค๋ฌด์ ์ธ ๊ธฐ์ค€(์˜ˆ: Rule of three) ์™ธ์— ์–ด๋–ค ์ฒ™๋„๊ฐ€ ์žˆ๋Š”๊ฐ€? -- ISP(์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)๋ฅผ ์œ„๋ฐฐํ•˜์—ฌ ๊ฑฐ๋Œ€ํ•œ Props ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ React ์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- Feature-Sliced Design(FSD)๊ณผ ๊ฐ™์ด ๊ณ„์ธต๊ณผ ๊ทœ์น™์ด ์—„๊ฒฉํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•  ๋•Œ, YAGNI ์›์น™์„ ํ•จ๊ป˜ ์ ์šฉํ•˜์—ฌ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- SRP๋ฅผ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด 300์ค„ ์ด์ƒ์˜ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์ˆ˜์˜ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” Props ๋“œ๋ฆด๋ง(Prop Drilling) ๋ฌธ์ œ๋ฅผ ์•„ํ‚คํ…์ฒ˜ ์ธก๋ฉด์—์„œ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** 300์ค„์ด ๋„˜๋Š” ๋น„๋Œ€ํ•ด์ง„ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์ƒํƒœ ๊ด€๋ฆฌ๋‚˜ API ํ˜ธ์ถœ ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์œผ๋กœ, ๋…๋ฆฝ์ ์ธ UI ์š”์†Œ๋Š” ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ชผ๊ฐœ์–ด SRP์™€ Clean Code๋ฅผ ์‹คํ˜„ํ•œ๋‹ค [5, 18]. -- **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š” ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฏธ๋ž˜ ๊ธฐ๋Šฅ๊นŒ์ง€ ํฌํ•จํ•˜์ง€ ์•Š๊ณ (YAGNI), ๋Œ€์‹  ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์‰ฝ๊ฒŒ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋„๋ก ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ํ™œ์šฉํ•œ OCP ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค [7, 9]. -- **Operation / Maintenance:** ESLint ๋ฐ Prettier์™€ ๊ฐ™์€ ๋„๊ตฌ์™€ Husky๋ฅผ ์—ฐ๋™ํ•˜์—ฌ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ฝ”๋“œ๊ฐ€ ์ปค๋ฐ‹๋˜๊ธฐ ์ „ Clean Code ๊ทœ์น™๊ณผ ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™์ด ์ž๋™ ์ค€์ˆ˜๋˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค [19]. -- **Learning Path:** ์ฒ˜์Œ React๋ฅผ ๋ฐฐ์šธ ๋•Œ๋Š” KISS ์›์น™์— ์ž…๊ฐํ•œ ๋‹จ์ˆœํ•œ ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ์„ ์—ฐ์Šตํ•˜๊ณ , ์ ์ฐจ DRY๋ฅผ ์œ„ํ•œ ์ปค์Šคํ…€ ํ›… ๋ถ„๋ฆฌ๋ฅผ ๊ฑฐ์ณ SOLID ์›์น™์ด ๊ฒฐํ•ฉ๋œ ๋Œ€๊ทœ๋ชจ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋กœ ํ•™์Šต์„ ํ™•์žฅํ•œ๋‹ค. -- **My Project Relevance:** ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐฉ๋Œ€ํ•œ ๊ฐ์ฒด ์†์„ฑ์ด props๋กœ ์ „๋‹ฌ๋˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ์ ๊ฒ€ํ•˜์—ฌ(ISP ์ ์šฉ), ์ฝ”๋“œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์— ์ฆ‰์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. - -### Adjacent Topics - -- [[State Management Architecture]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปดํฌ๋„ŒํŠธ ๋ ˆ๋ฒจ์—์„œ์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ฅผ ๋„˜์–ด, Context API, Zustand, Redux ๋“ฑ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•  ๋•Œ ๊ฐ ๋„๋ฉ”์ธ์˜ ์ƒํƒœ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ(SRP)ํ•˜๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ• ์ง€ ํƒ๊ตฌํ•œ๋‹ค. -- [[Frontend Performance Optimization]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: Clean Code์™€ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ(์˜ˆ: ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…, ์ง€์—ฐ ๋กœ๋”ฉ)๊ฐ€ React ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ(Core Web Vitals)์„ ์–ด๋–ป๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š”์ง€ ์—ฐ๊ณ„ํ•˜์—ฌ ์กฐ์‚ฌํ•œ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Code Review.md b/00_Raw/Code Review.md deleted file mode 100644 index 5436d57b..00000000 --- a/00_Raw/Code Review.md +++ /dev/null @@ -1,56 +0,0 @@ -# [[Code Review]] - -## ๐Ÿ“Œ Brief Summary -์ฝ”๋“œ ๋ฆฌ๋ทฐ(Code Review)๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ํŒ€์›(๋™๋ฃŒ)์ด ๊ฒ€ํ† ํ•˜์—ฌ ์Šน์ธํ•˜๋Š” ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ํ˜‘์—… ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค [1, 2]. ์ฃผ๋กœ Pull Request(PR) ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๋‹จ๋…์œผ๋กœ ์ž˜๋ชป๋œ ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํŒ€ ๋‚ด ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค [1]. ์ตœ๊ทผ ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ๊ฒ€ํ† ๋ฅผ ๋„˜์–ด Storybook๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ฒฐํ•ฉํ•œ '์‹œ๊ฐ์  ๋ฆฌ๋ทฐ(Visual Review)'๋กœ ํ™•์žฅ๋˜์–ด ์˜๋„์น˜ ์•Š์€ UI ๋ณ€๊ฒฝ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [3]. - -## ๐Ÿ“– Core ์†Œ์Šค์— ๊ธฐ๋ฐ˜ํ•œ Core Content -- **๋™๋ฃŒ ๊ฒ€ํ† (Peer Review)์˜ ์—ญํ•  ๋ฐ ์ด์ **: ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(feature branch)์—์„œ ์ž‘์—…์„ ๋งˆ์นœ ํ›„ ๋ณ‘ํ•ฉ์„ ์œ„ํ•œ Pull Request(PR)๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด๋•Œ ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ํŒ€์›์—๊ฒŒ ๊ฒ€ํ† ์™€ ์Šน์ธ์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 4]. ๋ฆฌ๋ทฐ์–ด๋Š” ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ฉฐ, ์ž‘์„ฑ์ž๊ฐ€ ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žฌํ‘ธ์‹œ(push)ํ•˜์—ฌ ์ตœ์ข… ์Šน์ธ์„ ๋ฐ›์œผ๋ฉด ๋ณ‘ํ•ฉ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค [5]. ์ด๋Š” ๋‹จ์ผ ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ์ธํ•œ ์ž˜๋ชป๋œ ๋ณ‘ํ•ฉ์„ ๋ง‰๊ณ , ํŒ€์› ๊ฐ„์˜ ๊ฑด์ „ํ•œ ๋ฆฌ๋ทฐ ์Šต๊ด€๊ณผ ํ˜‘์—…์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค [1, 6]. -- **ํšจ์œจ์ ์ธ PR ์—ํ‹ฐ์ผ“**: ์›ํ™œํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด์„œ๋Š” PR์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋‹จ์ผ ์ž‘์—…(Single task)์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค [2]. ๋ฆฌ๋ทฐ์–ด๊ฐ€ ํ•œ ๋ฒˆ์— 2,000์ค„ ์ด์ƒ์˜ ๋ฐฉ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๋„๋ก ์š”๊ตฌํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, PR ๊ทœ๋ชจ๊ฐ€ ์ž‘์„์ˆ˜๋ก ๋” ๋น ๋ฅด๊ณ  ์ฒ ์ €ํ•˜๊ฒŒ ๊ฒ€ํ† ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 7]. -- **์‹œ๊ฐ์  ๋ฆฌ๋ทฐ(Visual Review)์˜ ๋„์ž…**: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ PR ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ์ฝ”๋“œ์˜ ๋…ผ๋ฆฌ ๊ฒ€ํ† ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹œ๊ฐ์  ํšŒ๊ท€(Visual Regression) ๊ฒ€ํ† ๊ฐ€ ํ•„์ˆ˜๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [3]. ๊ฐœ๋ฐœ์ž๋Š” Storybook์„ ํ™œ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ตฌ์ถ•ํ•˜๊ณ , Chromatic์ด๋‚˜ Happo ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค [3, 8]. -- **์ž๋™ํ™”๋œ ์‹œ๊ฐ์  ํšŒ๊ท€ ๊ฐ์ง€**: PR์ด ์—ด๋ฆฌ๋ฉด ์ด ๋„๊ตฌ๋“ค์ด ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋ทฐํฌํŠธ ํ™˜๊ฒฝ์—์„œ ์ž๋™์œผ๋กœ ๋ชจ๋“  UI ์ƒํƒœ์˜ ์Šคํฌ๋ฆฐ์ƒท์„ ์บก์ฒ˜ํ•˜๊ณ  ์ด์ „ ๊ธฐ์ค€์„ (baseline)๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค [9, 10]. ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ์ƒ‰์ƒ ๋“ฑ์— ์˜๋„์น˜ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด PR์— ํ•ด๋‹น ์‚ฌํ•ญ์ด ์ˆ˜๋™ ๊ฒ€ํ†  ๋Œ€์ƒ์œผ๋กœ ํ‘œ์‹œ(flagged)๋˜์–ด ๋ฒ„๊ทธ๊ฐ€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค [3]. ๋”๋ถˆ์–ด, ์‹œ๊ฐ์  ๊ฒ€ํ†  ๋„๊ตฌ๋Š” ์‹œ๊ฐ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด ์ ‘๊ทผ์„ฑ ์œ„๋ฐ˜(accessibility violations)๊นŒ์ง€ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 11]. - -## โš–๏ธ Trade-offs & Caveats -- **๋ฆฌ๋ทฐ ๋ณ‘๋ชฉ ํ˜„์ƒ ๋ฐ ๋ณต์žก๋„ ์ฆ๊ฐ€**: ํ•œ ๋ฒˆ์— ์ˆ˜์ฒœ ์ค„์— ๋‹ฌํ•˜๋Š” ํฐ ๊ทœ๋ชจ์˜ ์ฝ”๋“œ(PR)๋ฅผ ๋ฆฌ๋ทฐํ•˜๋„๋ก ์š”์ฒญํ•  ๊ฒฝ์šฐ, ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฒ ์ €ํžˆ ๊ฐ์‚ฌ(audit)ํ•˜๊ธฐ ์–ด๋ ค์›Œ ๋ฆฌ๋ทฐ ์†๋„์™€ ํ’ˆ์งˆ์ด ๋ชจ๋‘ ์ €ํ•˜๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [2]. ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” PR์„ ๋งค์šฐ ์ž‘๊ฒŒ ๋‚˜๋ˆ„์–ด ์ง€์†์ ์œผ๋กœ ๋ฆฌ๋ทฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ์ž‘์—… ๋‹จ์œ„๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ชผ๊ฐœ์•ผ ํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [2, 7]. -- **์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ์˜ ๋ถˆ์•ˆ์ •์„ฑ(Flake) ์ด์Šˆ**: ์‹œ๊ฐ์  ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด ์Šคํฌ๋ฆฐ์ƒท ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋„์ž…ํ•  ๋•Œ, ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ์  ๋ณ€๊ฒฝ์ด ์—†๋”๋ผ๋„ ์••์ถ• ๋…ธ์ด์ฆˆ, ์•ˆํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ, ๋น„๋™๊ธฐ ์—์…‹(ํฐํŠธ ๋“ฑ), ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ฏธ์„ธํ•œ ํ”ฝ์…€ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฑฐ์ง“ ์–‘์„ฑ(False positive) ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 12]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒ‰์ƒ ์˜ค์ฐจ ํ—ˆ์šฉ ๋ฒ”์œ„(color-delta tolerance)๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์Œ์†Œ๊ฑฐํ•˜๋Š” ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ๊ตฌ์„ฑ(Configuration)๊ณผ ๊ด€๋ฆฌ๊ฐ€ ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [8, 12, 13]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [ํ˜‘์—… ๋ฐ ํ˜•์ƒ ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ] -- [[Pull Request (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ ์š”์ฒญ๋˜๊ณ , ๊ฒ€ํ†  ํ”ผ๋“œ๋ฐฑ์ด ์˜ค๊ฐ€๋Š” ํ•ต์‹ฌ ํ”Œ๋žซํผ์ด์ž ๋‹จ์œ„์ž…๋‹ˆ๋‹ค [1, 2]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ ์ „ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๊ฒŒ์ดํŠธ๋กœ์„œ์˜ ๊ธฐ๋Šฅ๊ณผ ์งง๊ณ  ๋ช…ํ™•ํ•œ ์ž‘์—… ๋‹จ์œ„ ๋ถ„ํ• ์˜ ์ค‘์š”์„ฑ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -- [[Feature Branch Workflow]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ์Šคํ…œ์„ ์‰ฝ๊ฒŒ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ์ถฉ๋Œ์ด ์ ์€ ๋ธŒ๋žœ์น˜ ์ „๋žต์ž…๋‹ˆ๋‹ค [14, 15]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ, ๊ฐ๊ฐ์˜ ํƒœ์Šคํฌ๋ฅผ ๋…๋ฆฝ๋œ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๊ณ  ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆํ•˜๋Š” ์ „์ฒด ํ๋ฆ„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [์ž๋™ํ™” ๋ฐ ํ’ˆ์งˆ ๊ฒ€์ฆ ๋„๊ตฌ] -- [[Visual Regression Testing]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ ์œก์•ˆ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ํž˜๋“  ์˜๋„์น˜ ์•Š์€ ๋ ˆ์ด์•„์›ƒ/์ƒ‰์ƒ ๋ณ€๊ฒฝ์„ ์ž๋™ํ™” ๋„๊ตฌ๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ์ฐพ์•„๋‚ด์–ด ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค [3, 9]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Chromatic์ด๋‚˜ Happo๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ PR ๋ฆฌ๋ทฐ์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ด๊ณ  ์•ˆ์ •์ ์ธ UI๋ฅผ ๋ฐฐํฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions - -- PR์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋‹จ์ผ ์ž‘์—…(Single task)์— ์ง‘์ค‘ํ•˜๋„๋ก ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ž‘์—…์„ ๋ถ„ํ• ํ•˜๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•๋ก ๊ณผ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ํŒ€์—์„œ ์Ÿ์•„์ง€๋Š” ์ˆ˜๋งŽ์€ PR๊ณผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์š”์ฒญ์„ ๋ณ‘๋ชฉ ํ˜„์ƒ ์—†์ด ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐฐํฌ ์†๋„๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual Regression Testing) ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฏธ์„ธํ•œ ๋ Œ๋”๋ง ์ฐจ์ด(Flake)๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€์„ (Baseline)์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์„ฑ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ ์‹œ๊ฐ์  ํšŒ๊ท€(Visual changes) ๊ฐ์ง€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ(Accessibility tests)๋ฅผ ํ•จ๊ป˜ ์ž๋™ํ™”ํ–ˆ์„ ๋•Œ ์–ป๊ฒŒ ๋˜๋Š” ์ด์ ๊ณผ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€? -- ๊ธฐ๋Šฅ ๋ถ„๊ธฐ(Feature branch)์˜ ์ˆ˜๋ช…์ด ๊ธธ์–ด์กŒ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฆฌ๋ทฐ ๋ฐ ๋ณ‘ํ•ฉ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์ง€์†์ ์œผ๋กœ ์งง์€ ์ฃผ๊ธฐ์˜ ๋ฆฌ๋ทฐ๋ฅผ ์œ ๋„ํ•˜๋Š” ๋ฌธํ™”๋Š” ์–ด๋–ป๊ฒŒ ์ •์ฐฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹ํ•˜๊ณ  PR์„ ์ƒ์„ฑํ•  ๋•Œ, ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก 200์ค„ ๋ฏธ๋งŒ์˜ ์ž‘์€ ๋‹จ์œ„๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ชผ๊ฐœ์–ด ์˜ฌ๋ฆฌ๊ณ  ๋ฌด์—‡์ด ์™œ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 7]. -- **System Design:** ํ”„๋ก ํŠธ์—”๋“œ ์„ค๊ณ„ ์‹œ Storybook์„ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“  UI ์ปดํฌ๋„ŒํŠธ์˜ ๋‹ค์–‘ํ•œ ์ƒํƒœ(loading, error ๋“ฑ)๋ฅผ ์บก์Аํ™”ํ•ด ๋‘๋ฉด, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ์— ์ด ์ƒํƒœ๋“ค์„ ์ž๋™์œผ๋กœ ์Šคํฌ๋ฆฐ์ƒท์œผ๋กœ ์ฐ์–ด ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค [16]. -- **Operation / Maintenance:** CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์— Chromatic์ด๋‚˜ Happo ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์—ฐ๋™์‹œ์ผœ, ํŒ€์›์ด PR์„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์‹œ๊ฐ์  ๋ณ€๋™ ์‚ฌํ•ญ(diff)์ด๋‚˜ ์ ‘๊ทผ์„ฑ ์œ„๋ฐ˜ ๋‚ด์—ญ์ด PR ์ฒดํฌ ๋ฆฌ์ŠคํŠธ์— ๋ฐฐ์ง€๋กœ ์ž๋™ ๋ณด๊ณ ๋˜๋„๋ก ์šด์˜ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [17]. -- **Learning Path:** Git์˜ ๊ธฐ์ดˆ์ ์ธ ๋ธŒ๋žœ์น˜ ์‚ฌ์šฉ๋ฒ•์„ ๋ฐฐ์šด ํ›„, ํŒ€ ํ˜‘์—…์˜ ํ•ต์‹ฌ์ธ PR ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ์š”์ฒญ ๊ณผ์ •(GitHub Flow ๋“ฑ)์„ ์ตํžˆ๊ณ , ๋‚˜์•„๊ฐ€ ์‹œ๊ฐ์  ํ…Œ์ŠคํŒ… ๋„๊ตฌ๊ฐ€ PR์— ์–ด๋–ป๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๋Š”์ง€๋ฅผ ์‹ค์Šตํ•ด๋ณด๋Š” ํ๋ฆ„์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 18]. -- **My Project Relevance:** ์†Œ๊ทœ๋ชจ 3์ธ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๋ณต์žกํ•œ Git-Flow ๋Œ€์‹  ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฑ„ํƒํ•˜๊ณ , ์ฝ”๋“œ ๋ณ‘ํ•ฉ ์‹œ ๋ฐ˜๋“œ์‹œ 1๋ช… ์ด์ƒ์˜ ํ”ผ์–ด ๋ฆฌ๋ทฐ(Peer review)๋ฅผ ๋ฐ›๋„๋ก ๊ทœ์น™์„ ์ •ํ•ด ๋ฒ„๊ทธ ์—†๋Š” ์•ˆ์ •์  ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 14]. - -### Adjacent Topics - -- [[Continuous Integration (CI)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: PR์ด ์˜ฌ๋ผ์™”์„ ๋•Œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์‚ฌ์ „์— ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์—ฌ๋ถ€, ๋นŒ๋“œ ์„ฑ๊ณต ์—ฌ๋ถ€ ๋“ฑ์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•ด์ฃผ๋Š” ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ตฌ์ถ•์— ๋Œ€ํ•ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 19]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Context Engineering.md b/00_Raw/Context Engineering.md deleted file mode 100644 index fed671a9..00000000 --- a/00_Raw/Context Engineering.md +++ /dev/null @@ -1,73 +0,0 @@ -# [[Context Engineering]] - -## ๐Ÿ“Œ Brief Summary -Context Engineering(์ปจํ…์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง)์€ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM) ๊ธฐ๋ฐ˜ ์—์ด์ „ํŠธ๊ฐ€ ๊ธด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ์— ์ง„์ž…ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ํ๋ ˆ์ด์…˜ํ•˜๊ณ  ๊ตฌ์กฐํ™”ํ•˜๋Š” ์‹œ์Šคํ…œ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค [1-3]. ์ด๋Š” ๋‹จ์ผ ํ„ด์˜ ์ง€์‹œ๋ฌธ์„ ์ตœ์ ํ™”ํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง(Prompt Engineering)์„ ๋„˜์–ด, ๋‹ค์ค‘ ํ„ด์— ๊ฑธ์ณ ์–ด๋– ํ•œ ์ •๋ณด๋ฅผ ๋ณด์กด, ์••์ถ•, ๊ฒ€์ƒ‰ ๋ฐ ์ฃผ์ž…ํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ถ”๋ก  ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•œ๋‹ค [1, 2]. ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค ์—”์ง€๋‹ˆ์–ด๋ง(Agent Harness Engineering)์˜ ํ•ต์‹ฌ ํ•˜์œ„ ๋ ˆ์ด์–ด์ธ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž(C-component)๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋˜๋ฉฐ, ์—์ด์ „ํŠธ์˜ ์‹ ๋ขฐ์„ฑ ํ–ฅ์ƒ๊ณผ ํ† ํฐ ๋น„์šฉ ์ตœ์ ํ™”, ๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆ ์œ ์ง€์— ๊ฒฐ์ •์ ์ธ ์—ญํ• ์„ ํ•œ๋‹ค [4-6]. - -## ๐Ÿ“– Core Content - -* **ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์—์„œ์˜ ์ง„ํ™”:** AI ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์˜ ๋ฐœ์ „์€ '๋ฌด์—‡์„ ๋งํ•  ๊ฒƒ์ธ๊ฐ€(Prompt Engineering)'์—์„œ '์–ด๋–ค ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค„ ๊ฒƒ์ธ๊ฐ€(Context Engineering)'๋ฅผ ๊ฑฐ์ณ, '์–ด๋–ค ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ๊ฒƒ์ธ๊ฐ€(Harness Engineering)'๋กœ ์ง„ํ™”ํ–ˆ๋‹ค [1, 3, 7-10]. Context Engineering์€ ์—์ด์ „ํŠธ์˜ ์ž‘์—… ๊ธฐ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ์ง€์‹œ ์‚ฌํ•ญ์˜ ํ‘œ๋ฅ˜(instruction drift)์™€ ์ปจํ…์ŠคํŠธ ๋ถ€ํŒจ(context rot)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค [3, 9]. -* **๋Šฅ๋™์  ์ง€์‹ ํ•„ํ„ฐ๋กœ์„œ์˜ ์—ญํ• :** Context Engineering์€ ๋‹จ์ˆœํ•œ ์ •๋ณด์˜ ์ˆ˜๋™์  ์ „๋‹ฌ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ชจ๋ธ์ด ์„ฑ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋Šฅ๋™์  ์ธ์‹ ํ•„ํ„ฐ(active epistemic filter)๋กœ ์ž‘๋™ํ•œ๋‹ค [11, 12]. ํ•˜๋„ค์Šค๋Š” ์ž˜๋ฆผ(Truncation), ์š”์•ฝ(Summarization), ๊ฒ€์ƒ‰ ์ฆ๊ฐ•(Retrieval-augmented), ์ง€์‹ ๊ทธ๋ž˜ํ”„(Knowledge graph), ํ–‰๋™์œผ๋กœ์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ(Memory-as-action) ๋“ฑ์˜ ์ „๋žต์„ ํ†ตํ•ด ์ปจํ…์ŠคํŠธ๋ฅผ ์Šค์ผ€์ค„๋งํ•œ๋‹ค [13-17]. -* **์ดˆ์žฅ๋ฌธ ์ปจํ…์ŠคํŠธ ๋ชจ๋ธ(Ultra-long-context models) ๋Œ€์‘:** 100๋งŒ ํ† ํฐ ์ด์ƒ์˜ ์œˆ๋„์šฐ๋ฅผ ๊ฐ€์ง„ ๋ชจ๋ธ์ด ๋“ฑ์žฅํ–ˆ์Œ์—๋„, ์‹œํ€€์Šค ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ์ดˆ๊ธฐ๋‚˜ ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ์ •๋ณด์— ๋Œ€ํ•œ ์ฃผ์˜๋ ฅ์ด ๋–จ์–ด์ง€๋Š” '์ฃผ์˜๋ ฅ ํฌ์„(attention dilution)' ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค [18, 19]. ๋”ฐ๋ผ์„œ Context Engineering์˜ ์ฃผ์š” ๊ณผ์ œ๋Š” ๋‹จ์ˆœํžˆ '๋ฌด์—‡์„ ๋‚จ๊ธธ ๊ฒƒ์ธ๊ฐ€(retention)'์—์„œ '๋ฌด์—‡์„ ๋‹๋ณด์ด๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€(salience)'๋กœ ์ด๋™ํ–ˆ์œผ๋ฉฐ, ๋ชจ๋ธ์˜ ์ฃผ์˜๋ ฅ์ด ๊ฐ€์žฅ ๊ฐ•ํ•œ ์œ„์น˜์— ์ค‘์š” ์ •๋ณด๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ตฌ์กฐ์  ๋‹ป(attention anchors)์ด๋‚˜ ๊ณ„์ธต์  ์ •๋ณด ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค [18, 19]. -* **์ ์‘ํ˜• ์ปจํ…์ŠคํŠธ ์••์ถ•(Adaptive Context Compaction):** ํ† ํฐ ์˜ˆ์‚ฐ์ด ๊ณ ๊ฐˆ๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด, ์ปจํ…์ŠคํŠธ ์••๋ ฅ์— ๋”ฐ๋ผ 5๋‹จ๊ณ„(70% ๊ฒฝ๊ณ , 80% ๊ด€์ฐฐ ๋งˆ์Šคํ‚น, 85% ๋น ๋ฅธ ๊ฐ€์ง€์น˜๊ธฐ, 90% ๊ณต๊ฒฉ์  ๋งˆ์Šคํ‚น, 99% ์ „์ฒด ์š”์•ฝ)์˜ ์ ์ง„์ ์ธ ์••์ถ• ํŒŒ์ดํ”„๋ผ์ธ์„ ์šด์˜ํ•œ๋‹ค [20-22]. ๋Œ€๊ทœ๋ชจ ๋„๊ตฌ ์ถœ๋ ฅ(์˜ˆ: ์ˆ˜์ฒœ ์ค„์˜ ์ฝ”๋“œ๋‚˜ ๋กœ๊ทธ)์€ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ ์œ ํ•˜๋ฏ€๋กœ, ์ด๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด๋‚˜ ์Šคํฌ๋ž˜์น˜ ํŒŒ์ผ๋กœ ์˜คํ”„๋กœ๋”ฉ(offloading)ํ•˜๊ณ  ๋ชจ๋ธ์—๋Š” ์งง์€ ์š”์•ฝ๊ณผ ํŒŒ์ผ ์ฐธ์กฐ(reference)๋งŒ ๋‚จ๊ธด๋‹ค [22-25]. -* **์ด์ค‘ ๋ฉ”๋ชจ๋ฆฌ ์•„ํ‚คํ…์ฒ˜(Dual-Memory Architecture):** ์ „๋žต์  ์‚ฌ๊ณ ๋ฅผ ์œ„ํ•œ ์ปจํ…์ŠคํŠธ์™€ ๋‹จ๊ธฐ ์‹คํ–‰์„ ์œ„ํ•œ ์ปจํ…์ŠคํŠธ์˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ์ „์ฒด ๋Œ€ํ™” ์ด๋ ฅ์„ ์š”์•ฝํ•œ ์ผํ™”์  ๋ฉ”๋ชจ๋ฆฌ(Episodic memory)์™€ ์ตœ๊ทผ ๋ช‡ ๋ฒˆ์˜ ์ƒ์„ธ ๊ตํ™˜ ๊ธฐ๋ก์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ์ž‘์—… ๋ฉ”๋ชจ๋ฆฌ(Working memory)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•จ๊ป˜ ์ฃผ์ž…(Combined injection)ํ•œ๋‹ค [26-28]. -* **๋Ÿฐํƒ€์ž„ ๋งฅ๋ฝ ์ฃผ์ž…(Context-Injected Recovery & Reminders):** ๊ธด ์„ธ์…˜์—์„œ ์—์ด์ „ํŠธ๊ฐ€ ์ดˆ๊ธฐ ์ง€์‹œ๋ฅผ ์žŠ๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด, ๋„๊ตฌ ์‹คํ–‰์˜ ์‹คํŒจ๋‚˜ ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์ ์ ˆํ•œ ์‹œ์Šคํ…œ ์•Œ๋ฆผ(System Reminders) ๋ฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ ์ง€์นจ์„ ์ปจํ…์ŠคํŠธ์— ์ฆ‰์‹œ ์ฃผ์ž…ํ•˜์—ฌ ํ–‰๋™์„ ๊ต์ •ํ•œ๋‹ค [29-31]. - -## โš–๏ธ Trade-offs & Caveats - -* **์ •๋ณด ๋ณด์กด๊ณผ ๋ณด์•ˆ์˜ ์ƒ์ถฉ ๊ด€๊ณ„ (Retention-Security Coupling):** ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋ฅผ ๊ธธ๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ์—์ด์ „ํŠธ์˜ ์ž‘์—… ์—ฐ์†์„ฑ๊ณผ ์„ฑ๋Šฅ์€ ํ–ฅ์ƒ๋˜์ง€๋งŒ, ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋œ ์•…์˜์  ํŽ˜์ด๋กœ๋“œ(๊ฐ„์ ‘ ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž…)๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด์— ๋” ์˜ค๋ž˜ ์ฒด๋ฅ˜ํ•˜๊ฒŒ ๋˜์–ด ๋ณด์•ˆ ์œ„ํ—˜์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋ฐ˜๋ฉด ๋ณด์•ˆ์„ ์œ„ํ•ด ์งง๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ์ž‘์—… ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ๋”œ๋ ˆ๋งˆ๊ฐ€ ์žˆ๋‹ค [32-34]. -* **์ปจํ…์ŠคํŠธ ๋ถ€ํŒจ (Context Rot) ๋ฐ ํ† ํฐ ๋น„์šฉ:** ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ˆ„์ ํ•˜๋ฉด ๋ชจ๋ธ์˜ ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์งˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ† ํฐ ์†Œ๋น„๋Ÿ‰์ด ์ž‘์—… ๋ณต์žก๋„์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ดˆ์„ ํ˜•์ (superlinear)์œผ๋กœ ์ฆ๊ฐ€ํ•˜์—ฌ ๊ฒฝ์ œ์  ๋น„์šฉ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ปค์ง„๋‹ค [35-37]. -* **๊ฒ€์ƒ‰ ์ง€์—ฐ (Retrieval Latency Injection):** ๋ชจ๋“  ๊ธฐ๋ก์„ ์ €์žฅํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ๊ฒ€์ƒ‰ํ•˜๋Š” RAG ๋ฐฉ์‹์€ ์ •๋ณด ์†์‹ค์„ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ธด ์ˆ˜ํ‰์„ ์˜ ์ž‘์—…์—์„œ๋Š” ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„ ํ˜•์ ์œผ๋กœ ๋ˆ„์ ๋˜๋Š” ์‹ฌ๊ฐํ•œ ์ง€์—ฐ ์‹œ๊ฐ„(Latency)์„ ์ดˆ๋ž˜ํ•œ๋‹ค [38, 39]. -* **์••์ถ• ์‹œ ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜(Provenance) ์ƒ์‹ค:** ์ปจํ…์ŠคํŠธ์˜ ์š”์•ฝ ๋ฐ ์••์ถ•์€ ์ •๋ณด์˜ ๋ฐ€๋„๋ฅผ ๋†’์ด์ง€๋งŒ, ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์–ด๋””์—์„œ ์™”๋Š”์ง€์— ๋Œ€ํ•œ ์ถœ์ฒ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์šฉํžˆ ํ๊ธฐํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค [40, 41]. ์ด๋ฅผ ๋ณด์™„ํ•˜์ง€ ์•Š์œผ๋ฉด ํ™˜๊ฐ์ด๋‚˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋””๋ฒ„๊น…์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค [42]. -* **์ ๋Œ€์  ์ฝ˜ํ…์ธ ์˜ ๊ฒ€์ƒ‰ ๊ฒŒ์ž„ํ™” (Retrieval gaming):** ์™ธ๋ถ€ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์ƒ‰ํ•ด ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ๊ณต๊ฒฉ์ž๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ๋ฏธ๋ž˜ ์ฟผ๋ฆฌ์™€ ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ์ด ๋†’๋„๋ก ์•…์˜์  ์ง€์‹œ์‚ฌํ•ญ์„ ์กฐ์ž‘ํ•˜๋ฉด, ํ•˜๋„ค์Šค๊ฐ€ ์ด๋ฅผ ๊ฐ€์žฅ ๊ด€๋ จ์„ฑ ๋†’์€ ์ •๋ณด๋กœ ์ฐฉ๊ฐํ•˜์—ฌ ์šฐ์„ ์ ์œผ๋กœ ์ปจํ…์ŠคํŠธ์— ์ฃผ์ž…ํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค [43, 44]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Agent Harness (์—์ด์ „ํŠธ ํ•˜๋„ค์Šค)]] - - ์—ฐ๊ฒฐ ์ด์œ : Context Engineering์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ์ƒ์œ„ ์ธํ”„๋ผ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [8, 10, 45]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ๊ฐ€ ๋‹จ์ˆœํžˆ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋‹ค๋“ฌ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์–ด๋–ป๊ฒŒ ์‹คํ–‰ ๋ฃจํ”„, ๋„๊ตฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ ์Šคํ† ์–ด์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ณ  ํ†ต์ œ๋œ ์ž์œจ ์—์ด์ „ํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [4, 46]. - -- [[C-component (Context Manager)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค ๊ตฌ์กฐ ๋‚ด์—์„œ Context Engineering ์ •์ฑ…(์••์ถ•, ๊ฒ€์ƒ‰, ์šฐ์„ ์ˆœ์œ„ ํ• ๋‹น ๋“ฑ)์„ ์ „๋‹ดํ•˜์—ฌ ์ง‘ํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ชจ๋“ˆ์ด๋‹ค [46, 47]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋งค ํ„ด๋งˆ๋‹ค ๋ชจ๋ธ์˜ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ์— ์–ด๋–ค ์ •๋ณด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•„ํ„ฐ๋ง๋˜์–ด ๋“ค์–ด๊ฐ€๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [4, 47]. - -- [[Adaptive Context Compaction (์ ์‘ํ˜• ์ปจํ…์ŠคํŠธ ์••์ถ•)]] - - ์—ฐ๊ฒฐ ์ด์œ : Context Engineering์ด ํ† ํฐ ์˜ˆ์‚ฐ ์ดˆ๊ณผ(OOM)๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฑ„ํƒํ•˜๋Š” ํ•„์ˆ˜์ ์ธ ์„ธ๋ถ€ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค [21, 22]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: 70%๋ถ€ํ„ฐ 99%๊นŒ์ง€์˜ ์ ์ง„์  ์••๋ ฅ ํ•œ๊ณ„์น˜์— ๋”ฐ๋ผ ๊ด€์ฐฐ ๋‚ด์šฉ ๋งˆ์Šคํ‚น, ๋น ๋ฅธ ๊ฐ€์ง€์น˜๊ธฐ, ์ „์ฒด ์š”์•ฝ ๋“ฑ์ด ์–ด๋–ป๊ฒŒ ๋‹จ๊ณ„์ ์œผ๋กœ ์ ์šฉ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค [22, 48]. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ์ตœ์ ํ™” ๋ฐ ๋ฌธ์ œ ํ˜„์ƒ] -- [[Context Rot (์ปจํ…์ŠคํŠธ ๋ถ€ํŒจ)]] - - ์—ฐ๊ฒฐ ์ด์œ : ํšจ์œจ์ ์ธ Context Engineering์ด ๋ถ€์žฌํ•  ๋•Œ ์žฅ๊ธฐ ์‹คํ–‰ ์—์ด์ „ํŠธ๊ฐ€ ๊ฒช๊ฒŒ ๋˜๋Š” ํ•ต์‹ฌ ์‹คํŒจ ๋ชจ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [35-37]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ•˜๋„ค์Šค๊ฐ€ ์™œ ์ ๊ทน์ ์ธ ํ‡ด๊ฑฐ(eviction) ์ •์ฑ…๊ณผ ์ •๋ณด ์••์ถ•์„ ์Šค์ผ€์ค„๋งํ•ด์•ผ๋งŒ ์ดˆ์„ ํ˜•์ ์ธ ๋น„์šฉ ์ฆ๊ฐ€์™€ ๋ชจ๋ธ์˜ ์ง€์‹œ ๋ง๊ฐ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [36, 37, 49]. - -- [[Indirect Prompt Injection (๊ฐ„์ ‘ ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž…)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์—์ด์ „ํŠธ๊ฐ€ ์™ธ๋ถ€ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ด ์ปจํ…์ŠคํŠธ์— ํฌํ•จ์‹œํ‚ค๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์น˜๋ช…์ ์ธ ์‹œ์Šคํ…œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด๋‹ค [50, 51]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Context Engineering ์„ค๊ณ„ ์‹œ ์ง€์‹œ(instruction) ๋ฐ์ดํ„ฐ์™€ ์ •๋ณด(data) ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ  ์ถœ์ฒ˜(provenance)๋ฅผ ์ถ”์ ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ณด์•ˆ์  ํ•„์š”์„ฑ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [50, 51]. - -### Deeper Research Questions - -- 100๋งŒ ํ† ํฐ ์ด์ƒ์˜ ์ดˆ์žฅ๋ฌธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋ธ์—์„œ '์ฃผ์˜๋ ฅ ํฌ์„(Attention Dilution)'์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋„ค์Šค ๋ ˆ๋ฒจ์—์„œ ๊ตฌ์กฐ์  ๋‹ป(Attention Anchors)์„ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  ์Šค์ผ€์ค„๋งํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ์ปจํ…์ŠคํŠธ ๋ณด์กด ๊ธฐ๊ฐ„์ด ๊ธธ์–ด์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์ง€๋งŒ ๋™์‹œ์— ์•…์˜์  ํ”„๋กฌํ”„ํŠธ์˜ ์ฒด๋ฅ˜ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋Š” ์ƒ์ถฉ ๊ด€๊ณ„(Retention-Security Coupling)๋ฅผ ์ˆ˜ํ•™์ ์œผ๋กœ ๋ชจ๋ธ๋งํ•˜๊ณ  ๊ณต๋™ ์ตœ์ ํ™”(Joint Optimization)ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ์—์ด์ „ํŠธ๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  ์••์ถ•ํ•˜๋Š” 'ํ–‰๋™์œผ๋กœ์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ(Memory-as-action)' ๋ฐฉ์‹์€ ํ•˜๋„ค์Šค๊ฐ€ ์ค‘์•™์—์„œ ๊ฐ•์ œํ•˜๋Š” ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์š”์•ฝ(Rule-based Summarization) ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•˜์—ฌ ๊ฒฝ์ œ์„ฑ ๋ฐ ์ •ํ™•๋„ ๋ฉด์—์„œ ์–ด๋–ค ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š”๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ๋„๊ตฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๋‚˜ ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ ์™ธ๋ถ€ ์•„ํ‹ฐํŒฉํŠธ ์ €์žฅ์†Œ๋กœ ์˜คํ”„๋กœ๋”ฉ(offloading)ํ•  ๋•Œ, ๋ชจ๋ธ์ด ํ•„์š”์‹œ ์ง€์—ฐ ์—†์ด ๋‹ค์‹œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜๋ฏธ์  ํฌ์ธํ„ฐ(semantic pointer)๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- ์ปจํ…์ŠคํŠธ ์••์ถ•(Compaction) ๊ณผ์ •์—์„œ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜(Provenance)์˜ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์—์ด์ „ํŠธ๊ฐ€ ์š”์•ฝ๋œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”๋ก ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฐ์„ ์–ด๋–ป๊ฒŒ ๊ต์ •ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** LangChain์˜ DeepAgents ํ”„๋ ˆ์ž„์›Œํฌ์ฒ˜๋Ÿผ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋‹จ์ผ ๊ฑฐ๋Œ€ ํŒŒ์ผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  ๋ฏธ๋“ค์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด๋ณ„(์šฐ์„ ์ˆœ์œ„, ๋ชจ๋ธ ๋ฒค๋”๋ณ„)๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๋™์  ์ฃผ์ž… ๋ฐ ๊ฒ€์ฆ ๋ฃจํ”„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค [52-54]. -- **System Design:** ๋„๊ตฌ ์ถœ๋ ฅ ๊ฒฐ๊ณผ(์˜ˆ: ์ˆ˜์ฒœ ์ค„์˜ ์ฝ”๋“œ ๋ถ„์„ ๊ฒฐ๊ณผ)๋ฅผ ์ปจํ…์ŠคํŠธ์— ๊ทธ๋Œ€๋กœ ๋„ฃ์ง€ ์•Š๊ณ , 8,000์ž ์ด์ƒ์˜ ์ถœ๋ ฅ์€ ์Šคํฌ๋ž˜์น˜ ํŒŒ์ผ์— ์ €์žฅํ•œ ํ›„ ๋ชจ๋ธ์—๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์˜ˆ: "ํŒŒ์ผ ์ฝ๊ธฐ ์™„๋ฃŒ, 142์ค„, 4,831์ž")์™€ ์ฐธ์กฐ ํ•ธ๋“ค๋งŒ ์ œ๊ณตํ•˜๋„๋ก ๋„๊ตฌ ๊ฒฐ๊ณผ ์ตœ์ ํ™”(Tool Result Optimization) ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ•œ๋‹ค [23-25, 55]. -- **Operation / Maintenance:** ๋ชจ๋ธ API๊ฐ€ ๋ณด๊ณ ํ•˜๋Š” ์‹ค์ œ ํ”„๋กฌํ”„ํŠธ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰(prompt_tokens)์„ ๊ธฐ์ค€์œผ๋กœ, ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰์ด 80%์— ๋„๋‹ฌํ•˜๋ฉด ๊ณผ๊ฑฐ ๋„๊ตฌ ์ถœ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐ๋กœ ๋Œ€์ฒด(๋งˆ์Šคํ‚น)ํ•˜๊ณ  99% ๋„๋‹ฌ ์‹œ LLM์„ ์‚ฌ์šฉํ•ด ์ „์ฒด ๋Œ€ํ™” ์ด๋ ฅ์„ ์š”์•ฝํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ์šด์˜ํ•œ๋‹ค [20-22]. -- **Learning Path:** ์ฒ˜์Œ์—๋Š” ๋‹จ์ผ ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™”(Prompt Engineering)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ, ์—์ด์ „ํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ์„ธ์…˜์„ ๋„˜๋‚˜๋“ค๋ฉฐ ์ž‘์—…ํ•  ๋•Œ ์–ด๋–ค ๊ธฐ์–ต์„ ๋‚จ๊ธฐ๊ณ  ๋ฒ„๋ฆด์ง€ ์„ค๊ณ„ํ•˜๋Š” Context Engineering์„ ์ตํžˆ๊ณ , ์ตœ์ข…์ ์œผ๋กœ ์ด๋ฅผ ์ธํ”„๋ผ ๋ ˆ๋ฒจ์˜ ๊ฐ•์ œ ๊ทœ์น™์œผ๋กœ ์Šน๊ฒฉ์‹œํ‚ค๋Š” Harness Engineering์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•œ๋‹ค [1, 3, 7, 8, 56]. -- **My Project Relevance:** ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ, ํ† ํฐ ํ•œ๋„ ์ดˆ๊ณผ(OOM) ๋ฐฉ์ง€์™€ ์ง€์†์ ์ธ ๋ชฉํ‘œ ์ธ์ง€๋ฅผ ์œ„ํ•ด ์—ํ”ผ์†Œ๋“œ ๋ฉ”๋ชจ๋ฆฌ(Episodic Memory) ์š”์•ฝ๊ณผ ์ž‘์—… ๋ฉ”๋ชจ๋ฆฌ(Working Memory) ์œ ์ง€๋ฅผ ๋ถ„๋ฆฌ ์ ์šฉํ•˜๋Š” ๋ฐ ์ง์ ‘์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค [26-28]. - -### Adjacent Topics - -- [[Prompt Engineering]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋‹จ์ผ ํ„ด ์ƒํ˜ธ์ž‘์šฉ์—์„œ ์–ด๋–ป๊ฒŒ ์ง€์‹œ๋ฅผ ์ „๋‹ฌํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๋ชจ๋ธ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ, ๋‹ค์ค‘ ํ„ด์—์„œ ๊ตฌ์กฐ์  ์ •๋ณด ๋ฐฐ์น˜๋ฅผ ๋‹ค๋ฃจ๋Š” Context Engineering ์ด์ „ ๋‹จ๊ณ„์˜ ๊ธฐ๋ฐ˜ ์ง€์‹์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [1, 6, 7]. -- [[Retrieval-Augmented Generation (RAG)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ œํ•œ๋œ ์ปจํ…์ŠคํŠธ ์˜ˆ์‚ฐ ๋‚ด์—์„œ ์™ธ๋ถ€ ์ง€์‹์„ ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌํ•˜๊ณ  ์ฃผ์ž…ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํƒ๊ตฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์‹ฌํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค [57, 58]. - ---- -*Last updated: 2026-05-01* \ No newline at end of file diff --git a/00_Raw/DRY.md b/00_Raw/DRY.md deleted file mode 100644 index c6381252..00000000 --- a/00_Raw/DRY.md +++ /dev/null @@ -1,60 +0,0 @@ -# [[DRY]] - -## ๐Ÿ“Œ Brief Summary -DRY(Don't Repeat Yourself)๋Š” ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ํ•ต์‹ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์›์น™์ž…๋‹ˆ๋‹ค [1]. ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ  ์ด๋ฅผ ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํ–ฅํ›„ ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์™€ ์ˆ˜์ •์„ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [2]. React ํ™˜๊ฒฝ์—์„œ๋Š” ์ฃผ๋กœ ๊ณตํ†ต ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…(Custom Hooks)์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(Higher-Order Components)๋กœ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค [3, 4]. - -## ๐Ÿ“– Core Content -* **์ค‘๋ณต ์ œ๊ฑฐ์˜ ์ด์ **: ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ค‘๋ณต์„ ํ”ผํ•˜๋ฉด ํ–ฅํ›„ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ ์‹œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค [2]. ์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์œผ๋ฉด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์—ฌ๋Ÿฌ ๊ณณ์„ ์ฐพ์•„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ, DRY ์›์น™์„ ์ง€ํ‚ค๋ฉด ๋‹จ์ผ ์œ„์น˜(one place)์—์„œ๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2]. -* **React์—์„œ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•**: ๋ฐ˜๋ณต์ ์ธ ๋กœ์ง์ด ์กด์žฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋กœ์ง์„ ์ถ”์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. React์—์„œ๋Š” ์ด๋ฅผ ์ฃผ๋กœ ์ปค์Šคํ…€ ํ›…(Custom Hooks)์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(Higher-Order Components, HOC)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค [3, 4]. -* **์ ์ ˆํ•œ ์ถ”์ƒํ™” ํƒ€์ด๋ฐ**: ์„ฑ๊ธ‰ํ•œ ์ตœ์ ํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ํŠน์ • ์ฝ”๋“œ ํŒจํ„ด์ด ์ตœ์†Œ '3๋ฒˆ' ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ถ”์ƒํ™”(abstraction)๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ์ž…๋‹ˆ๋‹ค [3]. - -## โš–๏ธ Trade-offs & Caveats -* **๊ณผ๋„ํ•œ ์ถ”์ƒํ™”์˜ ์œ„ํ—˜์„ฑ**: ์ค‘๋ณต์„ ์ค„์ด๋ ค๋Š” ๋…ธ๋ ฅ์œผ๋กœ ์ธํ•ด ์ถ”์ƒํ™”๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค [5]. -* **KISS ์›์น™๊ณผ์˜ ์ถฉ๋Œ**: ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ”์ƒํ™”๋ฅผ ๋งŒ๋“ค์—ˆ์ง€๋งŒ, ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์ด ์›๋ž˜์˜ ๋ฐ˜๋ณต๋œ ์ฝ”๋“œ๋ณด๋‹ค ์ดํ•ดํ•˜๊ธฐ ๋” ์–ด๋ ค์›Œ์ง„๋‹ค๋ฉด ์ด๋Š” ์ถ”์ƒํ™”์˜ ๋ชฉ์ ์„ ์ƒ์‹คํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค [3]. ์ด ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ผ๋Š” "KISS (Keep It Simple, Stupid)" ์›์น™์„ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [3]. -* **์œ ์—ฐ์„ฑ ์ €ํ•˜ ์šฐ๋ ค**: Feature-Sliced Design๊ณผ ๊ฐ™์€ ์ตœ์‹  ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” DRY ์›์น™์˜ ์ค€์ˆ˜์™€ ํŠน์ • ๊ธฐ๋Šฅ์— ๋งž์ถ˜ ๋กœ์ปฌ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•(local customization) ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ๊ท ํ˜•์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค [6]. ์ฆ‰ ๋ฌด์กฐ๊ฑด์ ์ธ ์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ๋Šฅ์‚ฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™] -- [[KISS]] - - ์—ฐ๊ฒฐ ์ด์œ : DRY ์›์น™์„ ๊ฐ•๋ฐ•์ ์œผ๋กœ ์ ์šฉํ•˜์—ฌ ์ถ”์ƒํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•ด์ ธ ์ด KISS(Keep It Simple, Stupid) ์›์น™์— ์œ„๋ฐฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํšจ์œจ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์— ์žˆ์–ด ์ค‘๋ณต ์ œ๊ฑฐ(DRY)์™€ ์ฝ”๋“œ์˜ ๋‹จ์ˆœ์„ฑ(KISS) ์‚ฌ์ด์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„์™€ ๊ท ํ˜•์ ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[YAGNI]] - - ์—ฐ๊ฒฐ ์ด์œ : DRY ์›์น™๊ณผ ํ•จ๊ป˜ ์–ธ๊ธ‰๋˜๋ฉฐ(You Aren't Gonna Need It), ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ์‹œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ค„์ด๋Š” ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค [7, 8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•ด ๋ฏธ๋ฆฌ ์ถ”์ƒํ™”ํ•˜์ง€ ๋ง๋ผ๋Š” ๊ฐœ๋…์„ ํ†ตํ•ด '3๋ฒˆ ๋ฐ˜๋ณต ์‹œ ์ถ”์ƒํ™”'๋ผ๋Š” DRY ์ ์šฉ ์‹œ์ ์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. - -#### [React ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[Custom Hooks]] - - ์—ฐ๊ฒฐ ์ด์œ : React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ”๋“œ ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ  ๊ณตํ†ต ๋กœ์ง์„ ์ถ”์ถœํ•  ๋•Œ ๊ฐ€์žฅ ๋„๋ฆฌ ๊ถŒ์žฅ๋˜๋Š” ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค [3, 4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ๊ด€๋ฆฌ๋‚˜ ๋ผ์ดํ”„์‚ฌ์ดํด๊ณผ ๊ฐ™์€ React ๊ณ ์œ ์˜ ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋ถ„๋ฆฌ(DRY)ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Higher-Order Components]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ปค์Šคํ…€ ํ›…๊ณผ ํ•จ๊ป˜ React ๋‚ด์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  DRY ์›์น™์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌํ˜„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI ๋ Œ๋”๋ง ์ธก๋ฉด์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ถ”์ƒํ™”ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions - -- React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ DRY ์›์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ๋กœ์ง์„ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ด์Šˆ๋Š” ๋ฌด์—‡์ธ๊ฐ€? -- '3๋ฒˆ ๋ฐ˜๋ณต๋˜๋ฉด ์ถ”์ƒํ™”ํ•˜๋ผ'๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ ์™ธ์—, ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”(Over-abstraction)๋ฅผ ์ง„๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ƒ์˜ ์ง€ํ‘œ๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€? -- Feature-Sliced Design๊ณผ ๊ฐ™์ด ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์—์„œ, ์ „์—ญ์ ์ธ DRY ์›์น™ ์ค€์ˆ˜์™€ ๋„๋ฉ”์ธ ๊ฐ„ ๊ฒฐํ•ฉ๋„(Coupling) ์ตœ์†Œํ™” ๋ชฉํ‘œ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ์ถฉํ•˜๋ฉฐ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ์ปดํฌ๋„ŒํŠธ์˜ UI ๊ตฌ์กฐ์  ์ค‘๋ณต๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์  ์ค‘๋ณต์„ ํ•ด์†Œํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ React ํŒจํ„ด(Render Props, HOC, Custom Hooks)์€ ๊ฐ๊ฐ ์–ด๋А ์ƒํ™ฉ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ๋Š”๊ฐ€? -- DRY ์›์น™์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋‚˜ ๊ณต์œ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ, ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค(Blast Radius)์— ๋ฏธ์น˜๋Š” ๋ถ€์ž‘์šฉ์„ ์‚ฌ์ „์— ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** React๋กœ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•  ๋•Œ, ์„œ๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋ฐฉ์‹์ด๋‚˜ ํผ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์ด๋ฅผ `useFetch`๋‚˜ `useForm`๊ณผ ๊ฐ™์€ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋นผ๋‚ด์–ด ์ฝ”๋“œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค [3, 4]. -- **System Design:** ํ”„๋กœ์ ํŠธ์˜ ํด๋” ๊ตฌ์กฐ๋ฅผ ์žก์„ ๋•Œ ๊ณตํ†ต ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก `shared` ๋˜๋Š” `utils` ๊ฐ™์€ ์ „์—ญ์ ์ธ ๋ ˆ์ด์–ด๋ฅผ ๋‘์–ด ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค [6, 9]. -- **Operation / Maintenance:** ์ค‘๋ณต ๋กœ์ง์„ ๋ณ„๋„์˜ ํ•จ์ˆ˜๋‚˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ํŠน์ • API ์ŠคํŽ™์ด๋‚˜ UI ์ •์ฑ…์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์ˆ˜์‹ญ ๊ฐœ์˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด ๋‹จ ํ•œ ๊ณณ๋งŒ ์ˆ˜์ •ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. -- **Learning Path:** ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•˜๊ฒŒ ์ค‘๋ณต์ด ์—†๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ผ๋‹จ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค, ๊ฐ™์€ ํŒจํ„ด์ด 3๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ๋ชฉ๊ฒฉํ–ˆ์„ ๋•Œ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์ถ”์ƒํ™”ํ•˜๋Š” ํ›ˆ๋ จ์„ ํ•ฉ๋‹ˆ๋‹ค [3]. -- **My Project Relevance:** React ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ฆฌํŒฉํ† ๋ง(refactoring)ํ•˜๋Š” ๊ณผ์ œ ์ˆ˜ํ–‰ ์‹œ, DRY ๋ฐ YAGNI ์›์น™์„ ์ฒ™๋„๋กœ ์‚ผ์•„ Lint๋ฅผ ์„ค์ •ํ•˜๊ณ , ํฉ์–ด์ง„ ์œ ์‚ฌ ํ•จ์ˆ˜๋“ค์„ ์ž‘๊ณ  ๋ช…ํ™•ํ•œ ์žฌ์‚ฌ์šฉ ๋ชจ๋“ˆ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7]. - -### Adjacent Topics - -- [[SOLID]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ฐ์ฒด ์ง€ํ–ฅ ๋ฐ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” 5๋Œ€ ์›์น™์œผ๋กœ, DRY์™€ ํ•จ๊ป˜ React ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐํ™”(๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ๋“ฑ)๋ฅผ ํ•™์Šตํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค [10, 11]. -- [[Clean Code]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ค‘๋ณต ์ œ๊ฑฐ(DRY)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ช…ํ™•ํ•œ ๋„ค์ด๋ฐ, ํ•จ์ˆ˜ ํฌ๊ธฐ ์ถ•์†Œ ๋“ฑ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ด์ฒด์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์›์น™์„ ๋” ๋„“๊ฒŒ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค [1, 4]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Feature Branch Workflow.md b/00_Raw/Feature Branch Workflow.md deleted file mode 100644 index 7d0a438a..00000000 --- a/00_Raw/Feature Branch Workflow.md +++ /dev/null @@ -1,73 +0,0 @@ -# [[Feature Branch Workflow]] - -## ๐Ÿ“Œ Brief Summary -Feature Branch Workflow๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๊ฐ™์€ ๋ชจ๋“  ๋‹จ์ผ ์ž‘์—…์„ ๋ฉ”์ธ(`main`) ๋ธŒ๋žœ์น˜์—์„œ ํŒŒ์ƒ๋œ ๋…๋ฆฝ์ ์ธ ๋‹จ๊ธฐ(short-lived) ๋ธŒ๋žœ์น˜์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [1-3]. ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ Pull Request(PR)์™€ ๋™๋ฃŒ์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ๊ทธ๋ฆฌ๊ณ  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์น˜๋„๋ก ์š”๊ตฌํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค [4, 5]. - -## ๐Ÿ“– Core Content -* **๋ธŒ๋žœ์น˜ ์šด์˜ ๋ฐ ์—ญํ• :** - * `main` ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ `main`์— ์ง์ ‘ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์€ ์—„๊ฒฉํžˆ ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค [1-3, 6]. - * ์ƒˆ๋กœ์šด ์ž‘์—…(๊ธฐ๋Šฅ, ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ)์„ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค `main`์—์„œ ํŒŒ์ƒ๋œ ์ „์šฉ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature Branch)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ž‘์—…์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค [1, 2]. - * ๊ฐ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋Š” ์ˆ˜๋ช…์ด ์งง์•„์•ผ ํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ๋ธŒ๋žœ์น˜์—์„œ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ(Atomic Commits)๋งŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 5, 7]. - -* **๋ณ‘ํ•ฉ ํ”„๋กœ์„ธ์Šค์™€ ํ’ˆ์งˆ ๊ด€๋ฆฌ:** - * ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด `main` ๋ธŒ๋žœ์น˜๋ฅผ ํ–ฅํ•ด Pull Request(PR)๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 5]. - * ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œ 1๋ช…์˜ ๋™๋ฃŒ ๋ฆฌ๋ทฐ(Peer Review) ์Šน์ธ๊ณผ CI(Continuous Integration) ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [4, 5, 8, 9]. - * ๋ณ‘ํ•ฉ ์‹œ์—๋Š” ์ „์ฒด ์ปค๋ฐ‹ ์ด๋ ฅ์„ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด "์Šค์ฟผ์‹œ ๋จธ์ง€(Squash and merge)" ์ „๋žต์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ ํ›„์—๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค [5, 6, 8, 9]. - -* **๋ช…๋ช… ๊ทœ์น™ ๋ฐ ์ถ”์ ์„ฑ(Traceability):** - * ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก `feature/` ๋˜๋Š” `bugfix/`๊ณผ ๊ฐ™์ด ์งง๊ณ  ๋ชฉ์ ์ด ๋“œ๋Ÿฌ๋‚˜๋Š” ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 4, 7]. - * ์ด์Šˆ ํŠธ๋ž˜์ปค(JIRA, GitHub Issues ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, `feature/PROJ-123-user-auth`์ฒ˜๋Ÿผ ํ‹ฐ์ผ“ ID๋ฅผ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ํฌํ•จ์‹œ์ผœ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ์ถ”์ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [10-12]. - -## โš–๏ธ Trade-offs & Caveats -* **๋ถ€์ž‘์šฉ ๋ฐ ์ œ์•ฝ ์‚ฌํ•ญ (Trade-offs):** - * `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ์‹์— ๋น„ํ•ด์„œ๋Š” PR์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฆฌ๋ทฐ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [3, 13, 14]. -* **๋ฐ˜๋Œ€ ๊ธ‰๋ถ€ ๋ฐ ์•ˆํ‹ฐ ํŒจํ„ด (Caveats & Anti-patterns):** - * **์ˆ˜๋ช…์ด ๊ธด ๋ธŒ๋žœ์น˜(Long-lived branches):** ๋ธŒ๋žœ์น˜๋ฅผ ์ˆ˜ ์ฃผ ๋™์•ˆ ์—ด์–ด๋‘๋Š” ๊ฒƒ์€ ์ด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ฐ€์žฅ ํฐ ์•ˆํ‹ฐ ํŒจํ„ด์ด๋ฉฐ, ์‹ฌ๊ฐํ•œ ๋จธ์ง€ ์ถฉ๋Œ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [13, 15, 16]. - * **๋™๊ธฐํ™” ์‹คํŒจ:** ๋Œ€๊ทœ๋ชจ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋งค์ผ ์ž‘์—… ์‹œ์ž‘ ์ „๊ณผ ์ž‘์—… ๋„์ค‘์— ์ˆ˜์‹œ๋กœ `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์‹ ์˜ ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์™€(Pull/Rebase) ์ ์ง„์ ์œผ๋กœ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5, 14, 15]. - * **๊ฑฐ๋Œ€ํ•œ PR:** ํ•œ ๋ฒˆ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ณ€๊ฒฝ์„ ํฌํ•จํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ์ปค๋ฐ‹๊ณผ PR์€ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐฉํ•ดํ•˜๋ฏ€๋กœ, PR ํฌ๊ธฐ๋ฅผ ๊ฐ€๊ธ‰์  ์ž‘๊ฒŒ(์˜ˆ: 200์ค„ ์ดํ•˜) ์œ ์ง€ํ•˜๋Š” ๊ทœ์œจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [8, 17]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Trunk-Based Development]] - - ์—ฐ๊ฒฐ ์ด์œ : Feature Branch Workflow๋ณด๋‹ค ๋น ๋ฅธ ์ฝ”๋“œ ํ†ตํ•ฉ์„ ๋ชฉํ‘œ๋กœ ํ•  ๋•Œ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์  ๋ธŒ๋žœ์นญ ์ „๋žต์ž…๋‹ˆ๋‹ค [18, 19]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ˆ™๋ จ๋œ ํŒ€์ด ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature Flags)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ž‘์€ ๋ณ€๊ฒฝ์„ ์ง€์†์ ์œผ๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ์‹๊ณผ Feature Branch Workflow์˜ ์†๋„ ๋ฐ ์•ˆ์ •์„ฑ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [19]. - -- [[Git Flow]] - - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ๊ทœ๋ชจ ํŒ€์— ์ ํ•ฉํ•œ Feature Branch Workflow์™€ ๋Œ€์กฐ๋˜๋Š”, ํ›จ์”ฌ ๋ฌด๊ฒ๊ณ  ๋ณต์žกํ•œ ๊ธฐ์กด์˜ ๋Œ€๊ทœ๋ชจ ๋ธŒ๋žœ์นญ ์ „๋žต์ž…๋‹ˆ๋‹ค [14, 18]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์˜ˆ์ •๋œ ๋ฆด๋ฆฌ์Šค ์ผ์ •์ด ์žˆ๊ฑฐ๋‚˜ ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ์—์„œ ์™œ `develop` ๋ฐ `release` ๋ธŒ๋žœ์น˜๊ฐ€ ์ถ”๊ฐ€๋กœ ์š”๊ตฌ๋˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ž‘์€ ํŒ€์—๊ฒŒ๋Š” ์™œ ์ด๊ฒƒ์ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [18, 20]. - -#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[Pull Request (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : Feature Branch Workflow์—์„œ ๊ฒฉ๋ฆฌ๋œ ์ฝ”๋“œ๋ฅผ `main`์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „ ๋ฐ˜๋“œ์‹œ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ํ•ต์‹ฌ ๊ฒŒ์ดํŠธ์›จ์ด์ž…๋‹ˆ๋‹ค [4, 5, 7]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์Šต๊ด€ํ™”ํ•˜๊ณ , ๋‹จ๋… ๋ณ‘ํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, CI ๋„๊ตฌ์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ฐฉ์–ดํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 7, 21]. - -- [[Conventional Commits]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๋ช…ํ™•์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์—…๊ณ„ ํ‘œ์ค€ ๊ทœ์น™์ž…๋‹ˆ๋‹ค [4, 21]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `feat:`, `fix:`, `chore:` ๋“ฑ์˜ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ , ๋ธŒ๋žœ์น˜์˜ ์ž‘์—… ๋‚ด์—ญ์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [21, 22]. - -### Deeper Research Questions -- Feature Branch Workflow์—์„œ ๋ธŒ๋žœ์น˜ ์ˆ˜๋ช…์ด ๊ธธ์–ด์งˆ ๋•Œ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋จธ์ง€ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ธŒ๋žœ์น˜ ๋™๊ธฐํ™”(Sync) ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ํŒ€์˜ ๊ทœ๋ชจ๊ฐ€ 3-5๋ช…์—์„œ 10๋ช… ์ด์ƒ์˜ ๋‹ค์ˆ˜ ํŒ€์œผ๋กœ ์ปค์งˆ ๋•Œ, Feature Branch Workflow๋Š” ์–ด๋–ป๊ฒŒ ํ™•์žฅ๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ „๋žต(์˜ˆ: Git Flow, GitLab Flow)์œผ๋กœ ์ „ํ™˜๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€? -- Pull Request์˜ ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์ด๋ฅผ "์›์ž์  ์ปค๋ฐ‹(Atomic Commits)" ๋‹จ์œ„๋กœ ์œ ์ง€ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์‹ค๋ฌด์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ์€ ๋ฌด์—‡์ธ๊ฐ€? -- CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Feature Branch Workflow๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด, PR ์ƒ์„ฑ ์‹œ ๋ณ‘๋ชฉ์„ ์ผ์œผํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž๋™ํ™”๋œ ๊ฒ€์‚ฌ(lint, test ๋“ฑ)์˜ ์ ์ •์„ ์€ ์–ด๋””์ธ๊ฐ€? -- ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ธŒ๋žœ์น˜๋ช…๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ํ‹ฐ์ผ“ ID(JIRA ๋“ฑ)๋ฅผ ๋ˆ„๋ฝํ•˜์ง€ ์•Š๋„๋ก Git Hooks๋‚˜ ํ”Œ๋žซํผ(GitHub, GitLab) ์„ค์ •์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ์†Œ๊ทœ๋ชจ ํŒ€(2~5๋ช…) ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ํ‘ธ์‹œํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ณดํ˜ธ(Branch Protection)๋ฅผ ๊ฑธ๊ณ , ๋ชจ๋“  ์ž‘์—…์„ `feature/` ๋˜๋Š” `bugfix/`๋กœ ๋ช…๋ช…๋œ ๋ธŒ๋žœ์น˜์—์„œ ์‹œ์ž‘ํ•˜๋„๋ก ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค [2]. -- **System Design:** ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(GitHub)๊ณผ ์ด์Šˆ ํŠธ๋ž˜์ปค(JIRA, Linear)๋ฅผ ์—ฐ๋™ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๊ฐ€ `feature/PROJ-123` ํ˜•ํƒœ์˜ ๋ธŒ๋žœ์น˜๋ช…์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ์ด์Šˆ ํŠธ๋ž˜์ปค์— PR ์ƒํƒœ์™€ ์ปค๋ฐ‹ ๋‚ด์—ญ์ด ์ž๋™์œผ๋กœ ์ถ”์ ๋˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [11, 23, 24]. -- **Operation / Maintenance:** ๊ด€๋ฆฌ์˜ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด, ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ PR์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋ณ‘ํ•ฉ๋œ ์ดํ›„์—๋Š” ํ•ด๋‹น ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๊ฐ€ ์ž๋™์œผ๋กœ ์‚ญ์ œ(Auto-delete merged branches)๋˜๋„๋ก ์ €์žฅ์†Œ ์„ค์ •์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [6-8]. -- **Learning Path:** ์ฒ˜์Œ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒฝํ—˜ํ•˜๋Š” ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋“ค์€ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ์˜ ๋‹จ๋… ์ž‘์—…์„ ๋„˜์–ด, ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  PR์„ ํ†ตํ•ด ๋™๋ฃŒ์˜ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์˜ฌ๋ฐ”๋ฅธ ํ˜‘์—…์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ง‘๋‹ˆ๋‹ค [18, 25]. -- **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋Šฅ ๋ณ‘ํ•ฉ ์‹œ ์ฝ”๋“œ ์ถฉ๋Œ์ด ์žฆ๊ฑฐ๋‚˜ ๋ฐฐํฌ ๋ธŒ๋žœ์น˜๊ฐ€ ์ž์ฃผ ๊ณ ์žฅ๋‚œ๋‹ค๋ฉด, ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ ์ƒํƒœ์—์„œ๋งŒ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ํ•ฉ๋ฅ˜ํ•˜๋„๋ก ๊ทœ์น™์„ ์ •๋ฆฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2, 14]. - -### Adjacent Topics -- [[Continuous Integration (CI)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์˜ PR์ด ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์•ˆ์ •์ ์ธ์ง€ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋นŒ๋“œํ•˜์—ฌ ๋ณ‘ํ•ฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ์‹œ์Šคํ…œ์ ์œผ๋กœ ๊ฒ€์ฆํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๋ฐฉ๋ฒ•์œผ๋กœ ์ดํ•ด๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. -- [[GitHub Flow]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: Feature Branch Workflow์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ, GitHub ํ™˜๊ฒฝ๊ณผ ์ง€์†์  ๋ฐฐํฌ(Continuous Deployment)์— ๋” ์ตœ์ ํ™”๋œ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๊ฐœ๋…์„ ํ™•์žฅํ•˜์—ฌ ๋น„๊ตํ•ด ๋ด…๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Feature-Branch Workflow.md b/00_Raw/Feature-Branch Workflow.md deleted file mode 100644 index 5800692c..00000000 --- a/00_Raw/Feature-Branch Workflow.md +++ /dev/null @@ -1,70 +0,0 @@ -# [[Feature-Branch Workflow]] - -## ๐Ÿ“Œ Brief Summary -`Feature-Branch Workflow`๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜(main/master)๋ฅผ ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์งง์€ ์ˆ˜๋ช…์„ ๊ฐ€์ง„ ๋…๋ฆฝ์ ์ธ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜(feature branch)์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ํ˜‘์—… ๋ฐฉ์‹์ด๋‹ค [1-4]. ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(Pull Request)๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์นœ ํ›„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ๋œ๋‹ค [5-7]. ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์†Œ๊ทœ๋ชจ ํŒ€์— ๋งค์šฐ ์ ํ•ฉํ•˜๋ฉฐ, ์ฝ”๋“œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ Git-Flow์™€ ๊ฐ™์€ ๋ฌด๊ฑฐ์šด ํ”„๋กœ์„ธ์Šค์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค [1, 8, 9]. - -## ๐Ÿ“– Core Content -- **๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ฐ ์›์น™:** - ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ `main` ๋ธŒ๋žœ์น˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค [2-4]. ๊ฐœ๋ฐœ์ž๋Š” ์ƒˆ๋กœ์šด ์ž‘์—…(๊ธฐ๋Šฅ ์ถ”๊ฐ€, ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ)์„ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค `main`์—์„œ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹(Direct push)ํ•˜๋Š” ๊ฒƒ์€ ์—„๊ฒฉํžˆ ๊ธˆ์ง€๋œ๋‹ค [4, 5, 10]. -- **๋ธŒ๋žœ์น˜ ๋ช…๋ช… ๊ทœ์น™ (Naming Conventions):** - ๋ธŒ๋žœ์น˜์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์งง๊ณ  ์„œ์ˆ ์ ์ธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ตฌ์กฐ์  ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ ‘๋‘์‚ฌ(`feature/`, `bugfix/`, `chore/` ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ [6, 11, 12], ์ถ”์ ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด JIRA๋‚˜ GitHub์˜ ํ‹ฐ์ผ“ ID๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค (์˜ˆ: `feature/PROJ-123-user-auth`, `bugfix/GH-456-login-fix`) [13, 14]. -- **์ปค๋ฐ‹ ๋ฐ ํ†ตํ•ฉ (Commits & Merging):** - ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ปค๋ฐ‹ํ•˜๋Š” ์›์ž์  ์ปค๋ฐ‹(Atomic Commits)์„ ์ง€ํ–ฅํ•˜๋ฉฐ, ์ปค๋ฐ‹์„ ์ž‘๊ณ  ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•œ๋‹ค [6, 11, 15]. ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ์—ด์–ด ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ํŒ€์›์—๊ฒŒ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋ฉฐ, CI ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ํ›„ ๋ณ‘ํ•ฉํ•œ๋‹ค [4-7]. ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด '์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash Merge)' ๋ฐฉ์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ ์™„๋ฃŒ ํ›„ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๋Š” ์ฆ‰์‹œ ์‚ญ์ œํ•œ๋‹ค [5, 7, 16]. -- **์ถฉ๋Œ ๋ฐฉ์ง€ (Conflict Prevention):** - ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—… ์ค‘์ธ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์— `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์ฃผ ๊ฐ€์ ธ์™€(pull ๋˜๋Š” rebase) ๋™๊ธฐํ™”ํ•˜๋ฉฐ, ์ถฉ๋Œ์„ ์ ์ง„์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค [7, 8]. -- **ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR) ์—ํ‹ฐ์ผ“:** - PR์€ ๋ฆฌ๋ทฐ๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ์ž‘๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค (๊ฐ€๋Šฅํ•˜๋ฉด 200์ค„ ๋ฏธ๋งŒ). PR ๋‚ด์šฉ์—๋Š” ๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€, ์™œ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  UI ๋ณ€๊ฒฝ ์‹œ ์Šคํฌ๋ฆฐ์ƒท ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ์ถฉ๋ถ„ํ•œ ๋งฅ๋ฝ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค [5, 17]. - -## โš–๏ธ Trade-offs & Caveats -- **๋ธŒ๋žœ์น˜ ์ˆ˜๋ช… ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ:** ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๊ฐ€ ์˜ค๋žซ๋™์•ˆ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š๊ณ  ์œ ์ง€๋  ๊ฒฝ์šฐ(Long-lived feature branches), ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์™€์˜ ์ฝ”๋“œ ์ฐจ์ด๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ปค์ ธ ์‹ฌ๊ฐํ•œ ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ(Merge conflicts)์ด ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค [10, 18]. ๋”ฐ๋ผ์„œ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๋Š” ๋‹จ์ผ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ๊ฐ€๊ธ‰์  ์งง์€ ์ˆ˜๋ช…(Short-lived)์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค [2, 19, 20]. -- **๋ณ‘ํ•ฉ ์ „ ์ ˆ์ฐจ๋กœ ์ธํ•œ ๋ณ‘๋ชฉ ํ˜„์ƒ:** ์•„๋ฌด๋ฆฌ ์ž‘๊ณ  ๊ฐ„๋‹จํ•œ ๋ณ€๊ฒฝ์ด๋ผ๋„ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์ƒ์„ฑ, ๋™๋ฃŒ ๋ฆฌ๋ทฐ, CI/CD ์ฒดํฌ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค [10, 11]. ์ด๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•˜์ง€๋งŒ, ์•„์ฃผ ์‚ฌ์†Œํ•œ ์ˆ˜์ •์กฐ์ฐจ๋„ ์ฆ‰๊ฐ์ ์ธ ์ ์šฉ์ด ์ง€์—ฐ๋˜๋Š” ๋ณ‘๋ชฉ์ด ๋  ์ˆ˜ ์žˆ๋‹ค (ํŒ€์— ๋”ฐ๋ผ ์‚ฌ์†Œํ•œ ์ˆ˜์ •์€ `main`์— ์ง์ ‘ ์ปค๋ฐ‹ํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ๋‘๊ธฐ๋„ ํ•œ๋‹ค [8]). -- **๋ณต์žกํ•œ ๋ฆด๋ฆฌ์Šค ๊ด€๋ฆฌ์˜ ํ•œ๊ณ„:** ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜๋กœ ๋ฌถ์—ฌ ํŠน์ • ์Šค์ผ€์ค„์— ๋”ฐ๋ผ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, `main` ๋ธŒ๋žœ์น˜ ํ•˜๋‚˜๋งŒ ์šด์˜ํ•˜๋Š” ๋‹จ์ˆœ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ Git-Flow ๊ฐ™์€ ๋” ๋ฌด๊ฑฐ์šด ๊ตฌ์กฐ๊ฐ€ ์š”๊ตฌ๋œ๋‹ค [9]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๋ฒ„์ „ ๊ด€๋ฆฌ / ํ†ตํ•ฉ ์•„ํ‚คํ…์ฒ˜] -- [[Pull Request (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์—์„œ์˜ ์ž‘์—…๋ฌผ์„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „, ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ๊ด€๋ฌธ์ด๋‹ค [6, 11]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒ€ ๋‚ด ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„ ์ž‘๋™ ๋ฐฉ์‹, ์ฝ”๋“œ ํ’ˆ์งˆ ์œ ์ง€ ๋งค์ปค๋‹ˆ์ฆ˜, ๊ทธ๋ฆฌ๊ณ  ์•ˆ์ „ํ•œ ์ฝ”๋“œ ํ†ตํ•ฉ ์ ˆ์ฐจ. -- [[Squash Merge]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐœ์ƒํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์ž˜ํ•œ ์ปค๋ฐ‹์„ ํ•˜๋‚˜์˜ ์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹์œผ๋กœ ์••์ถ•ํ•˜์—ฌ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๋Š” ์ „๋žต์ด๋‹ค [5, 7]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ ๊นƒ ํžˆ์Šคํ† ๋ฆฌ(Git history)๋ฅผ ๊น”๋”ํ•˜๊ณ  ๊ฐ€๋…์„ฑ ๋†’๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์›๋ฆฌ. -- [[Continuous Integration (CI)]] - - ์—ฐ๊ฒฐ ์ด์œ : PR์ด ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ๋˜๊ธฐ ์ „ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ(์˜ˆ: ๋ฆฐํŒ…, ๋นŒ๋“œ ๊ฒ€์ฆ)๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ์•ˆ์ „ํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ์–ด ์‹œ์Šคํ…œ์ด๋‹ค [4, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `main` ๋ธŒ๋žœ์น˜์˜ ์ƒํƒœ๋ฅผ 'ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅ(Always stable)'ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์  ๋ณด์žฅ ๋ฐฉ๋ฒ•. - -#### [๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก  / ๊ทœ์•ฝ] -- [[Ticket IDs Traceability]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋žœ์น˜ ์ด๋ฆ„๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— JIRA๋‚˜ GitHub Issues์™€ ๊ฐ™์€ ํ‹ฐ์ผ“ ID(์˜ˆ: PROJ-123)๋ฅผ ํฌํ•จ์‹œ์ผœ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค [13, 16]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ๋ณ€๊ฒฝ์˜ ๋ฐฐ๊ฒฝ ํŒŒ์•…, ๋ฆฌ๋ทฐ์–ด์˜ ๋งฅ๋ฝ ์ดํ•ด ์ง€์›, ์š”๊ตฌ์‚ฌํ•ญ ๊ตฌํ˜„ ์ถ”์ ์„ฑ ํ™•๋ณด. -- [[Conventional Commits]] - - ์—ฐ๊ฒฐ ์ด์œ : `feat:`, `fix:`, `chore:` ๋“ฑ ํ‘œ์ค€ํ™”๋œ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ทœ์น™์œผ๋กœ, ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์†Œํ†ตํ•œ๋‹ค [6, 17, 21]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ์˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๋ฐ ์ž๋™ํ™”๋œ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ƒ์„ฑ์˜ ๊ธฐ๋ฐ˜. - -### Deeper Research Questions - -- ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์—์„œ ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…(Lifetime)์„ ๊ธฐ์ˆ ์ /์ ˆ์ฐจ์ ์œผ๋กœ ์งง๊ฒŒ ๊ฐ•์ œํ•˜๋ ค๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•๋“ค์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ๋‹จ์ˆœํ•œ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€, ํŒ€ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ์Šค์ผ€์ค„๋ง๋œ ์ •๊ธฐ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•„์š”ํ•ด์งˆ ๋•Œ Git-Flow ๋“ฑ์œผ๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์–ด๋–ป๊ฒŒ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ๋กœ์ปฌ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์—์„œ `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋™๊ธฐํ™”ํ•  ๋•Œ, `git merge main`๊ณผ `git rebase main`์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์‹ค์งˆ์ ์ธ ์žฅ๋‹จ์  ๋ฐ ๊ถŒ์žฅ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ธ๊ฐ€? -- ์›์ž์  ์ปค๋ฐ‹(Atomic Commits) ๊ทœ์น™์„ ๊ฐœ๋ฐœ ํŒ€ ๋‚ด์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ์ •์ฐฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์ด๋‚˜ CI ๋„๊ตฌ์—์„œ ์–ด๋–ค ๊ฒ€์ฆ ๊ธฐ์ค€์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ๊ธด๊ธ‰ํ•˜๊ฒŒ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๋ฒ„๊ทธ(Hotfix)๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์—์„œ `main`์˜ ์•ˆ์ •์„ฑ์„ ํ•ด์น˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ํ๋ฆ„์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** GitHub ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹์„ ๋ง‰๋Š” ๋ณดํ˜ธ ๊ธฐ๋Šฅ(Branch protection)์„ ํ™œ์„ฑํ™”ํ•˜๊ณ , ์ตœ์†Œ 1๋ช…์˜ ๋ฆฌ๋ทฐ์™€ CI ํ†ต๊ณผ๋ฅผ ํ•„์ˆ˜๋กœ ์„ค์ •ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œํ•œ๋‹ค [5]. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ `{type}/{ticket-id}-{description}` ํ˜•์‹์„ ์‚ฌ์šฉํ•œ๋‹ค [14]. -- **System Design:** ๋ณ€๊ฒฝ๋œ UI ์ฝ”๋“œ๊ฐ€ ์‹œ์Šคํ…œ ๋””์ž์ธ์— ์•…์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก, PR ๋ฆฌ๋ทฐ ๋‹จ๊ณ„์—์„œ Storybook ๋ฐ Chromatic๊ณผ ๊ฐ™์€ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual regression testing) ๋„๊ตฌ๋ฅผ ์—ฐ๋™ํ•˜์—ฌ ๊ฒ€์ฆ์„ ์ž๋™ํ™”ํ•œ๋‹ค [22]. -- **Operation / Maintenance:** ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฌธ์ œ์˜ ์›์ธ์ด ๋˜๋Š” ์ปค๋ฐ‹์„ ๋กค๋ฐฑ(Revert)ํ•˜๊ฑฐ๋‚˜ ์ถ”์ ํ•˜๊ธฐ ์‰ฝ๋„๋ก, Squash Merge ์˜ต์…˜๋งŒ์„ ํ—ˆ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ๋‹จ์œ„๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ •๋ฆฌํ•˜๊ณ  ๋ณ‘ํ•ฉ๋œ ๋ธŒ๋žœ์น˜๋Š” ์ž๋™ ์‚ญ์ œ(Auto-delete) ์˜ต์…˜์„ ์ผœ๋‘”๋‹ค [5, 7, 11]. -- **Learning Path:** 2~5์ธ ๊ทœ๋ชจ์˜ ์†Œ๊ทœ๋ชจ ํ•™์ƒ ํŒ€์ด๋‚˜ ์Šคํƒ€ํŠธ์—… ํ”„๋กœ์ ํŠธ์—์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋„์ž…ํ•˜์—ฌ Git ํ˜‘์—…์˜ ๊ธฐ์ดˆ(๋ธŒ๋žœ์น˜ ์ƒ์„ฑ, ์ปค๋ฐ‹, PR, ๋ฆฌ๋ทฐ, ๋จธ์ง€)๋ฅผ ํ•™์Šตํ•˜๋Š” ์šฉ๋„๋กœ ์ ํ•ฉํ•˜๋‹ค [3, 9]. -- **My Project Relevance:** ํŒ€์›๋“ค์ด ๊ฒน์น˜๋Š” ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋‹ค ์ฝ”๋“œ๊ฐ€ ์œ ์‹ค๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ , PR์„ ํ†ตํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™” ์ •์ฐฉ์œผ๋กœ ์ „์ฒด์ ์ธ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ํŒ€์›์˜ ์ดํ•ด๋„๋ฅผ ์ƒํ–ฅ ํ‰์ค€ํ™”ํ•˜๋Š” ๊ธฐ๋ณธ ํ˜‘์—… ๋ชจ๋ธ๋กœ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. - -### Adjacent Topics - -- [[Trunk-Based Development]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…์„ ์ˆ˜ ์‹œ๊ฐ„ ์ด๋‚ด๋กœ ๊ทน๋‹จ์ ์œผ๋กœ ์ค„์ด๊ณ , ๋ฉ”์ธ ๋ธŒ๋žœ์น˜(Trunk)๋กœ ์•„์ฃผ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [9]. ๊ฐ•๋ ฅํ•œ CI์™€ ๊ธฐ๋Šฅ ํ† ๊ธ€(Feature flags)์ด ๋’ท๋ฐ›์นจ๋˜๋Š” ์‹œ๋‹ˆ์–ด ํŒ€์„ ์œ„ํ•œ ์‹ฌํ™” ํ˜‘์—… ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๋น„๊ต ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค [9, 20]. -- [[Git-Flow]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: `develop`, `release`, `hotfix` ๋“ฑ ๋” ๋ณต์žกํ•˜๊ณ  ๋ถ„๋ฆฌ๋œ ๋ธŒ๋žœ์น˜ ๊ณ„์ธต์„ ๊ฐ€์ง€๋Š” ์ „๋žต์ด๋‹ค [9]. ์†Œ๊ทœ๋ชจ ํŒ€์˜ ๋‹จ์ˆœํ•œ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ ๋ฐ ์ •๊ธฐ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ํ™•์žฅ๋  ๋•Œ ์–ด๋–ป๊ฒŒ ๋ณ€๋ชจํ•˜๋Š”์ง€ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค [9, 23]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Git Flow.md b/00_Raw/Git Flow.md deleted file mode 100644 index e2fb0b11..00000000 --- a/00_Raw/Git Flow.md +++ /dev/null @@ -1,63 +0,0 @@ -# [[Git Flow]] - -## ๐Ÿ“Œ Brief Summary -Git Flow๋Š” ์ฃผ๋กœ ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์Šค(scheduled releases) ์ผ์ •์ด ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ธŒ๋žœ์นญ ์ „๋žต์ž…๋‹ˆ๋‹ค. ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ฝ”๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ตํ•ฉํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด `main` ๋ธŒ๋žœ์น˜ ์™ธ์— `develop`, `release` ๋“ฑ ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์žก๋„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์†Œ๊ทœ๋ชจ ํŒ€์ด๋‚˜ ๋น ๋ฅธ ํ†ตํ•ฉ์ด ํ•„์š”ํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -## ๐Ÿ“– Core Content -* **Git Flow์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ:** Git Flow๋Š” `main` ๋ธŒ๋žœ์น˜ ์™ธ์— ์ƒˆ๋กœ์šด ํ†ตํ•ฉ(integration) ๋ธŒ๋žœ์น˜์ธ `develop` ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(Feature)์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ์ด `develop` ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…ํ•˜๋ฉฐ, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ `develop` ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ(Merge)ํ•ฉ๋‹ˆ๋‹ค [1]. -* **๋ฆด๋ฆฌ์Šค ๊ด€๋ฆฌ:** ๋ฐฐํฌ ์ค€๋น„๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ `release` ๋ธŒ๋žœ์น˜๋ฅผ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ด๋ฅผ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์ •ํ•ด์ง„ ์ผ์ •์— ๋”ฐ๋ฅธ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ตœ์ข… ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ์ค€๋น„ ๊ณผ์ •์„ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๊ณผ ๊ฒฉ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 3]. -* **๋‹ค๋ฅธ ๋ธŒ๋žœ์นญ ์ „๋žต๊ณผ์˜ ๋น„๊ต ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜:** Git Flow๋Š” GitHub Flow, GitLab Flow, Trunk-Based Development, Feature Branch Workflow ๋“ฑ๊ณผ ํ•จ๊ป˜ ๋„๋ฆฌ ์“ฐ์ด๋Š” ์ฃผ์š” ๋ธŒ๋žœ์นญ ์ „๋žต ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค [4]. ํŒ€์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€ํ•จ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ „๋žต์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋” ๋‹จ์ˆœํ•œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜๋ฅผ ์—†์• ๊ณ  `develop`์„ `main`์— ํ†ตํ•ฉํ•˜์—ฌ GitHub Flow๋กœ ๋„˜์–ด๊ฐ€๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ ์ฒด๊ณ„์ ์ธ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ `develop`๊ณผ `release` ๋ธŒ๋žœ์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ Git Flow๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. -* **๋ชจ๋ฒ” ์‚ฌ๋ก€์˜ ์ ์šฉ:** Git Flow๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋ณดํŽธ์ ์ธ Git ์›Œํฌํ”Œ๋กœ์šฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€(Best Practices)๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ์žˆ๋Š” ์งง์€ ๋ธŒ๋žœ์น˜๋ช… ์‚ฌ์šฉ, ํ‹ฐ์ผ“ ID(์˜ˆ: PROJ-123) ํฌํ•จ, Pull Request(PR)๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ ํ›„ ์‚ญ์ œ ๋“ฑ์„ ์ฒ ์ €ํžˆ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค [5-8]. - -## โš–๏ธ Trade-offs & Caveats -* **์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณต์žก์„ฑ:** Git Flow๋Š” ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋ธŒ๋žœ์น˜์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ๊ณ  ๊ทœ์น™์ด ์—„๊ฒฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [9, 10]. 2~5๋ช… ๊ทœ๋ชจ์˜ ์†Œ๊ทœ๋ชจ ํŒ€์ด๋‚˜ ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ๋ฌด๊ฑฐ์šด(heavy) ์ „๋žต์ด๋ฉฐ, ์˜คํžˆ๋ ค ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 11, 12]. -* **ํ†ตํ•ฉ ์†๋„ ๋ฐ ์ถฉ๋Œ ๋ฌธ์ œ:** ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜ ๊ณ„์ธต(`feature` -> `develop` -> `release` -> `main`)์„ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ๋ณ‘ํ•ฉ๊ณผ ๋ฐฐํฌ ์†๋„๊ฐ€ Trunk-Based Development๋‚˜ ๋‹จ์ˆœํ•œ Feature Branch ์›Œํฌํ”Œ๋กœ์šฐ์— ๋น„ํ•ด ๋А๋ ค์ง‘๋‹ˆ๋‹ค [2, 3]. ์ˆ˜๋ช…์ด ๊ธด ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’์•„ ํฐ ๋จธ์ง€ ์ถฉ๋Œ(Merge Conflict)์„ ๊ฒช์„ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค [10, 13]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ์ „๋žต)] -- [[GitHub Flow]] - - ์—ฐ๊ฒฐ ์ด์œ : Git Flow๋ณด๋‹ค ๋” ๋‹จ์ˆœํ•œ ๋Œ€์•ˆ์œผ๋กœ ์ž์ฃผ ๋น„๊ต๋˜๋ฉฐ, Git Flow์—์„œ ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜์™€ `develop` ๋ธŒ๋žœ์น˜๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ `main`์œผ๋กœ ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋žœ์นญ ์ „๋žต์˜ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ๋‹จ์ถ•ํ•˜์—ฌ ๋ณด๋‹ค ๋ฏผ์ฒฉํ•œ ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. -- [[Trunk-Based Development]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ฐ•๋ ฅํ•œ CI์™€ ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋งค์šฐ ๋น ๋ฅธ ํ†ตํ•ฉ์„ ์ถ”๊ตฌํ•˜๋Š” ์ „๋žต์œผ๋กœ, ๋ณต์žกํ•˜๊ณ  ๋ฌด๊ฑฐ์šด Git Flow์™€ ๊ทน๋ช…ํ•˜๊ฒŒ ๋Œ€๋น„๋ฉ๋‹ˆ๋‹ค [2, 3]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋žœ์น˜ ๊ณ„์ธต์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ํ†ตํ•ฉ ์ถฉ๋Œ์„ ์ค„์ด๊ณ , ๋น ๋ฅธ ์ฃผ๊ธฐ๋กœ ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹. -- [[Feature Branch Workflow]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ `main`์ด ์•„๋‹Œ ํŠน์ • ๊ธฐ๋Šฅ(Feature)์„ ์œ„ํ•œ ์ „์šฉ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, Git Flow๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋žœ์นญ ์ „๋žต์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ํ•ต์‹ฌ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [5, 12, 14]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ์ฝ”๋“œ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ  ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ ์ž‘์—… ๋‚ด์—ญ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ์›๋ฆฌ. - -#### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„/๊ฑฐ๋ฒ„๋„Œ์Šค ๋„๊ตฌ)] -- [[Pull Request (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : Git Flow์˜ ๋ณต์žกํ•œ ๋ธŒ๋žœ์น˜ ํ™˜๊ฒฝ(์˜ˆ: feature์—์„œ develop์œผ๋กœ ๋ณ‘ํ•ฉ)์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ๋™๋ฃŒ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์น˜๊ฒŒ ํ•˜๋Š” ํ•„์ˆ˜์ ์ธ ํ’ˆ์งˆ ํ†ต์ œ ๊ด€๋ฌธ์ž…๋‹ˆ๋‹ค [7, 15]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒ€ ๋‚ด ์ฝ”๋“œ ํ’ˆ์งˆ ์œ ์ง€, ์ง€์‹ ๊ณต์œ  ๋ฐ ๋ณ‘ํ•ฉ ์ „ ๊ฒฐํ•จ ์ฐจ๋‹จ ๋ฉ”์ปค๋‹ˆ์ฆ˜. -- [[Conventional Commits]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ˆ˜๋งŽ์€ ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹์ด ์–ฝํžˆ๋Š” Git Flow์—์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๊ทœ๊ฒฉํ™”(`feat:`, `fix:`, `chore:` ๋“ฑ)ํ•˜์—ฌ ๊ธฐ๋ก์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ๋ฆด๋ฆฌ์Šค ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [15, 16]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ผ๊ด€๋˜๊ฒŒ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ทœ์•ฝ. - -### Deeper Research Questions - -- Git Flow์˜ `develop` ๋ธŒ๋žœ์น˜์™€ `main` ๋ธŒ๋žœ์น˜๋ฅผ ์žฅ๊ธฐ๊ฐ„ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ํ•  ๋•Œ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋จธ์ง€ ์ถฉ๋Œ(Merge Conflict)์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๋™๊ธฐํ™” ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์†Œ๊ทœ๋ชจ ํŒ€์ด ๋‹จ์ผ ๋ธŒ๋žœ์น˜ ๋˜๋Š” ๋‹จ์ˆœ Feature Branch Workflow์—์„œ Git Flow๋กœ ์ „ํ™˜(Migration)ํ•ด์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ์กฐ์ง์ , ๋น„์ฆˆ๋‹ˆ์Šค์  ํƒ€์ด๋ฐ๊ณผ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? -- Git Flow ํ™˜๊ฒฝ์—์„œ ๊ธด๊ธ‰ํ•œ ์šด์˜ ์„œ๋ฒ„ ๋ฒ„๊ทธ ์ˆ˜์ •(Hotfix)์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, `main`๊ณผ `develop` ๋ธŒ๋žœ์น˜ ์–‘์ชฝ์— ์•ˆ์ „ํ•˜๊ณ  ์‹ ์†ํ•˜๊ฒŒ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋Š”๊ฐ€? -- Git Flow์™€ Trunk-Based Development์˜ ๋ธŒ๋žœ์น˜ ์ˆ˜๋ช…(Lifetime) ์ฐจ์ด๊ฐ€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ตฌ์ถ• ๋ฐ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ํšŸ์ˆ˜์— ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€? -- ์ถ”์ ์„ฑ์„ ์œ„ํ•ด ํ‹ฐ์ผ“ ID(์˜ˆ: JIRA)๋ฅผ ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹์— ์‚ฌ์šฉํ•  ๋•Œ, ๋ณต์žกํ•œ ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜(Release Branch) ๋‹จ๊ณ„์—์„œ ์—ฌ๋Ÿฌ ํ‹ฐ์ผ“์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ชจ๋ฒ” ๊ด€ํ–‰์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ `main` ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋ณดํ˜ธํ•˜๋ฉฐ, ์‹ค์งˆ์ ์ธ ๊ฐœ๋ฐœ ํ†ตํ•ฉ์€ `develop` ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [1, 12]. ๋ชจ๋“  ์ปค๋ฐ‹๊ณผ ๋ธŒ๋žœ์น˜๋ช…์—๋Š” ํ‹ฐ์ผ“ ID๋ฅผ ํฌํ•จ์‹œ์ผœ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ์˜ ์ถ”์ ์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค [7]. -- **System Design:** ์˜ˆ์•ฝ๋œ ๋ฆด๋ฆฌ์Šค ์Šค์ผ€์ค„์„ ์ง€์›ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์— ์ ํ•ฉํ•˜๋ฉฐ, ๋ฐฐํฌ ์ „์— `release` ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ์ตœ์ข… QA์™€ ๋ฒ„์ „ ํƒœ๊น…(Tagging)์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [1, 3, 7]. -- **Operation / Maintenance:** ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ(Branch Protection), ๋ฆฌ๋ทฐ์–ด ํ•„์ˆ˜ ์ง€์ •, CI ์ƒํƒœ ์ฒดํฌ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ `develop` ๋ธŒ๋žœ์น˜์˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•˜๋ฉฐ, ๋จธ์ง€ ํ›„์—๋Š” ์ž‘์—…์ด ๋๋‚œ ๋ธŒ๋žœ์น˜๋ฅผ ์ž๋™ ์‚ญ์ œํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [5, 13]. -- **Learning Path:** ์ฒ˜์Œ๋ถ€ํ„ฐ Git Flow๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ๊ฐ€๋ฒผ์šด Feature Branch Workflow ๋˜๋Š” GitHub Flow๋กœ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ค์ง„ ํ›„, ๋ฆด๋ฆฌ์Šค ๊ด€๋ฆฌ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ ์ง„์ ์œผ๋กœ `develop`๊ณผ `release` ๋ธŒ๋žœ์น˜ ๊ฐœ๋…์„ ํ•™์Šตํ•˜๊ณ  ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [1-3]. -- **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์˜ ํŒ€ ๊ทœ๋ชจ์™€ ๋ฐฐํฌ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์ฑ„ํƒ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒ€์›์ด 3~5๋ช…์ธ ์†Œ๊ทœ๋ชจ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฐ Git Flow๋ณด๋‹ค๋Š” ์งง์€ ์ˆ˜๋ช…์˜ Feature ๋ธŒ๋žœ์น˜์™€ ๊ฒฐํ•ฉ๋œ ๋” ๋‹จ์ˆœํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [3, 10, 14]. - -### Adjacent Topics - -- [[CI/CD (Continuous Integration/Continuous Deployment)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: Git Flow์˜ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜(`develop`, `release`, `main`) ํ™˜๊ฒฝ์— ๋งž์ถฐ ๋‹จ๊ณ„๋ณ„๋กœ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๋Š”์ง€ ํƒ๊ตฌ. -- [[Agile Methodology]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: Git Flow์˜ ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜ ์šด์šฉ์ด ์• ์ž์ผ์˜ ์Šคํ”„๋ฆฐํŠธ(Sprint) ์ฃผ๊ธฐ ๋ฐ ์ด์Šˆ ํŠธ๋ž˜์ปค(Issue Tracker)์™€ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์†Œํ”„ํŠธ์›จ์–ด ๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ํ˜•์„ฑํ•˜๋Š”์ง€ ๋ถ„์„. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Git Workflow for Frontend Teams.md b/00_Raw/Git Workflow for Frontend Teams.md deleted file mode 100644 index f51a735a..00000000 --- a/00_Raw/Git Workflow for Frontend Teams.md +++ /dev/null @@ -1,68 +0,0 @@ -# [[Git Workflow for Frontend Teams]] - -## ๐Ÿ“Œ Brief Summary -ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์„ ์œ„ํ•œ Git ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํ˜‘์—…์„ ์ด‰์ง„ํ•˜๋ฉฐ ์•ˆ์ •์ ์ธ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋‹ค [1-3]. ์ฃผ์š” ์ „๋žต์œผ๋กœ๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature-branch), ๊นƒํ—ˆ๋ธŒ ํ”Œ๋กœ์šฐ(GitHub Flow), ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜(Trunk-based) ๊ฐœ๋ฐœ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ์ด๋“ค์€ ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜, ๋ช…ํ™•ํ•œ ๋ช…๋ช… ๊ทœ์น™ ๋ฐ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜, ๋™๋ฃŒ ๋ฆฌ๋ทฐ๊ฐ€ ํฌํ•จ๋œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ๊ณตํ†ต์œผ๋กœ ๊ฐ•์กฐํ•œ๋‹ค [2, 4, 5]. ์ž˜ ๊ตฌํ˜„๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ž ์žฌ์ ์ธ ํ˜ผ๋ž€์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ณ ํ’ˆ์งˆ ์—…๋ฐ์ดํŠธ์˜ ํ๋ฆ„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ์—ญํ• ์„ ํ•œ๋‹ค [2]. - -## ๐Ÿ“– Core Content -* **๋ธŒ๋žœ์นญ ์ „๋žต (Branching Strategies)**: 2~5๋ช… ๊ทœ๋ชจ์˜ ์†Œ๊ทœ๋ชจ ํŒ€์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฐ Git Flow ๋Œ€์‹  ์‹ฌํ”Œํ•œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature-branch) ์›Œํฌํ”Œ๋กœ์šฐ๋‚˜ ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์„ ์ฃผ๋กœ ์ฑ„ํƒํ•œ๋‹ค [6-8]. ์ด๋Ÿฌํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ •์ ์ธ `main` ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, `main`์œผ๋กœ์˜ ์ง์ ‘์ ์ธ ์ปค๋ฐ‹์€ ์—„๊ฒฉํžˆ ์ œํ•œ๋œ๋‹ค [9, 10]. -* **๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๋ฐ ๋ช…๋ช… ๊ทœ์น™ (Branch Management & Naming)**: ๋ธŒ๋žœ์น˜๋Š” ์ˆ˜๋ช…์ด ์งง์•„์•ผ ํ•˜๊ณ , ๋‹จ์ผ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ์—๋งŒ ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ ํ›„์—๋Š” ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜์–ด์•ผ ํ•œ๋‹ค [9, 11]. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์„œ์ˆ ์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์ถ”์ ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ด์Šˆ/ํ‹ฐ์ผ“ ID(์˜ˆ: `feature/PROJ-123-user-auth`, `bugfix/GH-456-login-fix`)๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค [12, 13]. -* **์ปค๋ฐ‹ ๊ทœ์น™ (Commits)**: ๊ฐ ์ปค๋ฐ‹์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ํฌํ•จํ•˜๋Š” ์›์ž์  ์ปค๋ฐ‹(Atomic Commits) ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค [14]. ๊ฐ€๋…์„ฑ ๋†’์€ ํžˆ์Šคํ† ๋ฆฌ ์œ ์ง€์™€ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด `feat:`, `fix:`, `docs:`, `refactor:`, `chore:` ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” 'Conventional Commits' ํฌ๋งท์„ ๋”ฐ๋ฅธ๋‹ค [11, 15, 16]. -* **ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๋ฐ ๋ณ‘ํ•ฉ (PR & Merging)**: ์ฒ ์ €ํ•œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด PR์€ ๊ฐ€๊ธ‰์  ์ž‘์€ ํฌ๊ธฐ(์˜ˆ: 200์ค„ ์ดํ•˜)๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค [9]. ๋ณ‘ํ•ฉ ์ „์—๋Š” ์ตœ์†Œ ํ•œ ๋ช…์˜ ๋™๋ฃŒ ๋ฆฌ๋ทฐ์–ด ์Šน์ธ๊ณผ CI/CD ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋œ๋‹ค [9, 10]. ๊น”๋”ํ•œ `main` ๋ธŒ๋žœ์น˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์ด ๋„๋ฆฌ ๊ถŒ์žฅ๋œ๋‹ค [9, 17]. ๋˜ํ•œ, Storybook์ด๋‚˜ Chromatic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ํšŒ๊ท€(Visual regression) ๊ฒ€ํ† ๋ฅผ PR ๊ณผ์ •์— ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค [18]. -* **์ถฉ๋Œ ๋ฐฉ์ง€ (Conflict Prevention)**: ๊ฐœ๋ฐœ์ž๋Š” ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์ด ๋ˆ„์ ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์ฃผ ๊ฐ€์ ธ์™€(pull/rebase) ์ž์‹ ์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ , ์ถฉ๋Œ์„ ์ ์ง„์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค [7, 17]. - -## โš–๏ธ Trade-offs & Caveats -* **ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ vs Git Flow**: ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์€ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ๊ณผ ํ†ตํ•ฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€๋งŒ, ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI)์„ ์™„๋ฒฝํžˆ ๊ตฌ์ถ•ํ•œ ๊ฒฝํ—˜ ๋งŽ์€ ํŒ€์—๊ฒŒ ์ ํ•ฉํ•˜๋‹ค [8]. ๋ฐ˜๋ฉด, Git Flow๋Š” ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ๊ฐ•๋ ฅํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์†Œ๊ทœ๋ชจ ํŒ€์ด ๋„์ž…ํ•˜๊ธฐ์—๋Š” ๋ณต์žก์„ฑ๊ณผ ์ ˆ์ฐจ์  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์„œ ์ง„ํ–‰ ์†๋„๋ฅผ ๋Šฆ์ถ”๋Š” ๋ถ€์ž‘์šฉ(Trade-off)์ด ์žˆ๋‹ค [6, 8]. -* **๋ธŒ๋žœ์น˜ ์ˆ˜๋ช… (Branch Lifespan)**: ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์˜ค๋ž˜ ์œ ์ง€๋ ์ˆ˜๋ก ๋ณ‘ํ•ฉ ์ถฉ๋Œ์˜ ์œ„ํ—˜์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ปค์ง„๋‹ค. ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด ๋นˆ๋ฒˆํ•œ PR ์ƒ์„ฑ๊ณผ ์ฝ”๋“œ ๋™๊ธฐํ™”๋กœ ์ธํ•œ ๋ฌธ๋งฅ ์ „ํ™˜(Context switching) ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์žฅ๊ธฐ์ ์œผ๋กœ ํŒŒ๊ดด์ ์ธ ์ถฉ๋Œ๊ณผ ๋ฆฌํŒฉํ† ๋ง ๋น„์šฉ์„ ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€๊ฐ€ ์žˆ๋‹ค [7, 19]. -* **์—„๊ฒฉํ•œ ๊ทœ์น™ vs ์œ ์—ฐ์„ฑ**: ๋ชจ๋“  ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹์— ํ‹ฐ์ผ“ ID๋ฅผ ๊ฐ•์ œํ•˜๊ณ  Conventional Commits๋ฅผ ๋”ฐ๋ฅด๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ทœ์œจ์„ ์š”๊ตฌํ•˜์ง€๋งŒ, ์ด๋ฅผ ๊ฐ„๊ณผํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ ๋ณ€๊ฒฝ์˜ ๋งฅ๋ฝ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ์˜ ์ถ”์ ์„ฑ(Traceability)์„ ์™„์ „ํžˆ ์ƒ์‹คํ•˜๊ฒŒ ๋˜๋Š” ํ•œ๊ณ„์ ์ด ์กด์žฌํ•œ๋‹ค [20]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Trunk-Based Development]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฌด๊ฑฐ์šด Git Flow์— ๋Œ€๋น„๋˜๋Š” ๊ฒฝ๋Ÿ‰ํ™” ์ „๋žต์˜ ๋Œ€ํ‘œ์  ์‚ฌ๋ก€์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [6, 8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๋ฅผ ์ž์ฃผ, ์ž‘๊ฒŒ ๋ฐ€์–ด ๋„ฃ์Œ์œผ๋กœ์จ ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ณ  ๋น ๋ฅธ ์ฝ”๋“œ ํ†ตํ•ฉ์„ ์ด๋ฃจ๋Š” ์›๋ฆฌ. -- [[Git Flow]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜, ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜ ๋“ฑ์„ ๋‘๋Š” ์ „ํ†ต์ ์ด๊ณ  ๋ณต์žกํ•œ ๋ธŒ๋žœ์นญ ๋ชจ๋ธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [6, 8, 21]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ˆœํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋„˜์–ด ํŠน์ • ์Šค์ผ€์ค„๊ณผ ๋ฒ„์ „์— ๋”ฐ๋ฅธ ๋ณต์žกํ•œ ๋ฐฐํฌ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์š”๊ตฌ๋˜๋Š” ๊ตฌ์กฐ์  ์ ‘๊ทผ. -- [[GitHub Flow]] - - ์—ฐ๊ฒฐ ์ด์œ : ์•ˆ์ •์ ์ธ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์™€ PR ๊ธฐ๋ฐ˜์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์ค‘์ ์ธ ์ „๋žต์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [5, 22]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ถ”๊ฐ€์ ์ธ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜(develop ๋“ฑ) ์—†์ด ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ `main`์œผ๋กœ ๋ณ‘ํ•ฉ๋˜๋Š” ์ง€์†์  ๋ฐฐํฌ์˜ ํ๋ฆ„. - -#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[Conventional Commits]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋กœ์ ํŠธ์˜ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ํ‘œ์ค€ํ™”๋œ ํฌ๋งท์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [11, 15]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ผ๊ด€๋œ ์ปค๋ฐ‹ ํ˜•์‹์ด ์–ด๋–ป๊ฒŒ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ž๋™ํ™” ๋ฐ ์ฝ”๋“œ ํžˆ์Šคํ† ๋ฆฌ ์Šค์บ๋‹์œผ๋กœ ์ด์–ด์ง€๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜. -- [[Pull Requests (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๊ฐ€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ํ†ตํ•ฉ๋˜๊ธฐ ์ „ ๊ฒ€์ฆ์„ ๊ฑฐ์น˜๋Š” ํ•ต์‹ฌ ๊ด€๋ฌธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [14, 15]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒ€ ๋‚ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ(CI) ํ™•์ธ ๋“ฑ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ(Quality Gate)๋กœ์„œ์˜ ์ž‘๋™ ๋ฐฉ์‹. -- [[Visual Regression Testing]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์˜ ํŠน์„ฑ์ƒ PR ๋‹จ๊ณ„์—์„œ UI ์‹œ๊ฐ์  ๊ฒ€์ฆ ๋„๊ตฌ ์—ฐ๋™์ด ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [18]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Chromatic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด CSS, ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ PR ๋‹จ๊ณ„์—์„œ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•. - -### Deeper Research Questions - -- ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature-branch) ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜(Trunk-based) ๊ฐœ๋ฐœ๋กœ ์›ํ™œํ•˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด ํŒ€์€ ์–ด๋–ค ๋‹จ๊ณ„์  ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š”๊ฐ€? -- ์งง์€ ์ˆ˜๋ช…์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ž๋™ ๋ณ‘ํ•ฉ(Auto-merge)ํ•˜๋„๋ก ์ง€์›ํ•˜๋ ค๋ฉด CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- ์Šคํ† ๋ฆฌ๋ถ ๋ฐ Chromatic์„ ํ™œ์šฉํ•œ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual Regression Testing) ๋„๊ตฌ๋ฅผ PR ๋ฆฌ๋ทฐ ์ฃผ๊ธฐ์— ๋ณ‘๋ชฉ ํ˜„์ƒ ์—†์ด ์ตœ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์—ฌ๋Ÿฌ ์ปค๋ฐ‹์ด ํ•˜๋‚˜๋กœ ์••์ถ•๋˜๋Š” ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash Merge)์„ ์‚ฌ์šฉํ•  ๋•Œ, ํŠน์ • ์„ธ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์‚ฌ(Audit)ํ•˜๊ฑฐ๋‚˜ ์ถ”์ ํ•˜๋Š” ๋ฐ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„์ ์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature Flags)๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•  ๋•Œ ํ‹ฐ์ผ“ ID๊ฐ€ ํฌํ•จ๋œ ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์œ„๋กœ ์›์ž์  ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์žฆ์€ `pull`์„ ํ†ตํ•ด `main`๊ณผ์˜ ์ถฉ๋Œ์„ ์„ ์ œ์ ์œผ๋กœ ์˜ˆ๋ฐฉํ•œ๋‹ค. -- **System Design:** GitHub, GitLab ๋“ฑ์˜ ์ €์žฅ์†Œ ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™(Branch protection)์„ ์„ค์ •ํ•˜์—ฌ ์ง์ ‘ ์ปค๋ฐ‹์„ ์ฐจ๋‹จํ•˜๊ณ , ๋ณ‘ํ•ฉ ์ „ ์ตœ์†Œ 1๋ช…์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ CI ํ†ต๊ณผ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค. -- **Operation / Maintenance:** PR ๋ณ‘ํ•ฉ(Merge) ์‹œ ์ž๋™์œผ๋กœ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๊ฐ€ ์‚ญ์ œ๋˜๋„๋ก ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๊ณ , ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ์ปค๋ฐ‹ ํŠธ๋ฆฌ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค. -- **Learning Path:** ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ํ”„๋ก ํŠธ์—”๋“œ ์ž…๋ฌธ์ž๋Š” ๋ณต์žกํ•œ Git Flow ๋Œ€์‹ , `main` ๋ธŒ๋žœ์น˜์™€ ๋‹จ์ผ `feature` ๋ธŒ๋žœ์น˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ถ€ํ„ฐ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค. -- **My Project Relevance:** ํŒ€ ๋‚ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์—ํ‹ฐ์ผ“์„ ์ •๋ฆฝํ•˜๊ณ , JIRA ๋“ฑ ์ด์Šˆ ํŠธ๋ž˜์ปค์˜ ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ๋ฅผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ ์—ฐ๋™ํ•˜๋ฉฐ, Storybook์„ PR ๊ฒ€ํ†  ๊ณผ์ •์— ์—ฐ๋™ํ•˜์—ฌ UI ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ์ฐจ๋‹จํ•˜๋Š” ๊ทœ์น™์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๋ฐ ์ง์ ‘์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. - -### Adjacent Topics - -- [[Continuous Integration / Continuous Deployment (CI/CD)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: PR ์ƒ์„ฑ, ์ปค๋ฐ‹ ํ‘ธ์‹œ์™€ ๊ฐ™์€ Git ์ด๋ฒคํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ๊ฐœ๋ฐœ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๋‹จ์ถ•ํ•˜๋Š”์ง€ ์กฐ์‚ฌ. -- [[Storybook & Component-Driven Development]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ฒฉ๋ฆฌ๋œ ์ปดํฌ๋„ŒํŠธ ํ™˜๊ฒฝ์ด ์–ด๋–ป๊ฒŒ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Git)๊ณผ ์—ฐ๋™๋˜์–ด PR ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ์‹œ๊ฐ์  ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์  ์‚ฌ๋ก€ ํƒ๊ตฌ. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Git Workflow.md b/00_Raw/Git Workflow.md deleted file mode 100644 index 5dc64fac..00000000 --- a/00_Raw/Git Workflow.md +++ /dev/null @@ -1,75 +0,0 @@ -# [[Git Workflow]] - -## ๐Ÿ“Œ Brief Summary -Git Workflow(๊นƒ ์›Œํฌํ”Œ๋กœ์šฐ)๋Š” ํŒ€ ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ด€๋ฆฌํ•˜๊ณ  ํ˜‘์—…ํ•˜๊ธฐ ์œ„ํ•œ ์ฒด๊ณ„์ ์ด๊ณ  ๊ตฌ์กฐํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature-branch), ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜(Trunk-based), Git Flow ๋“ฑ ๋‹ค์–‘ํ•œ ์ „๋žต์„ ํฌ๊ด„ํ•˜๋ฉฐ, ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  `main` ๋ธŒ๋žœ์น˜์˜ ๋ฐฐํฌ ๊ฐ€๋Šฅ ์ƒํƒœ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [2-4]. ์ผ๊ด€๋œ ๋ธŒ๋žœ์น˜ ๋ช…๋ช… ๊ทœ์น™, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์•ฝ, ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)์™€ ๋ฆฌ๋ทฐ ์ ˆ์ฐจ๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ์จ ์ž ์žฌ์ ์ธ ํ˜ผ๋ˆ์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฆด๋ฆฌ์Šค ํ๋ฆ„์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 5, 6]. - -## ๐Ÿ“– Core Content -* **์ฃผ์š” ๋ธŒ๋žœ์นญ ์ „๋žต (Main Branching Strategies):** - * **Feature-Branch Workflow (๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ):** ์ฃผ ๋ธŒ๋žœ์น˜(`main`)๋ฅผ ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ์ž‘์—…์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •๋งˆ๋‹ค ์งง์€ ์ˆ˜๋ช…์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(์˜ˆ: `feature/login`)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค [3, 4, 7]. ์†Œ๊ทœ๋ชจ ํŒ€์— ๋งค์šฐ ์ ํ•ฉํ•˜๋ฉฐ, ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ์ฝ”๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 8]. - * **Trunk-Based Development (ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ):** ๊ฐ•๋ ฅํ•œ CI(์ง€์†์  ํ†ตํ•ฉ) ํ™˜๊ฒฝ์„ ๊ฐ–์ถ˜ ๊ฒฝํ—˜ ๋งŽ์€ ํŒ€์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์œผ๋กœ, ์•„์ฃผ ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•ด ์ž์ฃผ `main`์— ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ํ†ตํ•ฉ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค [8, 9]. - * **Git Flow:** `develop` ๋ฐ `release` ๋“ฑ ๋‹ค์ˆ˜์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์šด์˜ํ•˜๋ฉฐ ์Šค์ผ€์ค„๋œ ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜์ง€๋งŒ, ์†Œ๊ทœ๋ชจ ํŒ€์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ๋ฌด๊ฑฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 10]. - * **GitHub Flow:** ๊ธฐ๋Šฅ์„ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ๋’ค ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ฆฌ๋ทฐ๋ฐ›๊ณ  ๋ณ‘ํ•ฉํ•˜์—ฌ, `main`์—์„œ ๋ฐ”๋กœ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [11, 12]. - -* **๋ช…๋ช… ๊ทœ์น™ ๋ฐ ์ถ”์ ์„ฑ (Naming Conventions & Traceability):** - * **๋ธŒ๋žœ์น˜ ์ด๋ฆ„:** ๋ธŒ๋žœ์น˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด `feature/`, `bugfix/`์™€ ๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ‹ฐ์ผ“ ID๋ฅผ ํ•จ๊ป˜ ํฌํ•จ(์˜ˆ: `feature/PROJ-123-user-auth`)ํ•˜์—ฌ ์ด์Šˆ ํŠธ๋ž˜์ปค์™€์˜ ์ถ”์ ์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [13-15]. - * **์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€:** `type(scope): description` ํ˜•ํƒœ๋ฅผ ๋”ฐ๋ฅด๋Š” "Conventional Commits" ๊ทœ์•ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [6, 16]. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ `feat:`, ๋ฒ„๊ทธ ์ˆ˜์ •์€ `fix:`, ๋ฌธ์„œ ์ˆ˜์ •์€ `docs:` ๋“ฑ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋ณ€๊ฒฝ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค [6, 16]. - -* **ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์™€ ๋ณ‘ํ•ฉ (Pull Requests & Merging):** - * `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ํ‘ธ์‹œ(Push)ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•˜๊ณ , ๋ฐ˜๋“œ์‹œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ๋™๋ฃŒ์—๊ฒŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค [13, 17]. - * ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์†๋„์™€ ํ’ˆ์งˆ์„ ์œ„ํ•ด PR์€ ์ž‘๊ณ  ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ(Atomic Commits) ๋‹จ์œ„๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [16, 18]. - * ๋ณ‘ํ•ฉ ์‹œ์—๋Š” ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ๋ณ‘ํ•ฉ์ด ์™„๋ฃŒ๋œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋Š” ์ž๋™์œผ๋กœ ์‚ญ์ œํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค [17-19]. - -## โš–๏ธ Trade-offs & Caveats -* **๊ตฌ์กฐ์˜ ๋ณต์žก์„ฑ vs. ํŒ€์˜ ๊ทœ๋ชจ:** Git Flow๋Š” ๋Œ€๊ทœ๋ชจ์˜ ๋ณต์žกํ•œ ๋ฆด๋ฆฌ์Šค ๊ณ„ํš์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ณ  ๋ณ‘ํ•ฉ ์ง€์—ฐ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค [8, 20]. ๋ฐ˜๋ฉด, Feature-Branch ์›Œํฌํ”Œ๋กœ์šฐ๋‚˜ Trunk-Based ๋ฐฉ์‹์€ ์†Œ๊ทœ๋ชจ ํŒ€์ด ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ๊ฒŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๋„๋ก ๋•์ง€๋งŒ, ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ์—„๊ฒฉํ•œ ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•œ๊ณ„์— ๋ถ€๋”ชํž ์ˆ˜ ์žˆ์–ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ง„ํ™”(Migration)์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค [8, 10]. -* **๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…๊ณผ ์ถฉ๋Œ:** ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ๋ถ€์ž‘์šฉ์€ ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…์ด ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์™€์˜ ์ฐจ์ด๊ฐ€ ์ปค์ ธ ์‹ฌ๊ฐํ•œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ(Merge Conflict)์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [20, 21]. ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ž์ฃผ `main` ๋ธŒ๋žœ์น˜๋ฅผ ํ’€(Pull) ๋ฐ›๊ฑฐ๋‚˜ ๋ฆฌ๋ฒ ์ด์Šค(Rebase)ํ•˜์—ฌ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [19, 20]. -* **์™„์ „ํ•œ ์ถ”์ ์„ฑ์˜ ๋Œ€๊ฐ€:** ๋ชจ๋“  ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹์— ํ‹ฐ์ผ“ ID ๋ถ€์—ฌ๋ฅผ ๊ฐ•์ œํ•˜๋ฉด ๋ฒ„๊ทธ ์ถ”์ ์ด๋‚˜ ๋ฆฌ๋ทฐ์— ์žˆ์–ด ์ปจํ…์ŠคํŠธ ํ™•๋ณด์—๋Š” ํƒ์›”ํ•˜๋‚˜ [5, 22], ์•„์ฃผ ๋‹จ์ˆœํ•˜๊ณ  ์‚ฌ์†Œํ•œ ์ฝ”๋“œ ์ˆ˜์ • ์ž‘์—…์—๋„ ๋ฐ˜๋“œ์‹œ ํ‹ฐ์ผ“์„ ์ƒ์„ฑํ•˜๊ณ  ์ ˆ์ฐจ๋ฅผ ๋ฐŸ์•„์•ผ ํ•˜๋Š” ์†๋„ ์ €ํ•˜์˜ ๋‹จ์ ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [23]. -* **Trunk-Based ์ „ํ™˜์˜ ์ „์ œ ์กฐ๊ฑด:** Trunk-Based Development๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋น ๋ฅธ ํ†ตํ•ฉ์˜ ์ด์ ์„ ์–ป๊ณ ์ž ํ•œ๋‹ค๋ฉด, ์ฝ”๋“œ์˜ ๋ถˆ์•ˆ์ •์„ฑ์„ ๊ฐ์ถ”๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ ํ† ๊ธ€(Feature flags) ๊ธฐ๋ฒ•๊ณผ ๋ณ‘ํ•ฉ ์ „ ๊ฒฐํ•จ์„ ์žก์•„๋‚ผ ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”(CI)๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋œ๋‹ค๋Š” ์ œ์•ฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค [12]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ )] -- `[[Trunk-Based Development]]` - - ์—ฐ๊ฒฐ ์ด์œ : Git Workflow๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์ „๋žต ์ค‘ ํ•˜๋‚˜๋กœ, ๋น ๋ฅธ ํ†ตํ•ฉ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [2]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜, ๋นˆ๋ฒˆํ•œ ๋ณ‘ํ•ฉ, ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature Flags) ํ™œ์šฉ์ด ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ์†๋„์— ์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 12]. - -- `[[Git Flow]]` - - ์—ฐ๊ฒฐ ์ด์œ : ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ „ํ†ต์  ๋ธŒ๋žœ์นญ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค [2, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `develop`, `release`, `hotfix` ๋“ฑ ๋‹ค์ค‘ ๋ธŒ๋žœ์น˜ ์ „๋žต์ด ์™œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•˜๋ฉด์„œ๋„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 10]. - -#### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ)] -- `[[Conventional Commits]]` - - ์—ฐ๊ฒฐ ์ด์œ : ํŒ€์˜ ์ผ๊ด€๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด Git ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ์— ์ ์šฉ๋˜๋Š” ์—…๊ณ„ ํ‘œ์ค€ ๊ทœ์น™์ž…๋‹ˆ๋‹ค [6, 16]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `feat:`, `fix:`, `chore:`์™€ ๊ฐ™์€ ์ ‘๋‘์‚ฌ๊ฐ€ ๋ฆฌ๋ทฐ์–ด์˜ ์ฝ”๋“œ ์ดํ•ด๋„๋ฅผ ์–ด๋–ป๊ฒŒ ๋†’์ด๊ณ  ์ž๋™ํ™”๋œ ๋ฆด๋ฆฌ์Šค์— ๊ธฐ์—ฌํ•˜๋Š”์ง€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 16]. - -- `[[Pull Requests (PR)]]` - - ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋žœ์น˜์˜ ์ฝ”๋“œ๋ฅผ `main`์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „, ํ˜‘์—… ํŒ€์›๋“ค์ด ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ํ•ต์‹ฌ ๊ด€๋ฌธ์ž…๋‹ˆ๋‹ค [13, 16]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ์„ค์ •, ๋™๋ฃŒ ๋ฆฌ๋ทฐ ์š”๊ตฌ(1 review required), ์ง€์†์  ํ†ตํ•ฉ(CI) ์ฒดํฌ๊ฐ€ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ์œ ์ง€์— ์–ด๋–ป๊ฒŒ ํ•„์ˆ˜์ ์œผ๋กœ ์ž‘์šฉํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 17]. - -- `[[Ticket IDs (Traceability)]]` - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์–ด๋–ค ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ(์˜ˆ: Jira ํ‹ฐ์ผ“)์— ์˜ํ•ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋„๊ตฌ์  ์žฅ์น˜์ž…๋‹ˆ๋‹ค [5, 22]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `PROJ-123` ํ˜•ํƒœ์˜ ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ๋ฅผ ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹์— ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ๋งฅ๋ฝ์„ ์ œ๊ณตํ•˜๊ณ , ๋ฌธ์„œํ™” ๋ฐ ์ž‘์—… ์ถ”์ (Traceability)์„ ์–ด๋–ป๊ฒŒ ๋‹ฌ์„ฑํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 22]. - -### Deeper Research Questions -- ์†Œ๊ทœ๋ชจ ํŒ€์ด ์„ฑ์žฅํ•˜์—ฌ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•  ๋•Œ, Feature Branch Workflow์—์„œ Git Flow๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋ฉด ์–ด๋–ค ์ ˆ์ฐจ์™€ ํŒ€ ๋‚ด ๊ต์œก์ด ํ•„์š”ํ•œ๊ฐ€? -- Trunk-Based Development๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด CI/CD(์ง€์†์  ํ†ตํ•ฉ/๋ฐฐํฌ) ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€? -- Conventional Commits ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์ž๋™ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹œ๋งจํ‹ฑ ๋ฒ„์ €๋‹(Semantic Versioning)์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ์ˆ ์  ์›๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€? -- ๋‹ค์ˆ˜์˜ ์ž‘์—…์ž๊ฐ€ ๊ฒน์น˜๋Š” ์˜์—ญ์„ ์ˆ˜์ •ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” Merge Conflict๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด, 'Atomic Commits'์™€ '์ž์ฃผ ๋ณ‘ํ•ฉํ•˜๊ธฐ' ์›์น™์€ ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌ์ฒด์ ์œผ๋กœ ์ ์šฉ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€? -- ์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด PR์˜ ๊ทœ๋ชจ๋ฅผ ์ž‘๊ฒŒ(์˜ˆ: 200์ค„ ์ดํ•˜) ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋…ผ๋ฆฌ์ ์ธ ๊ธฐ๋Šฅ ๋‹จ์œ„๋ฅผ ํ›ผ์†ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ๋ถ„ํ•  ๊ธฐ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ์ƒˆ๋กœ์šด ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ ๋ฌด์กฐ๊ฑด `git checkout -b feature/ํ‹ฐ์ผ“ID-์ž‘์—…๋ช…`์œผ๋กœ ๋…๋ฆฝ์ ์ธ ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ๊ณ , ์™„๋ฃŒ ํ›„ `feat:` ๋“ฑ์˜ ๊ทœ์น™์„ ๋”ฐ๋ฅธ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•œ ๋’ค `main` ๋ธŒ๋žœ์น˜์— PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [6, 7, 13, 22]. -- **System Design:** GitHub์™€ ๊ฐ™์€ ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ์—์„œ `main` ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ(Branch Protection) ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ง์ ‘ ํ‘ธ์‹œ๋ฅผ ๋ง‰๊ณ , CI ๋นŒ๋“œ ํ†ต๊ณผ์™€ ์ตœ์†Œ 1์ธ์˜ ์Šน์ธ์ด ์žˆ์–ด์•ผ ๋ณ‘ํ•ฉ๋˜๋„๋ก ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [17]. -- **Operation / Maintenance:** ๋ธŒ๋žœ์น˜๊ฐ€ ๋ณ‘ํ•ฉ๋  ๋•Œ๋งˆ๋‹ค ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash and merge)์„ ๊ฐ•์ œํ•˜์—ฌ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‹จ์ผ ํ•ญ๋ชฉ์œผ๋กœ ์••์ถ•ํ•˜๊ณ , ๋ณ‘ํ•ฉ ํ›„ ๋‚จ์€ ๋ธŒ๋žœ์น˜๋ฅผ ์ž๋™ ์‚ญ์ œ(Auto-delete) ์„ค์ •ํ•˜์—ฌ ์ €์žฅ์†Œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค [17-19]. -- **Learning Path:** Git์— ์ž…๋ฌธํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๋ณต์žกํ•œ `develop` ๋ธŒ๋žœ์น˜ ์—†์ด `main` ๋ธŒ๋žœ์น˜ ํ•˜๋‚˜์™€ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋“ค๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ๊ฐ€๋ฒผ์šด ์›Œํฌํ”Œ๋กœ์šฐ(Feature-Branch Workflow)๋ฅผ ๋จผ์ € ํ•™์Šตํ•˜๊ณ  ์ฒดํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [4, 8]. -- **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ํ•˜๋Š” 3์ธ ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ ๋“ฑ์—์„œ๋Š” Git Flow์˜ ๋ฌด๊ฑฐ์šด ์ ˆ์ฐจ๋ฅผ ํ”ผํ•˜๊ณ , ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ •์ ์ธ `main` ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์งง์€ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋น ๋ฅธ ๋ฆฌ๋ทฐ์™€ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์„ ์ฆ‰๊ฐ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 8]. - -### Adjacent Topics -- `[[CI/CD (Continuous Integration/Continuous Deployment)]]` - - ํ™•์žฅ ๋ฐฉํ–ฅ: PR์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ‘ํ•ฉํ•  ๋•Œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋นŒ๋“œ, ๋ฐฐํฌํ•˜๋Š” ์ธํ”„๋ผ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ์กฐ์‚ฌ. -- `[[Semantic Versioning (SemVer)]]` - - ํ™•์žฅ ๋ฐฉํ–ฅ: Git ํƒœ๊ทธ(Tag)์™€ Conventional Commits๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ฒ„์ „์„ ์ฒด๊ณ„์ ์ด๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ™•์žฅ. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/GitHub Flow in Small Teams.md b/00_Raw/GitHub Flow in Small Teams.md deleted file mode 100644 index 9958d9ca..00000000 --- a/00_Raw/GitHub Flow in Small Teams.md +++ /dev/null @@ -1,61 +0,0 @@ -# [[GitHub Flow in Small Teams]] - -## ๐Ÿ“Œ Brief Summary -GitHub Flow in Small Teams(์†Œ๊ทœ๋ชจ ํŒ€์„ ์œ„ํ•œ GitHub Flow)๋Š” ๋ฌด๊ฑฐ์šด ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ์ฝ”๋“œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ด‰์ง„ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ธŒ๋žœ์นญ ์ „๋žต์ด๋‹ค [1-3]. ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” `main` ๋ธŒ๋žœ์น˜์™€ ํŠน์ • ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•ด ์ƒ์„ฑ๋˜๋Š” ์ˆ˜๋ช…์ด ์งง์€ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜(Feature Branch)๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์šด์˜๋œ๋‹ค [2, 4]. ๊ฐœ๋ฐœ๋œ ์ฝ”๋“œ๋Š” ๋ฐ˜๋“œ์‹œ Pull Request(PR)์™€ ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ๋™๋ฃŒ ๋ฆฌ๋ทฐ(Peer Review)๋ฅผ ๊ฑฐ์นœ ํ›„ ์Šค์ฟผ์‹œ(Squash) ๋“ฑ์˜ ๋ฐฉ์‹์œผ๋กœ ๋ณ‘ํ•ฉ๋˜์–ด ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์•ˆ์ •์„ฑ๊ณผ ๊น”๋”ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์žฅํ•œ๋‹ค [5-7]. - -## ๐Ÿ“– Core Content -* **๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ (Main Branch Protection)**: `main` (๋˜๋Š” `master`) ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ์ฆ‰์‹œ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด ๋ธŒ๋žœ์น˜๋กœ์˜ ์ง์ ‘์ ์ธ ํ‘ธ์‹œ(Push)๋‚˜ ์ปค๋ฐ‹์€ ๊ธˆ์ง€๋œ๋‹ค [2, 4-6]. ์ด๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด GitHub ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ, ๋ณ‘ํ•ฉ ์ „ ํ•„์ˆ˜ ๋ฆฌ๋ทฐ์™€ ์ตœ์‹  ์ƒํƒœ ์œ ์ง€๋ฅผ ๊ฐ•์ œํ•ด์•ผ ํ•œ๋‹ค [5]. -* **๋‹จ๊ธฐ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜ (Short-lived Feature Branches)**: ์ƒˆ๋กœ์šด ์ž‘์—…, ๊ธฐ๋Šฅ ์ถ”๊ฐ€, ๋˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • ์‹œ ๋ฌด์กฐ๊ฑด `main`์—์„œ ํŒŒ์ƒ๋œ ๊ฐœ๋ณ„ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค [4, 6, 8]. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ `feature/`, `bugfix/`, `chore/` ๋“ฑ์˜ ๋ช…ํ™•ํ•œ ์ ‘๋‘์‚ฌ์™€ ์งง์€ ์„ค๋ช…, ๊ทธ๋ฆฌ๊ณ  ์ด์Šˆ ์ถ”์ ์„ ์œ„ํ•œ ํ‹ฐ์ผ“ ID(์˜ˆ: `feature/PROJ-123-login`)๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค [9-11]. -* **์›์ž์  ์ปค๋ฐ‹๊ณผ ๊ทœ๊ฒฉํ™” (Atomic & Conventional Commits)**: ์ปค๋ฐ‹์€ ์ž์ฃผ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์—๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ๋‹ด์•„์•ผ ํ•œ๋‹ค [5, 8, 9]. `feat:`, `fix:`, `docs:` ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” Conventional Commits ํ˜•์‹์„ ์ ์šฉํ•ด ๋ณ€๊ฒฝ ๋‚ด์šฉ๊ณผ ๊ทธ ์ด์œ ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค [9, 12]. -* **Pull Request (PR)์™€ ๋™๋ฃŒ ๋ฆฌ๋ทฐ (Peer Review)**: ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด `main`์„ ํ–ฅํ•ด PR์„ ์ƒ์„ฑํ•œ๋‹ค [7, 9]. PR์˜ ํฌ๊ธฐ๋Š” ๊ฐ€๊ธ‰์  ์ž‘๊ฒŒ(์˜ˆ: 200์ค„ ์ดํ•˜) ์œ ์ง€ํ•˜์—ฌ ๋ฆฌ๋ทฐ ์†๋„์™€ ์งˆ์„ ๋†’์ธ๋‹ค [5]. ๋ณ‘ํ•ฉ์„ ์œ„ํ•ด์„œ๋Š” ํŒ€์› ์ค‘ ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ๋ฆฌ๋ทฐ ๋ฐ ์Šน์ธ์ด ํ•„์ˆ˜์ ์ด๋ฉฐ, ์ž๋™ํ™”๋œ CI ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค [5, 7, 9]. -* **๋™๊ธฐํ™”์™€ ์ถฉ๋Œ ๋ฐฉ์ง€ (Syncing & Conflict Prevention)**: ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ž‘์—… ์‹œ์ž‘ ์ „ ํ•ญ์ƒ `main`์˜ ์ตœ์‹  ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ (Pull), ์ž‘์—… ์ค‘์ธ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์— ์ž์ฃผ `rebase` ๋˜๋Š” ๋ณ‘ํ•ฉํ•˜์—ฌ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค [3, 7]. -* **๋ณ‘ํ•ฉ ๋ฐ ์ •๋ฆฌ (Merge and Cleanup)**: ๋ณ‘ํ•ฉ ์‹œ์—๋Š” ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์„ ์‚ฌ์šฉํ•˜์—ฌ `main`์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ•œ ์ค„๋กœ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์ „๋žต์ด ์„ ํ˜ธ๋œ๋‹ค [5, 7, 13]. ๋ณ‘ํ•ฉ์ด ์™„๋ฃŒ๋œ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ •๋ˆํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค [5, 8]. - -## โš–๏ธ Trade-offs & Caveats -์ด ์ „๋žต์€ ๊ฑฐ๋Œ€ํ•œ Git Flow ๋ฐฉ์‹์ด ๊ฐ€์ง€๋Š” ๋ณต์žก์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ํ˜‘์—…์˜ ์†๋„์™€ ์œ ์—ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ธ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค [3, 14]. ํ•˜์ง€๋งŒ ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜๊ฐ€ ์žฅ๊ธฐํ™”(Long-lived)๋  ๊ฒฝ์šฐ ๋‚˜์ค‘์— ๋ณ‘ํ•ฉํ•  ๋•Œ ๊ทน์‹ฌํ•œ ์ฝ”๋“œ ์ถฉ๋Œ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…์„ ๋ฉฐ์น  ์ด๋‚ด๋กœ ์งง๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ทœ์œจ์ด ํ•„์ˆ˜์ ์ด๋‹ค [15]. ๋˜ํ•œ, ๋น ๋ฅธ ์†๋„์— ์น˜์ค‘ํ•˜์—ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง„ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๋“ฑ์˜ ์•ˆํ‹ฐ ํŒจํ„ด์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค [15, 16]. ์ž‘์€ ํŒ€์—์„œ๋Š” ๋งค์šฐ ํšจ์œจ์ ์ด์ง€๋งŒ ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์Šค ์ผ์ •์ด ์—„๊ฒฉํ•˜๊ฑฐ๋‚˜ ํŒ€ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๊ฒฝ์šฐ ๊ด€๋ฆฌ์— ํ•œ๊ณ„๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ [14], ๋งค์šฐ ์‚ฌ์†Œํ•˜๊ณ  ์ž‘์€ ์ˆ˜์ • ์‚ฌํ•ญ์˜ ๊ฒฝ์šฐ ๋งค๋ฒˆ PR์„ ๊ฑฐ์น˜๋Š” ๊ฒƒ์ด ๊ณผ๋„ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ๋А๊ปด์งˆ ์—ฌ์ง€๋„ ์žˆ๋‹ค [3]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Short-Lived Feature Branches]] - - ์—ฐ๊ฒฐ ์ด์œ : GitHub Flow์—์„œ ์ž‘์—…์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋‹จ์œ„์ด๋‹ค [2, 4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋žœ์น˜๊ฐ€ ์˜ค๋ž˜ ์œ ์ง€๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ†ตํ•ฉ์˜ ๊ณ ํ†ต์„ ํ”ผํ•˜๊ณ , ์ž‘์€ ๋‹จ์œ„์˜ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๊ณผ ๋น ๋ฅธ ๋ฐฐํฌ ์‚ฌ์ดํด์„ ๋‹ฌ์„ฑํ•˜๋Š” ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. - -#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[Pull Request (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๊ฐ€ `main`์œผ๋กœ ๋ณ‘ํ•ฉ๋˜๊ธฐ ์ „ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ๊ด€๋ฌธ์ด์ž ์†Œํ†ต์˜ ์žฅ์ด๋‹ค [5, 8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ ๋™๋ฃŒ ๋ฆฌ๋ทฐ(Peer Review)์™€ CI(์ง€์†์  ํ†ตํ•ฉ) ์ž๋™ํ™”๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ฐฉ์–ดํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. -- [[Conventional Commits]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…ํ™•ํžˆ ๊ทœ๊ฒฉํ™”ํ•˜์—ฌ PR ๋ฆฌ๋ทฐ์™€ ์ฝ”๋“œ ๊ด€๋ฆฌ๋ฅผ ๋•๋Š” ๊ด€๋ก€์ด๋‹ค [9, 12]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `feat:`, `fix:` ๋“ฑ์˜ ์ ‘๋‘์‚ฌ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ์†Œํ†ตํ•˜๊ณ , ๋‚˜์•„๊ฐ€ ์ž๋™ํ™”๋œ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ƒ์„ฑ์˜ ๊ธฐ๋ฐ˜์„ ๋งˆ๋ จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. -- [[Squash Merge]] - - ์—ฐ๊ฒฐ ์ด์œ : PR์„ `main`์— ๋ณ‘ํ•ฉํ•  ๋•Œ ์„ ํ˜ธ๋˜๋Š” ์ „๋žต์ด๋‹ค [5, 7, 13]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐœ์ƒํ•œ ์—ฌ๋Ÿฌ ์ž์ž˜ํ•œ ์ปค๋ฐ‹๋“ค์„ ํ•˜๋‚˜์˜ ์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹์œผ๋กœ ์••์ถ•ํ•˜์—ฌ `main` ๋ธŒ๋žœ์น˜์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. -- [[Ticket ID Traceability]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ธŒ๋žœ์น˜ ์ด๋ฆ„๊ณผ ์ปค๋ฐ‹์— ์ด์Šˆ ํŠธ๋ž˜์ปค(JIRA, GitHub Issues ๋“ฑ)์˜ ID๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€์ด๋‹ค [17, 18]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์–ด๋–ค ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์ด๋‚˜ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ๋น„์ฆˆ๋‹ˆ์Šค์  ๋ฌธ๋งฅ(Context)์„ ์‰ฝ๊ฒŒ ์ถ”์ ํ•˜๋Š” ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. - -### Deeper Research Questions -- ์†Œ๊ทœ๋ชจ ํŒ€(2~5๋ช…)์ด ์ค‘๋Œ€ํ˜• ํŒ€(10๋ช… ์ด์ƒ)์œผ๋กœ ์Šค์ผ€์ผ์—…ํ•  ๋•Œ, GitHub Flow์˜ ์–ด๋–ค ์ง€์ ์—์„œ ๋ณ‘๋ชฉ(์˜ˆ: ๋ฆฌ๋ทฐ ์ ์ฒด, ์ถฉ๋Œ ๋นˆ๋„ ์ฆ๊ฐ€)์ด ๋ฐœ์ƒํ•˜๋ฉฐ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- Pull Request์˜ ํฌ๊ธฐ๋ฅผ ๋ฆฌ๋ทฐ๊ฐ€ ์šฉ์ดํ•œ 200์ค„ ์ดํ•˜๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ๋ถ„ํ• (Task Breakdown)ํ•ด์•ผ ํšจ๊ณผ์ ์ธ๊ฐ€? -- CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ GitHub Flow๋ฅผ ์—ฐ๋™ํ•  ๋•Œ, `main` ๋ธŒ๋žœ์น˜์˜ 'ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(Always Deployable)'๋ฅผ ๊ธฐ์ˆ ์ ์œผ๋กœ ์™„๋ฒฝํžˆ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ํ…Œ์ŠคํŠธ ๋ฐ ์ž๋™ํ™” ์ „๋žต์ด ํ•„์š”ํ•œ๊ฐ€? -- ์žฅ๊ธฐ ์‹คํ–‰ ๋ธŒ๋žœ์น˜(Long-running branches)๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์•ˆ์œผ๋กœ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature Flags)๋ฅผ ๋„์ž…ํ•  ๊ฒฝ์šฐ, ๊ธฐ์กด GitHub Flow ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- ๋ฆฌ๋ทฐ ์ธ๋ ฅ์ด ๋ถ€์กฑํ•œ ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ ๋™๋ฃŒ ๋ฆฌ๋ทฐ์˜ ๋ณ‘๋ชฉ์„ ์ค„์ด๊ณ  ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธํ™”์  ๋˜๋Š” ๋„๊ตฌ์  ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** 3~5์ธ ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ธํŒ… ์‹œ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ์˜ต์…˜์„ ์ผœ๊ณ , ์ง์ ‘ ํ‘ธ์‹œ๋ฅผ ์ œํ•œํ•˜๋ฉฐ, ์ตœ์†Œ 1๋ช…์˜ Approve์™€ CI ํ†ต๊ณผ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๋ฃฐ์„ ์ ์šฉํ•˜์—ฌ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค [5, 7]. -- **System Design:** GitHub Actions ๋“ฑ์˜ CI ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜์—ฌ PR์ด ์—ด๋ ธ์„ ๋•Œ ์ž๋™์œผ๋กœ ๋ฆฐํŒ…, ํฌ๋งทํŒ…, ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ฆฌ๋ทฐ์–ด์˜ ๋ถ€๋‹ด์„ ๋œ์–ด์ฃผ๋„๋ก ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•œ๋‹ค [19, 20]. -- **Operation / Maintenance:** PR ๋ณ‘ํ•ฉ์ด ์™„๋ฃŒ๋œ ๋ธŒ๋žœ์น˜๋ฅผ GitHub์˜ 'Auto-delete merged branches' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์‚ญ์ œํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ธŒ๋žœ์น˜๊ฐ€ ์Œ“์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฒญ๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค [5, 8]. -- **Learning Path:** Git ๊ธฐ์ดˆ (๋ธŒ๋žœ์น˜ ์ƒ์„ฑ, ์ปค๋ฐ‹) -> GitHub Flow ์‚ฌ์ดํด ์ดํ•ด (๋ธŒ๋žœ์น˜ ํŒŒ์ƒ -> ์›์ž์  ์ปค๋ฐ‹ -> PR -> ๋ฆฌ๋ทฐ -> ๋ณ‘ํ•ฉ) -> ํŒ€ ๋‚ด ๋ช…๋ช… ๊ทœ์น™ ๋ฐ Conventional Commits ์ˆ™๋‹ฌ -> CI/CD ์ž๋™ํ™” ์—ฐ๋™ ์ˆœ์œผ๋กœ ํ•™์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค. -- **My Project Relevance:** ํ˜„์žฌ ์ฐธ์—ฌ ์ค‘์ธ ํ”„๋ก ํŠธ์—”๋“œ/๋ฐฑ์—”๋“œ ํ˜‘์—… ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ ํ†ตํ•ฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์„œ๋กœ์˜ ์ฝ”๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌ๋ทฐํ•˜๋ฉฐ ์•ˆ์ •์ ์ธ ํ”„๋กœ๋•์…˜ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ํ”„๋กœ์„ธ์Šค๋กœ ์ฆ‰์‹œ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค [14, 20]. - -### Adjacent Topics -- [[Git Flow]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ •๊ธฐ์ ์ด๊ณ  ๊ณ„ํš์ ์ธ ๋ฆด๋ฆฌ์Šค ์ผ์ •์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์„œ `develop` ๋ฐ `release` ๋ธŒ๋žœ์น˜ ๋“ฑ ๋” ์—„๊ฒฉํ•˜๊ณ  ์„ธ๋ถ„ํ™”๋œ ๋ธŒ๋žœ์นญ ๋ชจ๋ธ์ด ํ•„์š”ํ•  ๋•Œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ ์ „๋žต ๋น„๊ต [14, 21]. -- [[Trunk-Based Development]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: CI/CD ์„ฑ์ˆ™๋„๊ฐ€ ๋†’๊ณ  ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature Flag)๋ฅผ ์ ๊ทน ์‚ฌ์šฉํ•˜๋Š” ํŒ€์—์„œ, ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜์˜ ์ˆ˜๋ช…์„ ๊ทน๋‹จ์ ์œผ๋กœ ์ค„์ด๊ฑฐ๋‚˜ ์•„์˜ˆ ์—†์ด ๋ฉ”์ธ๋ผ์ธ์— ํ•˜๋ฃจ์—๋„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ํ†ตํ•ฉ ๋ฐฉ์‹ ํƒ์ƒ‰ [14, 22]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/GitHub Flow.md b/00_Raw/GitHub Flow.md deleted file mode 100644 index 2214b4bc..00000000 --- a/00_Raw/GitHub Flow.md +++ /dev/null @@ -1,64 +0,0 @@ -# [[GitHub Flow]] - -## ๐Ÿ“Œ Brief Summary -GitHub Flow๋Š” ๋ณต์žกํ•œ Git Flow์˜ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€๋ณ๊ณ  ๋‹จ์ˆœํ•œ ๋ธŒ๋žœ์น˜ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ๋ฐฉ์‹์€ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(deployable)๋ฅผ ์œ ์ง€ํ•˜๋Š” `main` ๋ธŒ๋žœ์น˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์ƒˆ๋กœ์šด ์ž‘์—…์„ ์œ„ํ•ด ์งง์€ ์ฃผ๊ธฐ์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(feature branch)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [3-5]. ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๋Š” ๋™๋ฃŒ์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ CI/CD ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ•œ ํ›„ ์˜ค์ง Pull Request(PR)๋ฅผ ํ†ตํ•ด์„œ๋งŒ `main`์— ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค [1, 6]. - -## ๐Ÿ“– Core Content -* **์•ˆ์ •์ ์ธ `main` ๋ธŒ๋žœ์น˜ ์œ ์ง€** - GitHub Flow์˜ ํ•ต์‹ฌ์€ `main` (๋˜๋Š” `master`) ๋ธŒ๋žœ์น˜๊ฐ€ ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ์–ธ์ œ๋“  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [3-5]. ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋„ `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹(direct commit)ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [1, 6, 7]. -* **๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature Branch) ๊ธฐ๋ฐ˜ ์ž‘์—…** - ๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๋ฒ„๊ทธ ์ˆ˜์ •, ๋ฌธ์„œ ์ž‘์—… ๋“ฑ์€ `main`์—์„œ ํŒŒ์ƒ๋œ ์งง์€ ์ˆ˜๋ช…(short-lived)์˜ ์ „์šฉ ๋ธŒ๋žœ์น˜์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3-5]. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ `feature/user-auth` ๋˜๋Š” `bugfix/login-error`์™€ ๊ฐ™์ด ์„ค๋ช…์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ๊ฐ€๋Šฅํ•˜๋ฉด ํ‹ฐ์ผ“ ID(์˜ˆ: `PROJ-123`)๋ฅผ ํฌํ•จํ•˜์—ฌ ์ถ”์ ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [8, 9]. -* **Pull Request (PR) ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ** - ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด `main` ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [6, 10]. ๋ณ‘ํ•ฉ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ํŒ€์›์—๊ฒŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ(Peer Review)๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋ฉฐ, CI/CD ํ™˜๊ฒฝ์—์„œ์˜ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 6, 8]. ์ด๋Š” ํ˜ผ์ž์„œ ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์•ˆ์ „์žฅ์น˜์ž…๋‹ˆ๋‹ค [8]. -* **๋ณ‘ํ•ฉ ๊ทœ์น™๊ณผ ์ •๋ฆฌ** - ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด PR์„ ๋ณ‘ํ•ฉํ•  ๋•Œ๋Š” 'Squash Merge' ๋ฐฉ์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [6, 7, 11]. ์„ฑ๊ณต์ ์œผ๋กœ ๋ณ‘ํ•ฉ๋œ ์ดํ›„์—๋Š” ๋ถˆํ•„์š”ํ•œ ๋ธŒ๋žœ์น˜๊ฐ€ ์Œ“์ด์ง€ ์•Š๋„๋ก ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ฆ‰์‹œ ์‚ญ์ œ(auto-delete)ํ•ฉ๋‹ˆ๋‹ค [6, 8, 11]. -* **์›Œํฌํ”Œ๋กœ์šฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Migration)** - ํŒ€์ด ๊ธฐ์กด์˜ ๋ณต์žกํ•œ Git Flow์—์„œ GitHub Flow๋กœ ์ „ํ™˜ํ•˜์—ฌ ํ†ตํ•ฉ ์†๋„๋ฅผ ๋†’์ด๊ณ  ๋‹จ์ˆœํ™”ํ•˜๋ ค๋ฉด, ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜(release branch) ์ƒ์„ฑ์„ ์ค‘๋‹จํ•˜๊ณ , `develop` ๋ธŒ๋žœ์น˜๋ฅผ `main`์œผ๋กœ ํ†ตํ•ฉํ•œ ๋’ค, `main` ๋ธŒ๋žœ์น˜์—์„œ ์ง์ ‘ ๋ฐฐํฌํ•˜๋„๋ก CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. ๋ฐ˜๋Œ€๋กœ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๊ฐ€ ๋” ๋ณต์žกํ•ด์ง€๋ฉด `develop` ๋ธŒ๋žœ์น˜ ๋“ฑ์„ ์ถ”๊ฐ€ํ•ด Git Flow๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค [12]. - -## โš–๏ธ Trade-offs & Caveats -* **๋ณ‘ํ•ฉ ์ฝ”๋“œ์˜ ์ฆ‰๊ฐ์ ์ธ ๋ฆฌ์Šคํฌ**: `main` ๋ธŒ๋žœ์น˜๊ฐ€ ์œ ์ผํ•œ ๋ฐฐํฌ ๊ธฐ์ค€์ ์ด ๋˜๋ฏ€๋กœ, ๋ฆฌ๋ทฐ๋‚˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๋ฒ„๊ทธ๊ฐ€ ํฌํ•จ๋œ ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋  ๊ฒฝ์šฐ ํ”„๋กœ๋•์…˜(์šด์˜) ํ™˜๊ฒฝ์— ์น˜๋ช…์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13, 14]. ๋”ฐ๋ผ์„œ ๊ฐ•๋ ฅํ•œ CI/CD ์ž๋™ํ™” ํ™˜๊ฒฝ๊ณผ Branch Protection Rule(๋ณดํ˜ธ ๊ทœ์น™)์ด ํ•„์ˆ˜์ ์œผ๋กœ ๋’ท๋ฐ›์นจ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 6]. -* **๋ธŒ๋žœ์น˜ ์ˆ˜๋ช… ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€**: ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜ ์œ ์ง€(Long-lived)๋˜๋ฉด `main` ๋ธŒ๋žœ์น˜์™€์˜ ์ฐจ์ด๊ฐ€ ๋ฒŒ์–ด์ ธ ์‹ฌ๊ฐํ•œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ(Merge Conflict)์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [13, 15]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋งค์ผ ์ž‘์—… ์ „ `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋‹น๊ฒจ์˜ค๊ณ (pull/rebase) ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ทœ์œจ์„ ์—„๊ฒฉํžˆ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค [11, 13]. -* **๋Œ€๊ทœ๋ชจ/์ •๊ธฐ ๋ฆด๋ฆฌ์Šค ํ”„๋กœ์ ํŠธ์—์„œ์˜ ํ•œ๊ณ„**: ์ •ํ•ด์ง„ ์ผ์ •์— ๋”ฐ๋ผ ๋ฒ„์ „์„ ๋ฌถ์–ด์„œ ๋ฐฐํฌํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜, ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ๊ณผ๊ฑฐ ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜๊ฐ€ ์—†๋Š” GitHub Flow๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฌด๊ฒ๋”๋ผ๋„ Git Flow๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12, 16]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  (๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ)] -- [[Git Flow]] - - ์—ฐ๊ฒฐ ์ด์œ : GitHub Flow์™€ ์ž์ฃผ ๋น„๊ต๋˜๋Š” ๋ถ„๊ธฐ ์ „๋žต์œผ๋กœ, ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋‘ ์ „๋žต ์‚ฌ์ด๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค [2, 12]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `develop`, `release`, `hotfix` ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Git Flow๋ฅผ ์ดํ•ดํ•จ์œผ๋กœ์จ, ์ƒ๋Œ€์ ์œผ๋กœ GitHub Flow๊ฐ€ ์ƒ๋žตํ•œ ๊ตฌ์กฐ์  ๋ณต์žก์„ฑ๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ์†๋„/๋‹จ์ˆœ์„ฑ์˜ ์ด์ ์„ ๋ช…ํ™•ํžˆ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Trunk-Based Development]] - - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ ๋น ๋ฅด๊ณ  ์ถฉ๋Œ ์—†๋Š” ๋ณ‘ํ•ฉ์„ ์œ„ํ•ด ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒฝ๋Ÿ‰ ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค [3, 16]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ทน๋‹จ์ ์œผ๋กœ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฉ”์ธ์— ๋นˆ๋ฒˆํžˆ ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ์ฒ ํ•™์„ ํ†ตํ•ด CI(์ง€์†์  ํ†ตํ•ฉ)์˜ ๋ณธ์งˆ์„ ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[Pull Request]] - - ์—ฐ๊ฒฐ ์ด์œ : GitHub Flow์—์„œ ์ฝ”๋“œ ๋ณ‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํŒ€์› ๊ฐ„์˜ ํ˜‘์—… ๋ฐ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค [8, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ํ’ˆ์งˆ ํ†ต์ œ, ํ”ผ์–ด ๋ฆฌ๋ทฐ(Peer Review)์˜ ์—ญํ•  ๋ฐ CI/CD ํ›…(Hook)์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[CI/CD]] - - ์—ฐ๊ฒฐ ์ด์œ : `main` ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐํ›„์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ํ•„์ˆ˜ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค [1, 6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์™œ ์ˆ˜๋™ ๋ณ‘ํ•ฉ์ด ์œ„ํ—˜ํ•œ์ง€, PR ๋ฆฌ๋ทฐ๊ฐ€ ๋๋‚œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ํ”„๋กœ๋•์…˜ ๋ ˆ๋ฒจ๊นŒ์ง€ ๋ฐฐํฌ๋˜๋Š”์ง€์˜ ์ „ ๊ณผ์ •์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions -- Git Flow ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ GitHub Flow๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ, ๊ธฐ์กด์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ฒด๊ณ„ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ์–ด๋–ป๊ฒŒ ์žฌ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- GitHub Flow ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋Šฅ์ด ๋ฏธ์™„์„ฑ๋œ ์ƒํƒœ๋กœ `main`์— ๋ณ‘ํ•ฉ๋˜์–ด์•ผ ํ•  ๋•Œ, Feature Flag(๊ธฐ๋Šฅ ํ† ๊ธ€)๋ฅผ ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ํŒ€ ๊ทœ๋ชจ๊ฐ€ 3~5์ธ์—์„œ 20์ธ ์ด์ƒ์œผ๋กœ ๊ธ‰๊ฒฉํžˆ ์„ฑ์žฅํ•  ๋•Œ, GitHub Flow์˜ ํ•œ๊ณ„์ ์€ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋‚˜ํƒ€๋‚˜๋ฉฐ ์–ด๋–ค ์‹œ์ ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒ์žฅ๋˜๋Š” Squash Merge ๋ฐฉ์‹์ด ์žฅ๊ธฐ์ ์ธ ๋ฒ„๊ทธ ์ถ”์ ์„ฑ(Traceability) ๊ด€์ ์—์„œ๋Š” ์–ด๋–ค ๋‹จ์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- Branch Protection์„ ํ†ตํ•ด '์ตœ์†Œ 1์ธ์˜ ๋ฆฌ๋ทฐ'์™€ 'CI ํ†ต๊ณผ'๋ฅผ ๊ฐ•์ œํ•  ๋•Œ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์  ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ๊ฐœ๋ฐœ์ž๋Š” JIRA ๋“ฑ์—์„œ ํ• ๋‹น๋ฐ›์€ ํ‹ฐ์ผ“ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ `feature/PROJ-123-login` ํ˜•์‹์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋”ฐ๊ณ , ํ•œ ๊ฐ€์ง€ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ๋‹ด์€ Atomic Commit์„ ์ˆ˜ํ–‰ํ•œ ๋’ค PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. -- **System Design:** GitHub/GitLab ๋“ฑ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด ์ง์ ‘ ํ‘ธ์‹œ(Direct Push)๋ฅผ ์ฐจ๋‹จํ•˜๊ณ , Status Check(ํ…Œ์ŠคํŠธ ํ†ต๊ณผ) ๋ฐ ์ง€์ •๋œ ๋ฆฌ๋ทฐ์–ด์˜ Approve๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๋ณดํ˜ธ ๊ทœ์น™(Branch Protection)์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. -- **Operation / Maintenance:** CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด `main` ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋˜๋„๋ก ๊ตฌ์„ฑํ•˜๊ณ , ์ €์žฅ์†Œ์˜ ๊น”๋”ํ•œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณ‘ํ•ฉ๋œ ๋ธŒ๋žœ์น˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์ž๋™ ์‚ญ์ œ๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. -- **Learning Path:** Git ๋ธŒ๋žœ์น˜ ๊ธฐ์ดˆ ๋ช…๋ น์–ด ์ˆ™์ง€ -> 1๊ธฐ๋Šฅ 1๋ธŒ๋žœ์น˜ ์›์น™ ์‹ค์Šต -> PR ์ž‘์„ฑ ๋ฐ ๋™๋ฃŒ ๋ฆฌ๋ทฐ ๊ฒฝํ—˜ -> ์ž๋™ํ™”๋œ CI/CD์™€์˜ ์—ฐ๋™ ์ดํ•ด์˜ ์ˆœ์„œ๋กœ ํ˜‘์—… ๋Šฅ๋ ฅ์„ ์„ฑ์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- **My Project Relevance:** 3~5๋ช…์˜ ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ๊ณผ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•„์š”ํ•œ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ์ƒํ™ฉ์—, ๋ถˆํ•„์š”ํ•œ ์ ˆ์ฐจ๋ฅผ ์—†์• ๊ณ  ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ํ˜‘์—… ๋ชจ๋ธ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics -- [[Conventional Commits]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ `feat:`, `fix:`, `chore:` ๋“ฑ์˜ ๊ทœ๊ฒฉ์œผ๋กœ ํ†ต์ผํ•จ์œผ๋กœ์จ, PR ๋‚ด์šฉ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง€์‹์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Issue Tracking System]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ฝ”๋“œ ๊ตฌํ˜„(GitHub)๊ณผ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜(JIRA, Linear ๋“ฑ)๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์ˆ˜์ค€์„ ๋†’์ด๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋งฅ๋ฝ(Traceability)์„ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Incremental Migration.md b/00_Raw/Incremental Migration.md deleted file mode 100644 index 3dc8ce3c..00000000 --- a/00_Raw/Incremental Migration.md +++ /dev/null @@ -1,53 +0,0 @@ -# [[Incremental Migration]] - -## ๐Ÿ“Œ Brief ์‹œ Summary -**Incremental Migration(์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜)**์€ ์˜ค๋ž˜๋œ ๊ธฐ์ˆ ์ด๋‚˜ ์•„ํ‚คํ…์ฒ˜์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ๋กœ ์ „ํ™˜ํ•  ๋•Œ, ์ „์ฒด ์‹œ์Šคํ…œ์„ ํ•œ ๋ฒˆ์— ์žฌ์ž‘์„ฑ(complete rewrite)ํ•˜๋Š” ๋Œ€์‹  ๋‹จ๊ณ„์ ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ „๋žต์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ๋™์•ˆ์—๋„ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์ง€์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” **"์žฌ์ž‘์„ฑ(rewrite)์ด ์•„๋‹Œ ๋ฆฌํŒฉํ† ๋ง(refactor)"** ์ฒ ํ•™์— ๊ธฐ๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค [1]. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ, Context API์—์„œ Zustand๋กœ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ „ํ™˜ํ•  ๋•Œ ์•Œ๋ฆผ๊ณผ ๊ฐ™์€ ๋‹จ์ˆœํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ฒฐ์ œ ํ๋ฆ„๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ์˜์—ญ์„ ๋„“ํ˜€๊ฐ€๋Š” ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค [1]. - -## ๐Ÿ“– Core Content -* **์ „๋ฉด ์žฌ์ž‘์„ฑ์˜ ์œ„ํ—˜์„ฑ ํšŒํ”ผ:** ๊ธฐ์กด ๊ธฐ์ˆ ์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ๋กœ ์ „ํ™˜ํ•  ๋•Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐˆ์•„์—Ž๋Š” ์ „๋ฉด ์žฌ์ž‘์„ฑ(complete rewrite)์€ ๋„ˆ๋ฌด ๋†’์€ ์œ„ํ—˜์„ ์ˆ˜๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ์ด ๋ฆฌ์Šคํฌ๋ฅผ ์šฐํšŒํ•˜๋Š” ๊ถŒ์žฅ ์ ‘๊ทผ๋ฒ•์ž…๋‹ˆ๋‹ค [1]. -* **๋‹จ๊ณ„์  ์ „ํ™˜ (์Šคํ† ์–ด ๋‹จ์œ„ ์ด๋™):** ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šคํ† ์–ด(store)์”ฉ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์ด ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค [1]. ์•Œ๋ฆผ(notifications)๊ณผ ๊ฐ™์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœํ•˜๊ณ  ๋…๋ฆฝ์ ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ์„ฑ ์ƒํƒœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ, ์ ์ง„์ ์œผ๋กœ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋‚˜ ์ฒดํฌ์•„์›ƒ ํ๋ฆ„(checkout flow) ๊ฐ™์€ ๋ณต์žกํ•œ ํ•ต์‹ฌ ๋„๋ฉ”์ธ์œผ๋กœ ์ „ํ™˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค [1]. -* **๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๊ณผ ์•„ํ‚คํ…์ฒ˜ ํ˜„๋Œ€ํ™”์˜ ๋ณ‘ํ–‰:** ์ด ์ ‘๊ทผ๋ฒ•์˜ ํ•ต์‹ฌ์ ์ธ ์ด์ ์€ ๋ฆฌํŒฉํ† ๋ง ์ฒ ํ•™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ์ค‘์—๋„ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถ˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์ค‘๋‹จ ์—†์ด ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [1]. -* **์ปค์Šคํ…€ ํ›…(Custom Hook)์„ ํ™œ์šฉํ•œ ๋ฆฌํŒฉํ† ๋ง ๋‹จ์œ„ํ™”:** ๋ชจ๋˜ React ํ™˜๊ฒฝ์—์„œ ๋ฆฌํŒฉํ† ๋ง์˜ ์ฃผ์š” ๋‹จ์œ„๋Š” ์ปค์Šคํ…€ ํ›…์ž…๋‹ˆ๋‹ค [2]. ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋กœ์ง์„ ์ถ”์ถœํ•ด ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๋ชจ๋“ˆ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ ์ง„์ ์ธ ๊ตฌ์กฐ ๊ฐœ์„  ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. - -## โš–๏ธ Trade-offs & Caveats -์†Œ์Šค ๋‚ด์—์„œ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ž์ฒด์˜ ์‹ฌ๊ฐํ•œ ๋ถ€์ž‘์šฉ์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์œผ๋‚˜, ์ „ํ™˜์„ ์‹œ๋„ํ•˜๋Š” ๊ธฐ์ˆ ๊ณผ ์กฐ์ง ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ(Migration Paths)๋ณ„ ๋‚œ์ด๋„์™€ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [3]. -* **๊ธฐ์ˆ  ์Šคํƒ๋ณ„ ์ „ํ™˜ ๋‚œ์ด๋„์˜ ์ฐจ์ด:** Context API์—์„œ Zustand๋กœ์˜ ์ „ํ™˜์€ ๋น„๊ต์  ์‰ฝ๋‹ค(Easy)๊ณ  ํ‰๊ฐ€๋˜์ง€๋งŒ, Zustand์—์„œ Redux๋กœ์˜ ์ ์ง„์  ์ „ํ™˜์€ ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ(Painful), Redux์—์„œ Zustand๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์œ„ํ—˜(Possible but risky)์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค [3]. -* **๊ธฐ์ˆ  ๋ณ€๊ฒฝ ์‹œ์ ์˜ ๋ชจํ˜ธํ•จ:** ๊ทœ๋ชจ ํ™•์žฅ ๋‹จ๊ณ„(Scaleup, 50-500๋ช…)์˜ ๊ธฐ์—…์—์„œ๋Š” Zustand ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ํ•œ๊ณ„์— ๋ถ€๋”ชํž ๋•Œ Redux๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ณ„ํšํ•ด์•ผ ํ•˜๋Š”๋ฐ [4], ์ด์ฒ˜๋Ÿผ ์–ธ์ œ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ฒฐ๋‹จํ•˜๊ณ  ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ตฌ์กฐ์  ๊ณ ๋ฏผ๊ณผ ์ „ํ™˜ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Context API]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ์ฃผ์š” ์ถœ๋ฐœ์ (๋ ˆ๊ฑฐ์‹œ ๊ธฐ์ˆ ) ์‚ฌ๋ก€๋กœ ์†Œ์Šค์—์„œ ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค [1]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ด์ „์˜ ๋ ˆ๊ฑฐ์‹œ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๊ฒช๋Š”์ง€ ํŒŒ์•…ํ•˜๊ณ , ์™œ ๋‹จ์ˆœํ•œ ๋„๋ฉ”์ธ๋ถ€ํ„ฐ ์ „ํ™˜์„ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋‹น์œ„์„ฑ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Zustand]] / [[Redux]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ๋ชฉ์ ์ง€ ๋˜๋Š” ์ „ํ™˜ ๊ฒฝ๋กœ์— ํ•ด๋‹นํ•˜๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ์ˆ ๋“ค์ž…๋‹ˆ๋‹ค [1, 3, 4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฐ ๊ธฐ์ˆ  ๊ฐ„์˜ ์ „ํ™˜์ด ์‰ฌ์šด์ง€(Easy), ๊ณ ํ†ต์Šค๋Ÿฌ์šด์ง€(Painful) ํŒŒ์•…ํ•˜์—ฌ ์กฐ์ง ๊ทœ๋ชจ์— ๋งž๋Š” ๋ชฉํ‘œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์ด๋™ํ•  ๊ฒƒ์ธ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/๋ฆฌํŒฉํ† ๋ง ๋„๊ตฌ] -- [[Custom Hooks]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋˜ React์—์„œ ๊ตฌ์กฐ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” '๋ฆฌํŒฉํ† ๋ง์˜ ํ•ต์‹ฌ ๋‹จ์œ„(primary unit)'์ž…๋‹ˆ๋‹ค [2]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ UI์™€ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ํ™•๋ณดํ•˜๋Š”์ง€ ์‹ค๋ฌด์ ์ธ ๊ตฌํ˜„ ๊ด€์ ์—์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions -- ๊ธฐ์กด ์ƒํƒœ ๊ด€๋ฆฌ(์˜ˆ: Context API)์™€ ์‹ ๊ทœ ์ƒํƒœ ๊ด€๋ฆฌ(์˜ˆ: Zustand)๊ฐ€ ๊ณต์กดํ•˜๋Š” ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ์ •์—์„œ, ๋‘ ์ƒํƒœ ๊ฐ„์˜ ๋™๊ธฐํ™”๋‚˜ ์˜์กด์„ฑ์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ์•ˆ์ „ํ•œ๊ฐ€? -- Zustand์—์„œ Redux๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํŠนํžˆ "๊ณ ํ†ต์Šค๋Ÿฝ๋‹ค(Painful)"๊ณ  ํ‰๊ฐ€๋˜๋Š” ์•„ํ‚คํ…์ฒ˜์ , ๊ตฌํ˜„์  ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊ณผ ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋ณ‘ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ธŒ๋žœ์น˜(Branch) ์ถฉ๋Œ์ด๋‚˜ ํ†ตํ•ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Git Workflow๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปค์Šคํ…€ ํ›… ๋‹จ์œ„๋กœ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜(์˜ค๋ฒ„ํ—ค๋“œ)๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š” ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์‹œ์Šคํ…œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ํ•œ ๊ธฐ์ˆ ์—์„œ ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋กœ์˜ '์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜'์ด ์ตœ์ข… ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€(Definition of Done)์€ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - -### Practical Application Contexts -- **Implementation:** React ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ž…ํ•  ๋•Œ, ์ „์ฒด๋ฅผ ๊ต์ฒดํ•˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ ์•Œ๋ฆผ ๋“ฑ ์•„์ฃผ ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์Šคํ† ์–ด์— ์—ฐ๊ฒฐํ•ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค [1]. -- **System Design:** ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ˜„๋Œ€ํ™”ํ•  ๋•Œ, ๋น…๋ฑ…(Big Bang) ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ์„œ๋น„์Šค๊ฐ€ ์ง€์†์ ์œผ๋กœ ์šด์˜ ๋ฐ ํ™•์žฅ๋˜๋ฉด์„œ ๋ ˆ๊ฑฐ์‹œ์™€ ์‹ ๊ทœ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ณต์กดํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„ ์›์น™์„ ์ˆ˜๋ฆฝํ•ฉ๋‹ˆ๋‹ค [1]. -- **Operation / Maintenance:** ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ถ€์„œ์™€ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„  ๋ถ€์„œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š๊ณ , ์œ ์ง€๋ณด์ˆ˜ ์ผ์ • ๋‚ด์—์„œ ๊ธฐ๋Šฅ ๋ฐฐํฌ์™€ ๊ธฐ์ˆ  ๋ถ€์ฑ„(Technical Debt) ๊ฐ์†Œ๋ฅผ ๋™์‹œ์— ์ด๋ค„๋‚ด๋„๋ก ์šด์˜ํ•ฉ๋‹ˆ๋‹ค [1]. -- **Learning Path:** ํฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„ํ•ดํ•˜์—ฌ Custom Hook์œผ๋กœ ๋…๋ฆฝ์‹œํ‚ค๋Š” ์—ฐ์Šต์„ ํ†ตํ•ด, ํ–ฅํ›„ ์ฝ”๋“œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ํ•„์š”ํ•œ ๋ชจ๋“ˆํ™” ์—ญ๋Ÿ‰์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [2]. -- **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๊ตฌํ˜• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๋˜๋Š” ํŒจํ„ด)๋ฅผ ์ตœ์‹  ๊ธฐ์ˆ ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•˜๋Š” ํƒœ์Šคํฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋น„์ฆˆ๋‹ˆ์Šค ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์ ์ง„์  ์ ์šฉ ๋กœ๋“œ๋งต์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics -- [[Technical Debt Management (๊ธฐ์ˆ  ๋ถ€์ฑ„ ๊ด€๋ฆฌ)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ํ†ต์ œํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ „๋žต ์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ, ์‹œ์Šคํ…œ์ด ๋…ธํ›„ํ™”๋จ์— ๋”ฐ๋ผ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ธก์ •, ๊ด€๋ฆฌ, ์ƒํ™˜ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋„“์€ ๊ด€์ ์˜ ์—”์ง€๋‹ˆ์–ด๋ง ์ „๋žต์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/KISS.md b/00_Raw/KISS.md deleted file mode 100644 index e1252ceb..00000000 --- a/00_Raw/KISS.md +++ /dev/null @@ -1,58 +0,0 @@ -# [[KISS]] - -## ๐Ÿ“Œ Brief Summary -KISS("Keep It Simple, Stupid" ๋˜๋Š” "leave the code simple and dumb")๋Š” ๋ณต์žก์„ฑ๋ณด๋‹ค ๋‹จ์ˆœ์„ฑ์„ ํ•ญ์ƒ ์šฐ์„ ์‹œํ•ด์•ผ ํ•œ๋‹ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™์ž…๋‹ˆ๋‹ค [1-3]. ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ํ”ผํ•˜๊ณ , ์ฝ”๋“œ๋ฅผ ์ง๊ด€์ ์ด๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ํ•ต์‹ฌ ๋ชฉํ‘œ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค [2-4]. ์ด ์›์น™์€ ํŠนํžˆ ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘(Quick prototyping)์ด๋‚˜ ๋‹จ์ˆœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ ํ•ฉํ•˜๋ฉฐ, React ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ ์‹œ ์กฐ๊ธฐ ์ตœ์ ํ™”(premature optimization)๋ฅผ ํ”ผํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 5]. - -## ๐Ÿ“– Core ์†Œ์Šค -* **๋‹จ์ˆœ์„ฑ ์ถ”๊ตฌ:** KISS ์›์น™์€ ์ฝ”๋“œ๋ฅผ "๋‹จ์ˆœํ•˜๊ณ  ๋ฉ์ฒญํ•˜๊ฒŒ(simple and dumb)" ๋‚จ๊ฒจ๋‘๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค [3]. ์ฝ”๋“œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ๋ง๊ณ , ํŠน์ • ํ•จ์ˆ˜๋‚˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ์ปค์งˆ ๊ฒฝ์šฐ ๋” ์ž‘๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค [3]. -* **๊ณผ๋„ํ•œ ์ถ”์ƒํ™” ๊ฒฝ๊ณ„:** ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ถ”์ƒํ™”๊ฐ€ ์›๋ž˜์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ณด๋‹ค ์˜คํžˆ๋ ค ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ •๋„๋กœ ๋ณต์žกํ•ด์ง„๋‹ค๋ฉด, ์ด๋Š” ๋ชฉ์ ์„ ์žƒ๊ณ  KISS ์›์น™์„ ์œ„๋ฐ˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค [4]. -* **React์—์„œ์˜ ํ™œ์šฉ:** React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ผฌ์ง€ ์•Š๊ณ  ๋ช…ํ™•ํžˆ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ, ์ฝ”๋“œ๊ฐ€ ์ƒํ˜ธ ๊ฐ„์— ๊ฒฐํ•ฉ๋˜์ง€ ์•Š๊ณ (decoupled) ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋„๋ก(predictable) ์œ ์ง€ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [1, 5]. - -## โš–๏ธ Trade-offs & Caveats -KISS ์›์น™์„ ์ค€์ˆ˜ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ์ง์„ ์ ์ด์–ด์„œ ๋””๋ฒ„๊น…์ด ์‰ฌ์›Œ์ง„๋‹ค๋Š” ๊ฐ•๋ ฅํ•œ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [6]. - -๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•œ๊ณ„์™€ ์ œ์•ฝ ์‚ฌํ•ญ(Trade-offs)์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค: -* **๊ณผ๋„ํ•œ ๋‹จ์ˆœํ™”์˜ ์œ„ํ—˜:** ์ด ์›์น™์—๋งŒ ์ง€๋‚˜์น˜๊ฒŒ ๋ชฐ๋‘ํ•  ๊ฒฝ์šฐ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ… ์ž์ฒด๋ฅผ ๋„ˆ๋ฌด ๋‹จ์ˆœํ™”(oversimplify)ํ•˜์—ฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋ž˜์˜ ํ™•์žฅ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. -* **DRY ์›์น™๊ณผ์˜ ์ถฉ๋Œ:** "์ž์‹ ์„ ๋ฐ˜๋ณตํ•˜์ง€ ๋ง๋ผ"๋Š” DRY(Don't Repeat Yourself) ์›์น™๊ณผ ์ข…์ข… ๊ท ํ˜•์„ ์ด๋ฃจ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์ถ”์ƒํ™”ํ•˜๋‹ค ๋ณด๋ฉด ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜์—ฌ ๊ฒฐ๊ตญ KISS ์›์น™์„ ์–ด๊ธฐ๊ฒŒ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ ์ ˆํ•œ ์„ ์—์„œ ๋‹จ์ˆœ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ํ†ต์ฐฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [4]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์›์น™ (Software Design Principles)] -- [[DRY (Don't Repeat Yourself)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด KISS์™€ ํ•จ๊ป˜ ์–ธ๊ธ‰๋˜๋Š” ํ•ต์‹ฌ ์›์น™์ž…๋‹ˆ๋‹ค. ๊ณผ๋„ํ•œ DRY ์ ์šฉ์€ KISS ์œ„๋ฐ˜์œผ๋กœ ์ด์–ด์ง€๋ฏ€๋กœ ์ƒํ˜ธ ๋ณด์™„์ ์ธ ๊ด€๊ณ„์— ์žˆ์Šต๋‹ˆ๋‹ค [2, 4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ์™€ ์ถ”์ƒํ™”์˜ ๋ณต์žก์„ฑ ์‚ฌ์ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ธฐ์ˆ ์  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ [4]. - -- [[YAGNI (You Aren't Gonna Need It)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์€ ์ถ”๊ฐ€ํ•˜์ง€ ๋ง๋ผ๋Š” ์›์น™์œผ๋กœ, ๋ถˆํ•„์š”ํ•œ ๋กœ์ง์„ ๋ฐฐ์ œํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค๋Š” ์ ์—์„œ KISS ์›์น™์˜ ์ฒ ํ•™๊ณผ ๊นŠ์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค [2, 7]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์• ์ž์ผ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋‚˜ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋ณ€ํ•˜๋Š” ์Šคํƒ€ํŠธ์—… ํ”„๋กœ์ ํŠธ์—์„œ ๋ถˆํ•„์š”ํ•œ ์ž‘์—…๊ณผ ์กฐ๊ธฐ ์ตœ์ ํ™”๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ• [2, 5]. - -#### [React ๊ตฌํ˜„ ๋ฐ ์ฝ”๋“œ ํ’ˆ์งˆ (Implementation & Code Quality)] -- [[Clean Code]] - - ์—ฐ๊ฒฐ ์ด์œ : KISS ์›์น™์„ ์ ์šฉํ•˜๋Š” ๊ถ๊ทน์ ์ธ ๋ชฉ์ ์€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’์€ ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žก์„ฑ์„ ๋ฐฐ์ œํ•˜๊ณ  ์ค‘์ฒฉ ๊ตฌ์กฐ๋ฅผ ํ”ผํ•˜๋ฉฐ ๋ช…ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹ค๋ฌด์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ [2, 8]. - -### Deeper Research Questions - -- React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ KISS ์›์น™์„ ์œ„๋ฐ˜ํ•˜๋Š” '๊ณผ๋„ํ•œ ์ถ”์ƒํ™”'์˜ ๊ตฌ์ฒด์ ์ธ ํŒ๋‹จ ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? [4] -- KISS ์›์น™๊ณผ DRY ์›์น™์ด ์ถฉ๋Œํ•  ๋•Œ, ์–ด๋А ์‹œ์ ์— ์ถ”์ƒํ™”๋ฅผ ๋ฉˆ์ถ”๊ณ  ์ฝ”๋“œ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์— ๋” ์œ ๋ฆฌํ•œ๊ฐ€? [4] -- KISS ์›์น™์„ ๊ณ ์ˆ˜ํ•˜์—ฌ ํ•ด๊ฒฐ์ฑ…์„ '๊ณผ๋„ํ•˜๊ฒŒ ๋‹จ์ˆœํ™”(oversimplify)'ํ–ˆ์„ ๋•Œ, ํ”„๋กœ์ ํŠธ์˜ ํ™•์žฅ์„ฑ(Scalability) ์ธก๋ฉด์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ํ•œ๊ณ„๋Š” ๋ฌด์—‡์ธ๊ฐ€? [6] -- ๋น ๋ฅด๊ณ  ๋‹จ์ˆœํ•œ ํ”„๋กœํ† ํƒ€์ดํ•‘์„ ์œ„ํ•ด KISS ์›์น™์„ ์ฃผ๋กœ ์ ์šฉํ•œ ์ดํ›„, ๋Œ€๊ทœ๋ชจ ์•„ํ‚คํ…์ฒ˜๋กœ ์ ์ง„์ ์œผ๋กœ ํ™•์žฅํ•˜๋ ค๋ฉด ์–ด๋–ค ๊ตฌ์กฐ์  ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•œ๊ฐ€? [5] -- ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋น„๋Œ€ํ•ด์งˆ ๋•Œ KISS ์›์น™์— ๋”ฐ๋ผ "์ž‘๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋…ผ๋ฆฌ์  ๋ถ€๋ถ„"์œผ๋กœ ๋ถ„ํ• ํ•˜๊ธฐ ์œ„ํ•œ React ์ƒํƒœ๊ณ„์˜ ์ตœ์ ์˜ ํŒจํ„ด์€ ๋ฌด์—‡์ธ๊ฐ€? [3] - -### Practical Application Contexts - -- **Implementation:** React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ๋กœ์ง์„ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์กฐ๊ธฐ ์ตœ์ ํ™”๋ฅผ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ๋” ์ž‘๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ•จ์ˆ˜๋‚˜ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค [3, 5]. -- **System Design:** ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ํ”„๋กœํ† ํƒ€์ดํ•‘(Quick prototyping)์ด๋‚˜ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ํ•  ๋•Œ ์ฃผ๋œ ์›์น™์œผ๋กœ ์ฑ„ํƒ๋ฉ๋‹ˆ๋‹ค [5]. -- **Operation / Maintenance:** ์ฝ”๋“œ๋ฅผ ์ง์„ ์ ์ด๊ณ  ๋ฐ”๋ณด ๊ฐ™์„ ์ •๋„๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜์—ฌ, ๋ฒ„๊ทธ ๋ฐœ์ƒ ์‹œ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜ ํ™˜๊ฒฝ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค [3, 6]. -- **Learning Path:** ๋ณต์žก์„ฑ์„ ๋œ์–ด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•ด SOLID, DRY, YAGNI ๋“ฑ๊ณผ ํ•จ๊ป˜ ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•„์ˆ˜ ๊ธฐ์ดˆ ์„ค๊ณ„ ์›์น™์œผ๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [1, 9]. -- **My Project Relevance:** React ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•  ๋•Œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•ด์ง„ ๊ณตํ†ต ํ›…(Hook)์ด๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์—†๋Š”์ง€ ์ ๊ฒ€ํ•˜๊ณ , ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋Š” ์ง๊ด€์ ์œผ๋กœ ์žฌ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 5]. - -### Adjacent Topics - -- [[SOLID Principles]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋‹จ์ˆœ์„ฑ์„ ๋„˜์–ด์„œ, ํฌ๊ณ  ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”๊ตฌํ•˜๋Š” ๊ตฌ์กฐํ™” ๋ฐ ํ™•์žฅ์„ฑ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์ง€ํ–ฅ/ํ•จ์ˆ˜ํ˜• ์„ค๊ณ„ ์›์น™(๋‹จ์ผ ์ฑ…์ž„ ์›์น™, ์˜์กด์„ฑ ์—ญ์ „ ๋“ฑ)์ด ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์กฐํ™”๋ฅผ ์ด๋ฃจ๋Š”์ง€ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค [5, 9, 10]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Legacy React Codebase Modernization.md b/00_Raw/Legacy React Codebase Modernization.md deleted file mode 100644 index 4001bf46..00000000 --- a/00_Raw/Legacy React Codebase Modernization.md +++ /dev/null @@ -1,70 +0,0 @@ -# [[Legacy React Codebase Modernization]] - -## ๐Ÿ“Œ Brief Summary -๋ ˆ๊ฑฐ์‹œ ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๋ฒ ์ด์Šค ํ˜„๋Œ€ํ™”(Legacy React Codebase Modernization)๋Š” ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ ๋‚ก์€ ์ฝ”๋“œ๋ฅผ ์ตœ์‹  ๋ฆฌ์•กํŠธ ํ‘œ์ค€๊ณผ ์•„ํ‚คํ…์ฒ˜๋กœ ๊ฐœ์„ ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์•ˆ์ „ํ•œ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ์‹œ์ž‘์œผ๋กœ, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ํ•จ์ˆ˜ํ˜• ์ „ํ™˜, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript) ๋„์ž…, ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„ ๋ฐ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ์ตœ์ ํ™”๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ์œ„ํ—˜์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ปค์Šคํ…€ ํ›…์„ ํ™œ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋“ฑ ์ ์ง„์ ์ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Migration) ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. [1-3] - -## ๐Ÿ“– Core Content -* **ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ (Test-Driven Approach)**: - ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๊ธฐ ์ „์— ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์€ ์œ ๋‹› ํ…Œ์ŠคํŠธ(Unit Test)๋‚˜ UI ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์ค‘ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๋ง๊ฐ€์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๋„๋ก ๋•๋Š” ๋ฐฉ์–ด์„  ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [2, 4, 5]. -* **์ตœ์‹  ๋ฆฌ์•กํŠธ ํŒจํ„ด ์ ์šฉ**: - ๊ณผ๊ฑฐ์˜ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks)์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์ด๋ผ๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript)๋ฅผ ๋„์ž…ํ•˜์—ฌ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ `useEffect` ์‚ฌ์šฉ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ตœ์‹  ๋ฆฌ์•กํŠธ ๋ฐ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3]. -* **์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ๋ถ„๋ฆฌ ๋ฐ ํ˜„๋Œ€ํ™”**: - ์ „์—ญ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ๋ฌด๊ฑฐ์šด Redux ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด TanStack Query (React Query)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [3]. ๋‚จ์€ ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ์ปฌ/์ „์—ญ ์ƒํƒœ๋Š” Context API๋‚˜ Zustand๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ ๋ฒ”์œ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค [3]. -* **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Incremental Migration)**: - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ์žฌ์ž‘์„ฑ(Rewrite)ํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋ฏ€๋กœ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ƒํƒœ ์Šคํ† ์–ด๋‚˜ ๋ชจ๋“ˆ์”ฉ ์ „ํ™˜ํ•˜๋Š” ์ ์ง„์  ๋ฐฉ์‹์ด ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค [1]. ์ด๋ฅผ ์œ„ํ•ด ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ปค์Šคํ…€ ํ›…(Custom Hooks)์œผ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌํŒฉํ„ฐ๋ง์˜ ์ฃผ์š” ๋‹จ์œ„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [6, 7]. -* **์ฝ”๋“œ ํ’ˆ์งˆ ๋„๊ตฌ์˜ ๋„์ž… ๋ฐ ํ‘œ์ค€ํ™”**: - ์ผ๊ด€์„ฑ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ESLint์™€ ๊ฐ™์€ ์ •์  ๋ถ„์„ ๋„๊ตฌ(์˜ˆ: `eslint-plugin-react`, `eslint-plugin-react-hooks`)๋ฅผ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [8]. ์ด์™€ ํ•จ๊ป˜ ์ผ๊ด€์„ฑ ์—†์ด ์ž‘์„ฑ๋œ CSS ๊ทœ์น™(์™ธ๋ถ€ CSS, ์ปดํฌ๋„ŒํŠธ CSS ๋“ฑ)์„ ๋‹จ์ผํ•œ ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ํ†ต์ผํ•˜์—ฌ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค [9-11]. - -## โš–๏ธ Trade-offs & Caveats -* **์ ์ง„์  ๊ฐœ์„  vs ์ „๋ฉด ์žฌ์ž‘์„ฑ (Incremental Refactoring vs. Full Rewrite)**: - ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์˜ ๊ทœ๋ชจ๊ฐ€ ์ž‘๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„์ „ํžˆ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. ๊ทธ๋Ÿฌ๋‚˜ ๊ทœ๋ชจ๊ฐ€ ํฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์™„์ „ํ•œ ์žฌ์ž‘์„ฑ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ˆ„๋ฝ ๋ฐ ์‹ฌ๊ฐํ•œ ์œ„ํ—˜์„ ์ˆ˜๋ฐ˜ํ•˜๋ฏ€๋กœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๊ณผ ๋ณ‘ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ง„์  ๊ฐœ์„ ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1]. -* **TypeScript ๋„์ž…์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€**: - ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด TypeScript๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋˜์ง€๋งŒ, ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์ธ์ง€์  ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณต์žก์„ฑ์˜ ์ƒˆ๋กœ์šด ์ธต์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „์ฒด ์ ์šฉ๋ณด๋‹ค๋Š” ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ ์ฐจ์ ์œผ๋กœ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•œ ์„ ํƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12]. -* **์ƒํƒœ ๊ด€๋ฆฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋น„์šฉ**: - Context API์—์„œ Zustand๋กœ์˜ ์ „ํ™˜์€ ๋น„๊ต์  ์ˆ˜์›”ํ•˜์ง€๋งŒ, ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•ด Zustand์—์„œ Redux๋กœ ๋„˜์–ด๊ฐ€๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ Redux์—์„œ Zustand๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์€ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์˜ ์•„ํ‚คํ…์ฒ˜์— ๊นŠ๊ฒŒ ๊ด€์—ฌํ•˜๋ฏ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ๋งค์šฐ ๊ณ ํ†ต์Šค๋Ÿฝ๊ฑฐ๋‚˜(Painful) ์œ„ํ—˜(Risky)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Incremental Migration]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ด์ž ์ฒ ํ•™์ž…๋‹ˆ๋‹ค. [1] - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ๋ง๊ฐ€๋œจ๋ฆฌ์ง€ ์•Š๊ณ , ๋‹จ์ผ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ์Šคํ† ์–ด ๋‹จ์œ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉฐ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ์ „๋žต์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Single Responsibility Principle (SRP)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ๊ฑฐ์‹œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€์ง€๋Š” ๋ณตํ•ฉ์ ์ธ ์ฑ…์ž„(์ƒํƒœ ๊ด€๋ฆฌ, ๋ Œ๋”๋ง, ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋“ฑ)์„ ์ชผ๊ฐœ๋Š” ํ•ต์‹ฌ ์ฒ™๋„์ž…๋‹ˆ๋‹ค. [14] - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•˜๊ณ  ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์™œ ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํ›…์œผ๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•˜๋Š”์ง€ ๊ทธ ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[Unit Testing]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ„ฐ๋ง ์ž‘์—… ์ „์— ๊ธฐ์กด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. [2, 5] - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•ˆ์ „ํ•œ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ณ , ์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜์—ฌ ํšŒ๊ท€ ๋ฒ„๊ทธ(Regression)๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[TanStack Query]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ธฐ์กด์˜ ๋น„ํšจ์œจ์ ์ธ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ(์˜ˆ: Redux)์—์„œ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋œ์–ด๋‚ด์–ด ๊ตฌ์กฐ๋ฅผ ์ตœ์‹ ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. [3, 15] - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ ์„œ๋ฒ„ API ์ƒํƒœ๋ฅผ ์ฒ ์ €ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ปดํฌ๋„ŒํŠธ ๋ฐ ๋กœ์ง์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ์‹์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[ESLint]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ๋ฆฌ์•กํŠธ์˜ ๊ถŒ์žฅ ์‚ฌํ•ญ(Hooks ๊ทœ์น™ ๋“ฑ)์„ ์ž๋™์œผ๋กœ ๊ฐ•์ œํ•˜์—ฌ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. [8, 16] - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ž๋™ํ™”๋œ ์ •์  ๋ถ„์„์„ ํ†ตํ•ด ๋‹ค์ˆ˜์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ํ˜„๋Œ€ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ๊ด€๋ฆฌํ•˜๋Š” ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions -- ๋ ˆ๊ฑฐ์‹œ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks)์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ, ๋ถ€์ž‘์šฉ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ „ํ•œ ๋””์ž์ธ ํŒจํ„ด๊ณผ ์ ์ง„์  ์ ์šฉ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๊ธฐ์กด์˜ ๋ณต์žกํ•œ Context API ๋˜๋Š” Redux ์ƒํƒœ๋ฅผ ์„œ๋ฒ„ ์ƒํƒœ(TanStack Query)์™€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ(Zustand ๋“ฑ)๋กœ ๋ถ„ํ• ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€์žฅ ํ”ํ•œ ์ถฉ๋Œ ํฌ์ธํŠธ์™€ ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ JavaScript ๊ธฐ๋ฐ˜ React ํ”„๋กœ์ ํŠธ์— TypeScript๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋„์ž…ํ•  ๋•Œ, ํŒŒ์ผ ๊ฐ„ ์˜์กด์„ฑ์— ๋”ฐ๋ฅธ ํƒ€์ž… ์˜ค๋ฅ˜ ํญํฌ(Type Error Cascade) ํ˜„์ƒ์„ ์–ด๋–ป๊ฒŒ ์–ต์ œํ•  ๊ฒƒ์ธ๊ฐ€? -- ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Testing) ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๋งค์šฐ ๋‚ฎ๊ฑฐ๋‚˜ ์ „๋ฌดํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ, ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํŒŒ์•…ํ•˜๊ณ  ์ตœ์šฐ์„ ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์ค€์€ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- ๋น„๋Œ€ํ•œ ๋‹จ์ผ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ๋•Œ, 'KISS'์™€ 'DRY' ์›์น™ ๊ฐ„์˜ ์ถฉ๋Œ(์ง€๋‚˜์นœ ์ถ”์ƒํ™”๋กœ ์ธํ•œ ๋ณต์žก๋„ ์ฆ๊ฐ€)์„ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ๋น„๋Œ€ํ•ด์ง„ ๊ธฐ์กด ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„์„ํ•˜์—ฌ UI ํŒŒํŠธ์™€ ๋กœ์ง ํŒŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ `useEffect`๋ฅผ ๊ฑท์–ด๋‚ธ ๋’ค `useMemo`, `useCallback`๊ณผ ์ปค์Šคํ…€ ํ›…์„ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ๋ณ„๋กœ ์žฌ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. [3, 6] -- **System Design:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ๋ถ„๋ฆฌ ๊ธฐํšํ•ฉ๋‹ˆ๋‹ค. UI ํ† ๊ธ€์ด๋‚˜ ํ…Œ๋งˆ ๊ฐ™์€ ๋‹จ์ˆœ ์ƒํƒœ๋Š” Context API๋ฅผ, ๋‹ค์ด๋‚˜๋ฏนํ•œ ์ƒํƒœ๋Š” Zustand๋ฅผ, API ์‘๋‹ต ๋ฐ์ดํ„ฐ๋Š” TanStack Query๋กœ ๋ถ„์‚ฐ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. [3, 17, 18] -- **Operation / Maintenance:** ESLint(eslint-plugin-react ๋“ฑ)๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ตฌ์ถ•ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธฐ์กด ์Šคํƒ€์ผ์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด React Hooks์˜ ๊ทœ์น™์„ ๊ฐ•์ œ์ ์œผ๋กœ ์ค€์ˆ˜ํ•˜๋„๋ก ์šด์˜ํ•ฉ๋‹ˆ๋‹ค. [8] -- **Learning Path:** ๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ ํ•™์Šต ํ›„ -> ์†Œํ˜• ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๋ฐฉ๋ฒ• -> TypeScript ์ ์šฉ๋ฒ• -> ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ฐจ์ด๋กœ ํ™•์žฅํ•ด ๋‚˜๊ฐ€๋Š” ์ˆœ์„œ๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. [2, 3, 12] -- **My Project Relevance:** ํ˜„์žฌ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ณ  ์žˆ๋Š” ๋ณต์žกํ•œ ๊ธฐ์กด React ์‹œ์Šคํ…œ์˜ ๊ฐœํŽธ ์ž‘์—…์—์„œ 'ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•๋ณด -> TS ๋„์ž… -> ์ƒํƒœ ๋„๊ตฌ ๋ถ„๋ฆฌ -> ์ปค์Šคํ…€ ํ›… ์ถ”์ƒํ™”' ์ˆœ์˜ ์•ˆ์ •์ ์ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics -- [[Feature-Sliced Design]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํด๋” ๋ฐ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋Šฅ(Feature)๊ณผ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ, ๋ฆฌํŒฉํ„ฐ๋ง ์ดํ›„์˜ ์ง€์† ๊ฐ€๋Šฅํ•œ ํด๋” ๊ตฌ์กฐ ์•„ํ‚คํ…์ฒ˜๋กœ ํ™•์žฅ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[React Compiler]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: React 19์˜ ๋“ฑ์žฅ๊ณผ ํ•จ๊ป˜, ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์— ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑ๋œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(`React.memo`, `useMemo`)์„ ์ž๋™์œผ๋กœ ์ตœ์ ํ™”ํ•˜๋Š” ํˆด๋ง์ด ์–ด๋–ป๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ฑ๋Šฅ ๊ด€์ ์—์„œ ํƒ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Legacy React Codebase Refactoring.md b/00_Raw/Legacy React Codebase Refactoring.md deleted file mode 100644 index 5d383037..00000000 --- a/00_Raw/Legacy React Codebase Refactoring.md +++ /dev/null @@ -1,70 +0,0 @@ -# [[Legacy React Codebase Refactoring]] - -## ๐Ÿ“Œ Brief Summary -๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋ฆฌํŒฉํ† ๋ง์€ ๊ธฐ์กด ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋™์ž‘์„ ์˜จ์ „ํžˆ ๋ณด์กดํ•˜๋ฉด์„œ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ํ™•์žฅ์„ฑ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์žฌ์„ค๊ณ„ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1]. ์ด ๊ณผ์ •์€ ํšŒ๊ท€ ์˜ค๋ฅ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test) ์ž‘์„ฑ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ, ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ๋ฐ ํ›…(Hooks)์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ , ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ํ˜„๋Œ€ํ™”(์˜ˆ: Redux์—์„œ TanStack Query๋‚˜ Zustand๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜)ํ•˜๋Š” ์ž‘์—…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [2, 3]. ์„ฑ๊ณต์ ์ธ ๋ฆฌํŒฉํ† ๋ง์€ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐˆ์•„์—Ž๋Š” ์žฌ์ž‘์„ฑ(Rewrite)์„ ํ”ผํ•˜๊ณ , ์ปค์Šคํ…€ ํ›…์„ ํ†ตํ•ด UI์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋“ฑ ์ ์ง„์ (Incremental)์ธ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค [1, 4]. - -## ๐Ÿ“– Core Content -* **๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํŒŒ์•… ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์„ ํ–‰:** - ๋ ˆ๊ฑฐ์‹œ ๋ฆฌํŒฉํ† ๋ง์˜ ์ฒซ๊ฑธ์Œ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ „์—ญ UI ์Šคํ† ์–ด์— ๋ณด๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ๋ฉ˜ํƒˆ ๋ชจ๋ธ(Mental model)์„ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [5]. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit tests)๋‚˜ UI ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์„ ๋จผ์ € ์ž‘์„ฑํ•˜์—ฌ, ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •(TS ๋ณ€ํ™˜, ํ›… ์ „ํ™˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—…๊ทธ๋ ˆ์ด๋“œ ๋“ฑ)์—์„œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์†์ƒ๋˜์ง€ ์•Š์•˜์Œ์„ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 6, 7]. -* **๋ชจ๋˜ React ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ์˜ ์ „ํ™˜:** - ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค [3]. ํ”„๋กœ์ ํŠธ๊ฐ€ JavaScript๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋ฉด TypeScript๋กœ ์ ์ง„์ ์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ , ์˜ค๋ž˜๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ ์ค‘๋‹จ(deprecated)๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค [3]. ๋˜ํ•œ, ๋ถˆํ•„์š”ํ•œ `useEffect` ์‚ฌ์šฉ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ , ์ฝ”๋“œ์— ํ˜ผ์žฌ๋˜์–ด ์žˆ๋Š” CSS ์Šคํƒ€์ผ๋ง ๋ฐฉ์‹(์™ธ๋ถ€ CSS, ์ธ๋ผ์ธ style, sx ๋“ฑ)์„ ํ•œ๋‘ ๊ฐ€์ง€์˜ ํ‘œ์ค€ ๋ฐฉ์‹(์˜ˆ: CSS modules)์œผ๋กœ ํ†ต์ผํ•ฉ๋‹ˆ๋‹ค [3, 8, 9]. -* **์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ:** - ๊ณผ๊ฑฐ ๋‹จ์ผ ์ „์—ญ ์Šคํ† ์–ด(์˜ˆ: Redux)์— ๋ญ‰์ณ์žˆ๋˜ ์ƒํƒœ๋“ค์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ƒํƒœ(Server state) ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” TanStack Query๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ Redux ์˜์กด๋„๋ฅผ ์ค„์ด๊ณ , ํด๋ผ์ด์–ธํŠธ ์ธก ์ „์—ญ ์ƒํƒœ๋Š” Context API๋‚˜ Zustand๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ง€์—ญ ์ƒํƒœ(Local state)๋Š” ๊ฐ€๊ธ‰์  ๊ฐ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๋กœ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค [3]. -* **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Migration)๊ณผ ์ปค์Šคํ…€ ํ›…:** - ๋ฆฌํŒฉํ† ๋ง ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ์žฌ์ž‘์„ฑ(rewrite)ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. "์žฌ์ž‘์„ฑ์ด ์•„๋‹Œ ๋ฆฌํŒฉํ† ๋ง(refactor, do not rewrite)" ์ฒ ํ•™์— ๋”ฐ๋ผ, ํ•˜๋‚˜์˜ ์Šคํ† ์–ด๋‚˜ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ(์˜ˆ: ์•Œ๋ฆผ)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ฒฐ์ œ ํ๋ฆ„๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์œผ๋กœ ํ•˜๋‚˜์”ฉ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1]. ์ด ๊ณผ์ •์—์„œ '์ปค์Šคํ…€ ํ›…'์„ ์ฃผ์š” ๋ฆฌํŒฉํ† ๋ง ๋‹จ์œ„๋กœ ์‚ฌ์šฉํ•˜์—ฌ, ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด๋‚˜ ํผ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด ๋ชจ๋“ˆ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [4]. -* **๊ทœ์น™ ๊ธฐ๋ฐ˜์˜ ๊ด€๋ฆฌ ๋ฐ ์ž๋™ํ™”:** - ESLint(eslint-plugin-react, eslint-plugin-react-hooks ๋“ฑ)๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๊ฐ•์ œํ•˜๊ณ , ํŒ€ ์ฐจ์›์˜ ์ผ๊ด€๋œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [10]. ๋” ๋‚˜์•„๊ฐ€ Claude Code ๊ฐ™์€ AI ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ‰๊ฐ€๋ฐ›๊ณ  ์ž‘์€ ๋‹จ์œ„์˜ PR(Pull Request)์„ ์ƒ์„ฑํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ฆฌํŒฉํ† ๋ง ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 12]. - -## โš–๏ธ Trade-offs & Caveats -* **์ „๋ฉด ์žฌ์ž‘์„ฑ(Rewrite) vs ์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง:** - ๊ธฐ์กด ์•ฑ์˜ ๊ทœ๋ชจ๊ฐ€ ๋งค์šฐ ์ž‘๋‹ค๋ฉด ์˜คํžˆ๋ ค ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ƒˆ ์•ฑ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌํŒฉํ† ๋ง๋ณด๋‹ค ์‰ฝ๊ณ  ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. ๊ทธ๋Ÿฌ๋‚˜ ๊ทœ๋ชจ๊ฐ€ ํฐ ์•ฑ์˜ ๊ฒฝ์šฐ ์žฌ์ž‘์„ฑ์€ ๋ฆฌ์Šคํฌ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋ฏ€๋กœ, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋ฉˆ์ถ”์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๋Š” '์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜' ๋ฐฉ์‹์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1]. -* **์ถ”์ƒํ™”์™€ ๋‹จ์ˆœ์„ฑ์˜ ์ถฉ๋Œ (DRY vs KISS):** - DRY(Don't Repeat Yourself) ์›์น™์— ๋”ฐ๋ผ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ, ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ์›๋ณธ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์˜คํžˆ๋ ค ๋””๋ฒ„๊น…๊ณผ ์ดํ•ด๋ฅผ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์–ด KISS(Keep It Simple, Stupid) ์›์น™์„ ์œ„๋ฐฐํ•˜๊ฒŒ ๋  ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค [13]. ๋”ฐ๋ผ์„œ ํŒจํ„ด์ด ์ตœ์†Œ ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์กฐ๊ธฐ ์ตœ์ ํ™”๋‚˜ ๋ณต์žกํ•œ ์ถ”์ƒํ™”๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [13]. -* **์ƒˆ๋กœ์šด ๋„๊ตฌ(TypeScript ๋“ฑ) ๋„์ž…์˜ ์˜ค๋ฒ„ํ—ค๋“œ:** - ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด์„ ์ž…ํžˆ๋Š” ๊ฒƒ์€ ์•ˆ์ „์„ฑ์„ ๋†’์ด์ง€๋งŒ, ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋ณต์žก์„ฑ์„ ๋”ํ•˜๊ณ  ํŒ€์›๋“ค์—๊ฒŒ ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ์ค๋‹ˆ๋‹ค [14]. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ˆ™๋ จ๋„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ JS ํŒŒ์ผ์„ TS ํŒŒ์ผ๋กœ ํ•œ ๊ฐœ์”ฉ ์ ์ง„์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹์˜ ์ ‘๊ทผ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [14]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ )] -- [[Feature-Sliced Design]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์˜ ๋‚œํ•ดํ•œ ํด๋” ๊ตฌ์กฐ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ฝ”๋“œ๋ฅผ ๊ธฐ์ˆ ์  ๊ณ„์ธต์ด ์•„๋‹Œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(Feature)๊ณผ ์ฑ…์ž„ ๋ฒ”์œ„์— ๋”ฐ๋ผ ๋ถ„ํ• ํ•˜๋Š” ์ตœ์‹  ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ๋ฒ•๋ก ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [15, 16]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•˜๊ณ  ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์‘์ง‘๋„ ๋†’์€ ๋ชจ๋“ˆ๋กœ ์ชผ๊ฐœ๋Š” ๊ธฐ์ค€๊ณผ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ• [16]. -- [[SOLID Principles]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP) ๋“ฑ์€ ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์„ ๋” ์ž‘๊ณ  ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [17]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ์ œ, ๊ทธ๋ฆฌ๊ณ  ์™œ ํ›…๊ณผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ๊ด€์  ํŒ๋‹จ ๊ธฐ์ค€ [11, 17]. - -#### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ)] -- [[Unit Testing]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ๊ธฐ์กด ๋กœ์ง์ด ๋ง๊ฐ€์ง€์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์‹ค๋ฌด ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2, 7]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ•ด์ฒดํ•˜๊ณ  ๋ชจ๋“ˆํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ๋ฒ•๊ณผ ํšŒ๊ท€ ๋ฒ„๊ทธ ๋ฐฉ์–ด ์ „๋žต [7]. -- [[Zustand]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์•ฑ์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” Context API์˜ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฌธ์ œ๋‚˜, ๋ฌด๊ฒ๊ณ  ๋ณต์žกํ•œ Redux ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๊ฒฝ๋Ÿ‰ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3, 18, 19]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์…€๋ ‰ํ„ฐ(Selector) ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ ๊ธ€๋กœ๋ฒŒ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•˜๋Š” ์›๋ฆฌ [20, 21]. - -### Deeper Research Questions - -- ๋ ˆ๊ฑฐ์‹œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ(`componentDidMount`, `componentDidUpdate` ๋“ฑ)๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ํ›…(`useEffect` ๋“ฑ)์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜ ์—†์ด 1:1๋กœ ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํŒจํ„ด์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•  ๋•Œ, ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์˜ Redux ์Šคํ† ์–ด์™€ ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์˜ Zustand/TanStack Query ์ƒํƒœ๋ฅผ ์‹œ์Šคํ…œ ์žฅ์• ๋‚˜ ์ถฉ๋Œ ์—†์ด ๊ณต์กด์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- UI ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ์ƒ‰์ƒ ๋“ฑ ์˜๋„์น˜ ์•Š์€ ์‹œ๊ฐ์  ํšŒ๊ท€(Visual regression)๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Storybook ๋ฐ Chromatic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์–ด๋–ป๊ฒŒ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- FSD(Feature-Sliced Design) ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ ์šฉํ•˜๋ ค ํ•  ๋•Œ, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ(Feature) ๊ฐ„์— ๊ต์ฐจํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š” ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(Cross-cutting concerns)๋Š” ์–ด๋””์— ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- React ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ `useEffect`์˜ ์˜ค์šฉ์ด ๋Œ€ํ‘œ์ ์ธ ์•ˆํ‹ฐํŒจํ„ด์œผ๋กœ ๊ผฝํžˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์‹๋ณ„ํ•ด ๋‚ด๊ณ  ๋Œ€์ฒด ํŒจํ„ด(ํŒŒ์ƒ ์ƒํƒœ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ)์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ๊ฑฐ๋Œ€ํ•œ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์ž‘์„ฑ๋œ ์ปดํฌ๋„ŒํŠธ(300์ค„ ์ด์ƒ)๋‚˜ ํ˜ผ์žฌ๋œ ์Šคํƒ€์ผ(์ธ๋ผ์ธ, ์™ธ๋ถ€ ํŒŒ์ผ)์„ ๊ฐ€์ง„ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•œ ํ›„, ESLint ๋ฆฐํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ทœ์น™์„ ์„ธ์šฐ๊ณ  ๊ณตํ†ต ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์ž‘์—…์— ์ฆ‰์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- **System Design:** ํ”„๋กœ์ ํŠธ์˜ ํด๋” ๊ตฌ์กฐ๋ฅผ ๊ธฐ์กด์˜ ๊ธฐ์ˆ  ์ค‘์‹ฌ(components, hooks, styles) ๊ตฌ์กฐ์—์„œ ๋„๋ฉ”์ธ ๋ฐ ๊ธฐ๋Šฅ ์ค‘์‹ฌ(features ๋‚ด๋ถ€์— ๊ฐ ๋„๋ฉ”์ธ ๋ฐฐ์น˜) ๊ตฌ์กฐ๋กœ ์žฌํŽธ์„ฑํ•˜์—ฌ ํ™•์žฅ์„ฑ์„ ๊ฐ–์ถ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ํƒˆ๋ฐ”๊ฟˆ์‹œํ‚ต๋‹ˆ๋‹ค. -- **Operation / Maintenance:** ๊ธฐ๋Šฅ ๋ฐฐํฌ๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ์šด์˜ ์ค‘์ธ ์‹œ์Šคํ…œ์—์„œ "ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šคํ† ์–ด" ๋‹จ์œ„๋กœ ์ฝ”๋“œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด CI/CD ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. -- **Learning Path:** React ๊ธฐ์ดˆ ์žฅ๋‚œ๊ฐ ์•ฑ(Toy app)์„ ์ง์ ‘ ๋งŒ๋“ค์–ด ์ƒํƒœ๊ณ„๋ฅผ ์ดํ•ดํ•œ ๋’ค, SOLID ๋ฐ DRY ์›์น™์„ ํ•™์Šตํ•˜๊ณ , ์ปค์Šคํ…€ ํ›…๊ณผ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ๋ฒ•์„ ์ตํžŒ ํ›„ ์‹ค์ œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•™์Šต ๋กœ๋“œ๋งต์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. -- **My Project Relevance:** ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž‘์„ฑํ•œ ์˜ค๋ž˜๋œ ์ฝ”๋“œ๋ฅผ ์ธ์ˆ˜๋ฐ›์•„ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ๋•Œ, ์ฝ”๋“œ๋ฅผ ๋ฌด์ž‘์ • ๋œฏ์–ด๊ณ ์น˜๋Š” ๋Œ€์‹  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์šฐ์„  ๋งคํ•‘ํ•˜๊ณ  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์งœ๋ฉฐ AI ๋„๊ตฌ์˜ ๋„์›€์„ ๋ฐ›์•„ ์ ์ง„์ ์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ์ •๋ˆํ•˜๋Š” ์‹ค๋ฌด ์ง€์นจ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics - -- [[TanStack Query (React Query)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ธฐ์กด์˜ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ(Redux)์—์„œ ๊ด€๋ฆฌํ•˜๋˜ '์„œ๋ฒ„ ์ƒํƒœ'๋ฅผ ๋–ผ์–ด๋‚ด์–ด, ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํŽ˜์นญ(fetching), ์บ์‹ฑ, ๊ทธ๋ฆฌ๊ณ  ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค. -- [[React Performance Optimization]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ณผ์ •์—์„œ `React.memo`, `useMemo`, `useCallback`๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ธฐ๋ฒ•์„ ์ ์žฌ์ ์†Œ์— ๋ฐฐ์น˜ํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ์•ˆ์œผ๋กœ ์ดํ•ด๋ฅผ ๋„“ํž™๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Plan-Execute-Verify (PEV) Loop.md b/00_Raw/Plan-Execute-Verify (PEV) Loop.md deleted file mode 100644 index 8261937c..00000000 --- a/00_Raw/Plan-Execute-Verify (PEV) Loop.md +++ /dev/null @@ -1,70 +0,0 @@ -# [[Plan-Execute-Verify (PEV) Loop]] - -## ๐Ÿ“Œ Brief Summary -PEV(Plan-Execute-Verify) ๋ฃจํ”„๋Š” ์—์ด์ „ํŠธ์˜ ๊ณ„ํš ์ˆ˜๋ฆฝ๊ณผ ์‹คํ–‰์„ ๋ถ„๋ฆฌํ•˜๊ณ , ๊ฒ€์ฆ์„ ๊ตฌ์กฐํ™”๋œ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋กœ ๊ฐ•์ œํ•˜๋Š” 3๋‹จ๊ณ„ ์—์ด์ „ํŠธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๋‹ค [1]. ์ด ํŒจํ„ด์€ ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์ด ๋ณต์žกํ•œ ๋‹ค๋‹จ๊ณ„ ๋ฌธ์ œ๋ฅผ ๋‹จ ํ•œ ๋ฒˆ์˜ ์‹œ๋„๋กœ ํ•ด๊ฒฐํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๋Œ€์‹ , ์ž‘์—…์„ ๋ช…์‹œ์ ์ธ ๊ณ„ํš์œผ๋กœ ๋ถ„ํ•ด(Plan)ํ•˜๊ณ , ๊ทธ ๊ณ„ํš์˜ ๊ฒฝ๊ณ„ ๋‚ด์—์„œ ์‹คํ–‰(Execute)ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ๋ฌผ์„ ๊ณ„ํš ๋ฐ ์™ธ๋ถ€ ํ’ˆ์งˆ ๊ธฐ์ค€๊ณผ ๋Œ€์กฐํ•˜์—ฌ ๊ฒ€์ฆ(Verify)ํ•˜๋„๋ก ์ง€์‹œํ•œ๋‹ค [1]. ์ด๋ฅผ ํ†ตํ•ด ์—์ด์ „ํŠธ์˜ ์ž์œจ์  ๋น„๊ฒฐ์ •์„ฑ(non-determinism)์„ ํ†ต์ œํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•œ๋‹ค [2]. - -## ๐Ÿ“– Core Content -PEV ๋ฃจํ”„๋Š” ์ „ํ†ต์ ์ธ '์ƒ์„ฑ ํ›„ ๊ฒ€์‚ฌ(Generate-and-Check)' ๋ฐฉ์‹๊ณผ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ตฌ๋ณ„๋˜๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๋ฉฐ, ๊ฐ ๋‹จ๊ณ„์—์„œ ์—์ด์ „ํŠธ์˜ ์ž์œจ์„ฑ์„ ์ œํ•œํ•˜๊ณ  ๊ฒ€์ฆ์„ ๊ฐ•์ œํ•œ๋‹ค [3]. - -* **Plan (๊ณ„ํš ๋‹จ๊ณ„)**: - * ์—์ด์ „ํŠธ๊ฐ€ ์ฆ‰์‹œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ–‰๋™ํ•˜๋Š” ๋Œ€์‹ , ๋ฌธ์ œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ์ˆ˜์šฉ ๊ธฐ์ค€(acceptance criteria)์„ ํฌํ•จํ•œ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค [1, 3]. - * ๊ณ„ํš ๋‹จ๊ณ„์—์„œ ์ž์œ ๋„(degrees of freedom)๋ฅผ ์ค„์ž„์œผ๋กœ์จ, ๋™์ผํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ๋งค๋ฒˆ ๋‹ค๋ฅธ ์ถ”๋ก  ๊ฒฝ๋กœ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋น„๊ฒฐ์ •์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค [2]. -* **Execute (์‹คํ–‰ ๋‹จ๊ณ„)**: - * ์—์ด์ „ํŠธ์˜ ์‹คํ–‰ ๋ฒ”์œ„๋Š” ์ˆ˜๋ฆฝ๋œ ๊ณ„ํš์— ์˜ํ•ด ์—„๊ฒฉํ•˜๊ฒŒ ์ œํ•œ๋œ๋‹ค [3]. - * ๋ชจ๋“  ๋„๊ตฌ ํ˜ธ์ถœ(tool call) ์‹œ๋งˆ๋‹ค ํ•˜๋„ค์Šค ๊ฒŒ์ดํŠธ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค. ์‹คํ–‰ ์ „ ๊ฒŒ์ดํŠธ(Pre-execution gates)๋Š” ๋„๊ตฌ ํ˜ธ์ถœ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์ „์— ๊ฐœ์ž…ํ•˜์—ฌ ํ•ด๋‹น ๋„๊ตฌ๊ฐ€ ์•Œ๋ ค์ง„ ๋„๊ตฌ์ธ์ง€, ์ธ์ž๊ฐ€ ์œ ํšจํ•œ์ง€, ์‚ฌ์šฉ์ž ์Šน์ธ์ด ํ•„์š”ํ•œ์ง€, ์š”์ฒญ๋œ ์ž‘์—… ๋ฒ”์œ„๊ฐ€ ์ž‘์—… ๊ณต๊ฐ„ ๋‚ด์— ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•œ๋‹ค [2, 3]. -* **Verify (๊ฒ€์ฆ ๋‹จ๊ณ„)**: - * ์‚ฌํ›„ ๊ฒ€์ฆ(Post-hoc only)์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ์‹คํ–‰ ์ „, ๋Ÿฐํƒ€์ž„, ์‹คํ–‰ ํ›„ ๋ฐ ๊ณ„ํš ์ผ์น˜์„ฑ(plan alignment) ์ „๋ฐ˜์— ๊ฑธ์ณ ๊ฒ€์ฆ์ด ์ด๋ฃจ์–ด์ง„๋‹ค [3]. - * ๋‹จ์ˆœํ•œ ์ด์ง„ ํ•ฉ๊ฒฉ/์‹คํŒจ(binary pass/fail)๊ฐ€ ์•„๋‹ˆ๋ผ, ์ปจํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์—์ด์ „ํŠธ์˜ ์ถ”๋ก  ๊ณผ์ •์œผ๋กœ ๋‹ค์‹œ ํ”ผ๋“œ๋ฐฑ(feedback)ํ•˜์—ฌ ์ž๊ธฐ ์ˆ˜์ •์„ ๋•๋Š”๋‹ค [3]. - * ํ‘œ์ค€ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ(test runner)๋กœ๋Š” ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋Š” ์•„ํ‚คํ…์ฒ˜์  ์งˆ๋ฌธ๋“ค(์˜ˆ: ๊ธฐ์กด ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€, ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๊ฐ€? ์‘๋‹ต ํ˜•์‹ ๊ทœ์น™์„ ๋”ฐ๋ž๋Š”๊ฐ€?)์„ ํ‰๊ฐ€ํ•˜๋Š” '๊ณ„ํš ์ผ์น˜์„ฑ(plan alignment)' ๊ฒ€์ฆ ๊ฒŒ์ดํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค [2]. - -## โš–๏ธ Trade-offs & Caveats -PEV ๋ฃจํ”„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œ์•ฝ ์‚ฌํ•ญ ๋ฐ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์กด์žฌํ•œ๋‹ค. - -* **์‹คํ–‰ ์˜ค๋ฒ„ํ—ค๋“œ ์ฆ๊ฐ€**: ์—์ด์ „ํŠธ๊ฐ€ ๋‹จ์ผ ํŒจ์Šค๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๊ณ  ๊ณ„ํš-์‹คํ–‰-๊ฒ€์ฆ์˜ 3๋‹จ๊ณ„๋ฅผ ๊ฐ•์ œํ•˜๋ฏ€๋กœ, ๊ฐ„๋‹จํ•œ ์ž‘์—…์—์„œ๋„ ์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„์™€ ์ฒ˜๋ฆฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„(Latency)์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค [1, 3]. -* **ํ•˜๋„ค์Šค ์œ ์ง€๋ณด์ˆ˜ ๋ถ€๋‹ด**: PEV ๋ฃจํ”„๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Ÿฐํƒ€์ž„ ๋ฐ ์‹คํ–‰ ์ „ํ›„์˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์—์„œ ๋„๊ตฌ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ํ—ˆ์šฉํ•˜๋Š” ๊ฒŒ์ดํŠธ(gates)๋ฅผ ์ด˜์ด˜ํ•˜๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. ์ธ๊ฐ„์€ ๊ฒฐ๊ณผ๋ฌผ ์ž์ฒด๋ฅผ ๋ฆฌ๋ทฐํ•˜๋Š” ๋Œ€์‹  ํ•˜๋„ค์Šค๋ฅผ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ณ  ์˜ํ–ฅ๋ ฅ์ด ํฐ ๊ฒฐ์ • ์ง€์ ์—์„œ ์Šน์ธํ•˜๋Š” ์—ญํ• ์„ ๋งก๊ฒŒ ๋˜์–ด, ์ดˆ๊ธฐ ์ธํ”„๋ผ(ํ•˜๋„ค์Šค) ๊ตฌ์ถ• ๋ฐ ๊ด€๋ฆฌ ๋น„์šฉ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค [3]. -* **๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„์˜ ์–ด๋ ค์›€**: ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์™ธ์—๋„, ์—์ด์ „ํŠธ๊ฐ€ ์ˆ˜๋ฆฝ๋œ ๊ณ„ํš๊ณผ ๊ธฐ์กด ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™์„ ์ค€์ˆ˜ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” '๊ณ„ํš ์ผ์น˜์„ฑ(plan alignment)' ๊ฒ€์ฆ ๋กœ์ง์„ ํ•˜๋„ค์Šค์— ๋ณ„๋„๋กœ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์ˆ ์  ์–ด๋ ค์›€์ด ๋”ฐ๋ฅธ๋‹ค [2]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜/ํŒจํ„ด (Architecture / Pattern)] -- [[Generate-and-Check]] - - ์—ฐ๊ฒฐ ์ด์œ : PEV ํŒจํ„ด๊ณผ ๋Œ€๋น„๋˜๋Š” ์ „ํ†ต์ ์ธ ์—์ด์ „ํŠธ ์‹คํ–‰ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ณ„ํš ์—†์ด ์ž์œ ๋กญ๊ฒŒ ์‹คํ–‰ํ•œ ํ›„ ์‚ฌํ›„ ๊ฒ€์ฆ(Post-hoc)๊ณผ ์ด์ง„ ํ”ผ๋“œ๋ฐฑ(binary pass/fail)๋งŒ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์ง„ ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ , PEV ๋ฃจํ”„์˜ ๊ตฌ์กฐ์  ํ•„์š”์„ฑ์„ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค [3]. - -- [[Agent Harness]] - - ์—ฐ๊ฒฐ ์ด์œ : PEV ๋ฃจํ”„๋Š” ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒฐ์ •๋ก ์  ์ œ์–ด(๊ฒŒ์ดํŠธ, ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„) ์œ„์—์„œ ์ž‘๋™ํ•˜๋Š” ํ•˜๋„ค์Šค ์„ค๊ณ„ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์–ธ์–ด ๋ชจ๋ธ(LLM) ์ž์ฒด์˜ ์ง€๋Šฅ์„ ๋„˜์–ด, ์ฃผ๋ณ€์„ ๋‘˜๋Ÿฌ์‹ผ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๊ทœ์น™(ํ•˜๋„ค์Šค)์ด ์—์ด์ „ํŠธ์˜ ์‹ ๋ขฐ์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋ณด์žฅํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [1]. - -#### [๊ฒ€์ฆ ๋ฐ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜ (Verification & Control Mechanisms)] -- [[Pre-execution gates]] - - ์—ฐ๊ฒฐ ์ด์œ : PEV ๋ฃจํ”„์˜ ์‹คํ–‰(Execute) ๋‹จ๊ณ„์—์„œ ์—์ด์ „ํŠธ์˜ ๋„๊ตฌ ํ˜ธ์ถœ์„ ์‹ค์ œ๋กœ ํ†ต์ œํ•˜๋Š” ํ•ต์‹ฌ ํ•˜๋„ค์Šค ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์—์ด์ „ํŠธ๊ฐ€ ์Šน์ธ๋˜์ง€ ์•Š์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ž‘์—… ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ํ–‰๋™์„ ์‹œ๋„ํ•  ๋•Œ, ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ์‹คํ–‰ ์ „์— ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ฐจ๋‹จํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [2]. - -- [[Plan alignment]] - - ์—ฐ๊ฒฐ ์ด์œ : PEV ๋ฃจํ”„์˜ ๊ฒ€์ฆ(Verify) ๋‹จ๊ณ„์—์„œ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ฃจ์–ด์ง€๋Š” ํ‰๊ฐ€ ๊ธฐ์ค€์œผ๋กœ, ์—์ด์ „ํŠธ ์‚ฐ์ถœ๋ฌผ์˜ ์•„ํ‚คํ…์ฒ˜์  ์ผ๊ด€์„ฑ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ˆœํžˆ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ทœ์น™์ด๋‚˜ ๊ตฌ์กฐ(์˜ˆ: ๋ฏธ๋“ค์›จ์–ด ์žฌ์‚ฌ์šฉ, ์‘๋‹ต ํฌ๋งท)๋ฅผ ์ค€์ˆ˜ํ–ˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ์‹ฌ์ธต์ ์ธ ํ‰๊ฐ€ ๋ฐฉ์‹์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [2]. - -### Deeper Research Questions -- ๋‹จ์ˆœํ•œ Generate-and-Check ํŒจํ„ด๊ณผ ๋น„๊ตํ•˜์—ฌ, PEV ๋ฃจํ”„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์—ฐ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” API ํ˜ธ์ถœ ํšŸ์ˆ˜ ๋ฐ ํ† ํฐ ์†Œ๋ชจ ๋น„์šฉ์„ ํ•˜๋„ค์Šค ๋ ˆ๋ฒจ์—์„œ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ์‹คํ–‰ ์ „ ๊ฒŒ์ดํŠธ(Pre-execution gates)๋Š” ์—์ด์ „ํŠธ์˜ ๋„๊ตฌ ์ธ์ž(argument) ๋ฐ ์ ‘๊ทผ ๊ถŒํ•œ์˜ ์œ ํšจ์„ฑ์„ ์–ด๋– ํ•œ ๊ฒฐ์ •๋ก ์ (deterministic) ๋ฐฉ์‹์œผ๋กœ ํ‰๊ฐ€ํ•˜๋Š”๊ฐ€? -- ์ฝ”๋“œ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ(test runner)๋กœ๋Š” ํ™•์ธ ๋ถˆ๊ฐ€๋Šฅํ•œ '๊ณ„ํš ์ผ์น˜์„ฑ(Plan alignment)' ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ์ž๋™ํ™”๋œ ํ•˜๋„ค์Šค ๊ฒŒ์ดํŠธ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ธฐ์ˆ ์  ์ ‘๊ทผ์ด ํ•„์š”ํ•œ๊ฐ€? -- PEV ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ์—์ด์ „ํŠธ์—๊ฒŒ ์ œ๊ณต๋˜๋Š” '์ปจํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ'์€ ์—์ด์ „ํŠธ์˜ ์ž๊ฐ€ ์ˆ˜์ •(self-correction) ์„ฑ๊ณต๋ฅ ์„ ์–ผ๋งˆ๋‚˜ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๊ฐ€? -- ๊ณ„ํš ๋‹จ๊ณ„(Plan)์—์„œ ์ž์œ ๋„๋ฅผ ์˜๋„์ ์œผ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด, ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ฐฝ์˜์  ํ•ด๋ฒ•์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์—์ด์ „ํŠธ์˜ ๋Šฅ๋ ฅ์„ ์ €ํ•ดํ•˜๋Š” ๋ถ€์ž‘์šฉ(Trade-off)์€ ์—†๋Š”๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ž‘์—…์„ ์ž์œจ ์—์ด์ „ํŠธ์—๊ฒŒ ์œ„์ž„ํ•  ๋•Œ, ํ•œ ๋ฒˆ์˜ ํ”„๋กฌํ”„ํŠธ๋กœ ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ ๋ฐ ๊ณ„ํš์„œ ์ž‘์„ฑ, ์Šน์ธ, ์‹คํ–‰, ๊ฒ€์ฆ์˜ ๋‹ค๋‹จ๊ณ„ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„ํ•  ๋•Œ ์ ์šฉ๋œ๋‹ค. -- **System Design:** ์—์ด์ „ํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ํŒŒ๊ดด์ ์ธ ๋„๊ตฌ(์˜ˆ: ์…ธ ๋ช…๋ น์–ด, ํŒŒ์ผ ๋ฎ์–ด์“ฐ๊ธฐ)๋ฅผ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํˆด ํ˜ธ์ถœ ์ธํ„ฐ์…‰ํ„ฐ(Pre-execution gates)๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ํ™œ์šฉ๋œ๋‹ค. -- **Operation / Maintenance:** ์ธ๊ฐ„ ์ž‘์—…์ž๊ฐ€ ์—์ด์ „ํŠธ๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ๋ฅผ ์ผ์ผ์ด ๋ฆฌ๋ทฐํ•˜๋Š” ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜, ์—์ด์ „ํŠธ์˜ ๊ณ„ํš์„ ์Šน์ธํ•˜๊ณ  ํ•˜๋„ค์Šค ๊ฒ€์ฆ ๊ทœ์น™์„ ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์šด์˜ ๋ชจ๋ธ์„ ์ „ํ™˜ํ•  ๋•Œ ํ•ต์‹ฌ์ ์ธ ๊ธฐ์ค€์ด ๋œ๋‹ค. -- **Learning Path:** LLM์„ ๋‹จ์ˆœํ•œ ์ถ”๋ก  ์—”์ง„์„ ๋„˜์–ด, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ '์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์›Œํฌ์—”์ง„'์œผ๋กœ ๊ฒฉ์ƒ์‹œํ‚ค๋Š” ํ•˜๋„ค์Šค ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ํ•™์Šตํ•  ๋•Œ ํ•„์ˆ˜์ ์ด๋‹ค. -- **My Project Relevance:** ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ์ด๋‚˜ ์ž์œจ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ์—์ด์ „ํŠธ๊ฐ€ ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€๊ฑฐ๋‚˜ ์—‰๋šฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž„์˜๋กœ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ(ํ™˜๊ฐ)๋ฅผ ํ†ต์ œํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„์— ์ง์ ‘์ ์œผ๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. - -### Adjacent Topics -- [[Self-verification]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์—์ด์ „ํŠธ๊ฐ€ ์™ธ๋ถ€์˜ ํ•˜๋„ค์Šค ํ”ผ๋“œ๋ฐฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์Šค์Šค๋กœ ์ž์‹ ์˜ ์‚ฐ์ถœ๋ฌผ์„ ํ‰๊ฐ€ํ•˜๊ณ  ๋น„ํŒ(critique)ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด PEV์˜ ๊ฒ€์ฆ ๋‹จ๊ณ„์™€ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉ๋˜๋Š”์ง€ ํƒ๊ตฌ. -- [[Human-in-the-Loop (HITL)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: PEV ๋ฃจํ”„ ๋‚ด์—์„œ ์ธ๊ฐ„์ด ๊ฐœ์ž…ํ•ด์•ผ ํ•˜๋Š” ์˜ํ–ฅ๋ ฅ์ด ํฐ ๊ฒฐ์ • ์ง€์ (high-leverage decision points)์„ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„ค๊ณ„ํ• ์ง€์— ๋Œ€ํ•œ ์—ฐ๊ตฌ. - ---- -*Last updated: 2026-05-01* \ No newline at end of file diff --git a/00_Raw/Pull Request (PR).md b/00_Raw/Pull Request (PR).md deleted file mode 100644 index 37673484..00000000 --- a/00_Raw/Pull Request (PR).md +++ /dev/null @@ -1,56 +0,0 @@ -# [[Pull Request (PR)]] - -## ๐Ÿ“Œ Brief Summary -Pull Request(PR)๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature Branch)์—์„œ ์ž‘์—…ํ•œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜(`main`)๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ํŒ€์›๋“ค์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํ’ˆ์งˆ ๊ฒ€์ฆ์„ ๊ฑฐ์น˜๋„๋ก ํ•˜๋Š” ํ•ต์‹ฌ ํ˜‘์—… ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค [1-3]. PR์€ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ๋ณ‘ํ•ฉ ์š”์ฒญ์„ ๋„˜์–ด, ๋™๋ฃŒ์˜ ๊ฒ€ํ† ๋ฅผ ์ด‰์ง„ํ•˜๊ณ  ๋ฒ„๊ทธ๋‚˜ UI ํšŒ๊ท€(regression)๊ฐ€ ์šด์˜ ํ™˜๊ฒฝ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ํ’ˆ์งˆ ๊ด€๋ฆฌ์˜ ์ตœ์ข… ๊ด€๋ฌธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [3-5]. ์•„์ฃผ ์ž‘์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด๋ผ๋„ ์ผ๊ด€๋˜๊ฒŒ PR์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ํŒ€ ๋‚ด ๊ฑด์ „ํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์Šต๊ด€๊ณผ ๊ทœ์œจ์„ ํ˜•์„ฑํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [4]. - -## ๐Ÿ“– Core Content -* **PR์˜ ํ•ต์‹ฌ ๋ชฉ์ ๊ณผ ๊ตฌ์„ฑ:** PR์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํ˜‘์—…์ด ์ด๋ฃจ์–ด์ง€๋Š” ์ค‘์‹ฌ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ PR์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋งŒ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ '๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€', '์™œ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€' ๋ช…ํ™•ํžˆ ์„œ์ˆ ํ•ด์•ผ ํ•˜๋ฉฐ, UI์— ๋ณ€ํ™”๊ฐ€ ์žˆ๋‹ค๋ฉด ์Šคํฌ๋ฆฐ์ƒท์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1]. ๋˜ํ•œ, PR ์ด๋ฆ„์ด๋‚˜ ์„ค๋ช…์— JIRA ๋“ฑ์˜ ํ‹ฐ์ผ“ ID(์˜ˆ: PROJ-123)๋ฅผ ํฌํ•จ์‹œํ‚ค๋ฉด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ถ”์ ์„ฑ(Traceability)์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์–ด, ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋ณ€๊ฒฝ์˜ ๋งฅ๋ฝ์„ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 7]. -* **PR ํฌ๊ธฐ ๊ด€๋ฆฌ:** PR์€ ๊ฐ€๊ธ‰์  200์ค„ ์ดํ•˜์˜ ์ž‘์€ ํฌ๊ธฐ๋กœ ์œ ์ง€ํ•˜๊ณ , ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ(Atomic commit)์—๋งŒ ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค [1, 2, 4]. ๋ฆฌ๋ทฐ์–ด๊ฐ€ ํ•œ ๋ฒˆ์— 2,000์ค„์ด ๋„˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ์‚ฌ(Audit)ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ์ž‘์€ PR์ผ์ˆ˜๋ก ๋น ๋ฅด๊ณ  ์ฒ ์ €ํ•œ ๊ฒ€ํ† ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [3]. -* **๋ณ‘ํ•ฉ ์ „ ํ•„์ˆ˜ ์กฐ๊ฑด (Safeguards):** PR์„ `main` ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ์•ˆ์ „์žฅ์น˜๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ(Branch protection) ์„ค์ •์„ ํ†ตํ•ด ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ๋™๋ฃŒ ์Šน์ธ(Peer Review)์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค [1, 2, 4, 8]. ๋˜ํ•œ, ๋ณ‘ํ•ฉ ์ „ CI ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ชจ๋“  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ํ†ต๊ณผํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค [1, 2, 9]. -* **์‹œ๊ฐ์  ๋ฆฌ๋ทฐ (Visual Review):** ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์™ธ์— ์‹œ๊ฐ์  ๋ฆฌ๋ทฐ๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. Storybook, Chromatic, Happo์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜์—ฌ PR ์ƒ์„ฑ ์‹œ ์ž๋™์œผ๋กœ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual Regression Testing) ๋ฐ ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 10-12]. ์˜๋„์น˜ ์•Š์€ ๋ ˆ์ด์•„์›ƒ ๋ณ€ํ™”๋‚˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด PR์— ๊ฒฝ๊ณ (Badge)๊ฐ€ ํ‘œ์‹œ๋˜์–ด ๋ณ‘ํ•ฉ์„ ๋ง‰๊ณ  ์ˆ˜๋™ ๊ฒ€ํ† ๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค [5, 13]. -* **๋ณ‘ํ•ฉ ์ „๋žต๊ณผ ์‚ฌํ›„ ์ฒ˜๋ฆฌ:** PR ๋ฆฌ๋ทฐ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ๋ณ‘ํ•ฉํ•  ๋•Œ๋Š” ์ „์ฒด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash Merge)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [1, 8, 14]. ๋ณ‘ํ•ฉ์ด ๋๋‚œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋Š” ์ €์žฅ์†Œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฆ‰์‹œ(๋˜๋Š” ์ž๋™) ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 4, 8, 14]. - -## โš–๏ธ Trade-offs & Caveats -* **์ž‘์—… ์˜ค๋ฒ„ํ—ค๋“œ ์ฆ๊ฐ€:** ๋ชจ๋“  ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ(์‹ฌ์ง€์–ด ์•„์ฃผ ๋‹จ์ˆœํ•œ ์˜คํƒ€ ์ˆ˜์ • ๋“ฑ)์— ๋Œ€ํ•ด์„œ๋„ PR์„ ์ƒ์„ฑํ•˜๊ณ  ๋™๋ฃŒ์˜ ๋ฆฌ๋ทฐ ๋ฐ CI ๊ฒ€์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋ฏ€๋กœ, ๊ทน๋„๋กœ ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ ˆ์ฐจ๊ฐ€ ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ž‘์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 15]. -* **๋ฆฌ๋ทฐ ์ง€์—ฐ ๋ณ‘๋ชฉ ํ˜„์ƒ:** PR์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ์ง€ ์•Š๊ณ  ๋ฐฉ์น˜ํ•˜์—ฌ ๊ฑฐ๋Œ€ํ•œ PR์ด ์ƒ์„ฑ๋  ๊ฒฝ์šฐ, ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์Šน์ธํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฉฐ ๋ฆฌ๋ทฐ์˜ ์งˆ์ด ํ•˜๋ฝํ•ฉ๋‹ˆ๋‹ค [3]. -* **๋ณ‘ํ•ฉ ์ถฉ๋Œ(Merge Conflicts) ์œ„ํ—˜:** ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์งง๊ฒŒ ์œ ์ง€(Short-lived)ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋žซ๋™์•ˆ ์ž‘์—…ํ•œ ๋’ค ๋’ค๋Šฆ๊ฒŒ PR์„ ์—ด๊ฒŒ ๋˜๋ฉด, ๊ทธ ์‚ฌ์ด `main` ๋ธŒ๋žœ์น˜์— ์Œ“์ธ ๋‹ค๋ฅธ ํŒ€์›๋“ค์˜ ์ฝ”๋“œ์™€ ํฌ๊ฒŒ ์—‡๊ฐˆ๋ฆฌ๊ฒŒ ๋˜์–ด ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 14-16]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [ํ˜‘์—… ๋ฐ ๋ธŒ๋žœ์นญ ์ „๋žต] -- [[Feature Branch Workflow]] - - ์—ฐ๊ฒฐ ์ด์œ : PR์€ ๋…๋ฆฝ๋œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ž‘์—…์„ ๋งˆ์นœ ํ›„ `main` ๋ธŒ๋žœ์น˜๋กœ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ๊ฑฐ์น˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2, 17, 18]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋žœ์น˜๋ฅผ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์งง์€ ์ฃผ๊ธฐ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์–ด๋–ป๊ฒŒ PR ๊ณผ์ •์—์„œ์˜ ์ถฉ๋Œ์„ ์ค„์ด๊ณ  ํ˜‘์—… ํšจ์œจ์„ ๋†’์ด๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 15, 18]. - -#### [์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ๊ฒ€์ฆ ๋„๊ตฌ] -- [[Visual Regression Testing]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ์˜ PR ๋ณ‘ํ•ฉ ์ „ ๋‹จ๊ณ„์—์„œ UI ๋ณ€๊ฒฝ์ด๋‚˜ ๋ ˆ์ด์•„์›ƒ ๋ถ•๊ดด๋ฅผ ์žก์•„๋‚ด๋Š” ํ•ต์‹ฌ์ ์ธ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค [5, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Happo๋‚˜ Chromatic์ด ์–ด๋–ป๊ฒŒ PR ์›Œํฌํ”Œ๋กœ์šฐ์— ๊ฒฐํ•ฉ๋˜์–ด ๋ฆฌ๋ทฐ์–ด์˜ ๋ถ€๋‹ด์„ ๋œ๊ณ  ์‹œ๊ฐ์  ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 11]. -- [[Squash Merge]] - - ์—ฐ๊ฒฐ ์ด์œ : PR์„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์Šน์ธ ๋ฐ ๋ณ‘ํ•ฉํ•  ๋•Œ ๋ณต์žกํ•œ ์ค‘๊ฐ„ ์ปค๋ฐ‹ ๋‚ด์—ญ์„ ํ•˜๋‚˜๋กœ ์ •๋ฆฌํ•˜์—ฌ Git ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ณ‘ํ•ฉ ์ „๋žต์ž…๋‹ˆ๋‹ค [1, 8, 14]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์ž์ž˜ํ•œ ์ปค๋ฐ‹์ด PR ๋‹จ์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์˜ ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์œ„๋กœ ์••์ถ•๋˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 8]. - -### Deeper Research Questions -- ๋Œ€๊ทœ๋ชจ ํŒ€์—์„œ PR ๋ฆฌ๋ทฐ์˜ ์ฒ ์ €ํ•จ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋ณ‘ํ•ฉ ์ง€์—ฐ ์‹œ๊ฐ„(Lead Time)์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๊ทนํžˆ ์‚ฌ์†Œํ•œ ๋ณ€๊ฒฝ(์˜คํƒ€ ์ˆ˜์ • ๋“ฑ)์— ๋Œ€ํ•ด PR ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹(Direct push)ํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ๋‘๋Š” ๊ฒƒ์ด ์žฅ๊ธฐ์ ์œผ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค ์•ˆ์ •์„ฑ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€? -- Happo๋‚˜ Chromatic ๊ฐ™์€ ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋“ค์„ CI ํŒŒ์ดํ”„๋ผ์ธ์˜ PR ์ฒดํฌ์— ์—ฐ๋™ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ๊ฐ„ ์ฆ๊ฐ€์™€ ๋น„์šฉ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- PR ๋‹จ๊ณ„์—์„œ ์‹ฌ๊ฐํ•œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ(Merge Conflict)์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ํšจ๊ณผ์ ์ธ Git Rebase ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- PR ์ด๋ฆ„๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— Ticket ID(์˜ˆ: JIRA) ์ž‘์„ฑ์„ ๊ฐ•์ œํ•˜๋Š” ์ •์ฑ…์ด ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์›์ธ ์ถ”์ ๊ณผ ๋กค๋ฐฑ ํ”„๋กœ์„ธ์Šค์— ์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌํ•˜๋Š”๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ํ”ฝ์Šค ์ž‘์—… ์‹œ `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ํ‘ธ์‹œํ•˜์ง€ ์•Š๊ณ , ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์ž‘์—…์„ ์™„๋ฃŒํ•œ ํ›„ PR์„ ์—ด์–ด ๋ฌด์—‡์„ ๋ฐ”๊ฟจ๋Š”์ง€ ์Šคํฌ๋ฆฐ์ƒท๊ณผ ํ•จ๊ป˜ ์ƒ์„ธํžˆ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค [1, 14]. -- **System Design:** GitHub ๋“ฑ์— Branch Protection Rule์„ ์„ค์ •ํ•˜์—ฌ, PR์ด 1๋ช… ์ด์ƒ์˜ ์Šน์ธ์„ ๋ฐ›๊ณ  ๋ชจ๋“  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ CI ๋ฆฐํŠธ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•ด์•ผ๋งŒ ๋ณ‘ํ•ฉ(Merge) ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜๋„๋ก ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [1, 19]. -- **Operation / Maintenance:** ์šด์˜ ์ค‘ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ณผ๊ฑฐ PR ๊ธฐ๋ก๊ณผ ํฌํ•จ๋œ Ticket ID๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ, ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ์˜ํ•ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ  ๋ˆ„๊ฐ€ ๋ฆฌ๋ทฐํ–ˆ๋Š”์ง€ ์‹ ์†ํžˆ ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค [6, 7]. -- **Learning Path:** Git์„ ํ•™์Šตํ•˜๋Š” ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋„ `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹ํ•˜๋Š” ๋Œ€์‹  PR์„ ์—ด๊ณ  ์Šค์Šค๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์—ฐ์Šตํ•˜์—ฌ ์‹ค๋ฌด ํ˜‘์—… ํ‘œ์ค€์— ์ต์ˆ™ํ•ด์ง‘๋‹ˆ๋‹ค [4, 18]. -- **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์†Œ๊ทœ๋ชจ ํŒ€ ํ”„๋กœ์ ํŠธ์— Feature Branch์™€ ๊ฒฐํ•ฉ๋œ ๊ฐ€๋ฒผ์šด PR ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋„์ž…ํ•˜๊ณ , '์ž‘์€ PR ํฌ๊ธฐ ์œ ์ง€', 'Squash Merge ์‚ฌ์šฉ', '๋ณ‘ํ•ฉ ํ›„ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ' ๊ทœ์œจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [8, 15, 16]. - -### Adjacent Topics -- [[Continuous Integration (CI)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: PR์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ, ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋กœ์ง ๊ฒ€ํ† ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ž๋™ํ™” ์ธํ”„๋ผ๋กœ ํ™•์žฅ ํ•™์Šต. -- [[Code Review]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: PR์ด๋ผ๋Š” ๊ณต๊ฐ„ ๋‚ด์—์„œ ํŒ€์› ๊ฐ„์— ํšจ๊ณผ์ ์ด๊ณ  ๊ฑด์„ค์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๊ธฐ์ˆ ๊ณผ ๋ฆฌ๋ทฐ ๋ฌธํ™”๋ฅผ ์กฐ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ™•์žฅ ํ•™์Šต. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/React Codebase Refactoring.md b/00_Raw/React Codebase Refactoring.md deleted file mode 100644 index 53140358..00000000 --- a/00_Raw/React Codebase Refactoring.md +++ /dev/null @@ -1,64 +0,0 @@ -# [[React Codebase Refactoring]] - -## ๐Ÿ“Œ Brief Summary -React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋ฆฌํŒฉํ† ๋ง์€ ๊ธฐ์กด ์•ฑ์˜ ์™ธ๋ถ€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์„ฑ๋Šฅ, ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์žฌ์„ค๊ณ„ํ•˜๊ณ  ์ •๋ฆฌํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ React ์•ฑ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋…ผ๋ฆฌ ๊ฒฐํ•ฉ, ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง, ์ „์—ญ ์ƒํƒœ์˜ ๋‚จ์šฉ ๋“ฑ์˜ ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์ธ ๋ฆฌํŒฉํ† ๋ง์„ ์œ„ํ•ด์„œ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ์•ˆ์ „๋ง์„ ํ™•๋ณดํ•œ ํ›„, ์ปดํฌ๋„ŒํŠธ ์ฑ…์ž„ ๋ถ„๋ฆฌ, TypeScript ๋„์ž…, ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์˜ ํ˜„๋Œ€ํ™”๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [1-3]. - -## ๐Ÿ“– Core Content -* **ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์ ‘๊ทผ (Test-Driven Approach):** ๋ฆฌํŒฉํ† ๋ง ๋„์ค‘ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์†์ƒ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋จผ์ € ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)๋‚˜ UI ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ธฐ์กด ๋™์ž‘์„ ๋ณด์žฅํ•˜๋ฉฐ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 4, 5]. -* **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Incremental Migration):** ์ „์ฒด ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์žฌ์ž‘์„ฑ(Rewrite)ํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜๋„๊ฐ€ ๋†’์œผ๋ฏ€๋กœ, ์ ์ง„์ ์ธ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Context API์—์„œ Zustand๋กœ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, ํ•˜๋‚˜์˜ ์Šคํ† ์–ด๋‚˜ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋‹จ๊ณ„๋ณ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•ด์•ผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐœ๋ฐœ์˜ ์ค‘๋‹จ ์—†์ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ˜„๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. -* **๊ตฌ์กฐ ๋ฐ ์ปดํฌ๋„ŒํŠธ ์ฑ…์ž„ ๋ถ„๋ฆฌ (Separation of Concerns):** 300์ค„ ์ด์ƒ์˜ ๋ฐฉ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์— ๋”ฐ๋ผ ๋” ์ž‘๊ณ  ์ดˆ์ ์ด ๋งž์ถฐ์ง„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [6, 7]. ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด๋‚˜ ํผ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…(Custom Hooks)์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ UI ์ปดํฌ๋„ŒํŠธ์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [8, 9]. -* **์ƒํƒœ ๊ด€๋ฆฌ์˜ ํ˜„๋Œ€ํ™”:** ๊ณผ๊ฑฐ์˜ ๊ฑฐ๋Œ€ํ•œ ๋‹จ์ผ ์ „์—ญ ์ƒํƒœ๋ฅผ ์—ญํ• ์— ๋งž๊ฒŒ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. API์—์„œ ๊ฐ€์ ธ์˜ค๋Š” '์„œ๋ฒ„ ์ƒํƒœ'๋Š” TanStack Query(React Query)์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์œ„์ž„ํ•˜๊ณ , 'ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ'๋Š” Zustand์™€ ๊ฐ™์€ ๊ฐ€๋ฒผ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์ง€์—ญ ์ƒํƒœ(Local State)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋„๋ก ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [10-12]. -* **๋„๊ตฌ ๋ฐ ์ปจ๋ฒค์…˜์˜ ์ ์šฉ:** JavaScript ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋Š” TypeScript๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜์—ฌ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [3, 11]. ๋˜ํ•œ, ESLint์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•ด ์ฝ”๋“œ ํฌ๋งทํŒ…๊ณผ ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™(์˜ˆ: ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ ๊ทœ์น™)์„ ์ž๋™์œผ๋กœ ๊ฐ•์ œํ•ด์•ผ ํ•˜๋ฉฐ, ์ธ๋ผ์ธ ์Šคํƒ€์ผ์ด๋‚˜ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์ด ํ˜ผ์žฌ๋œ CSS๋ฅผ ํ•œ ๊ฐ€์ง€ ๋ฐฉ์‹(์˜ˆ: CSS Modules, Tailwind ๋“ฑ)์œผ๋กœ ํ†ต์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [13-15]. -* **๊ณผ๊ฑฐ์˜ ํŒจํ„ด ์ œ๊ฑฐ:** ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks)์œผ๋กœ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [11]. ์ตœ์‹  React(์˜ˆ: React 19)๋‚˜ React Compiler๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋ถˆํ•„์š”ํ•œ `useEffect`, `useMemo`, `useCallback` ๋“ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 16, 17]. - -## โš–๏ธ Trade-offs & Caveats -* **์ถ”์ƒํ™”์˜ ํ•จ์ •๊ณผ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง (KISS vs DRY):** DRY(Don't Repeat Yourself) ์›์น™์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด ์„ฑ๊ธ‰ํ•˜๊ฒŒ ๊ณตํ†ต ๋กœ์ง์„ ์ถ”์ƒํ™”ํ•˜๋ฉด, ์ฝ”๋“œ๊ฐ€ ์›๋ž˜์˜ ๋ฐ˜๋ณต๋œ ์ฝ”๋“œ๋ณด๋‹ค ๋” ๋ณต์žกํ•ด์ง€๊ณ  ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋Š” ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „๋ฌธ๊ฐ€๋“ค์€ ํŒจํ„ด์ด 3๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ถ”์ƒํ™”(Custom Hook ๋“ฑ)๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค [18]. -* **TypeScript ์ฑ„ํƒ์˜ ์ธ์ง€์  ๋ถ€ํ•˜:** ๋ฆฌํŒฉํ† ๋ง ์‹œ TypeScript๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ์žฅ๊ธฐ์  ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋งŒ, ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ๊ฐœ๋ฐœํŒ€์—๊ฒŒ๋Š” ์ƒˆ๋กœ์šด ๋ณต์žก์„ฑ ๋ ˆ์ด์–ด๋กœ ์ž‘์šฉํ•˜์—ฌ ์ดˆ๊ธฐ์— ์ƒ์‚ฐ์„ฑ์„ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ•์ œ ๋„์ž…๋ณด๋‹ค๋Š” ๊ฐœ๋ณ„ ํŒŒ์ผ๋ถ€ํ„ฐ ์ ์ง„์ ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ถ”์ฒœ๋ฉ๋‹ˆ๋‹ค [3]. -* **์•„ํ‚คํ…์ฒ˜ ๋„์ž… ๋น„์šฉ:** Feature-Sliced Design(FSD)๊ณผ ๊ฐ™์ด ์—„๊ฒฉํ•œ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ฒƒ์€ ํฐ ํ•™์Šต ๊ณก์„ ๊ณผ ์„ค์ • ๋น„์šฉ์„ ์ˆ˜๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ํŒ€ ์ „์ฒด์˜ ์ดํ•ด๋„๊ฐ€ ์—†์œผ๋ฉด ์˜คํžˆ๋ ค ์‹œ์Šคํ…œ์ด ์—‰๋ง์ด ๋˜๊ฑฐ๋‚˜ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ณผ๋„ํ•œ ์„ค๊ณ„(Overkill)๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [19-21]. -* **์™„์ „ ์žฌ์ž‘์„ฑ(Rewrite)์˜ ์œ„ํ—˜์„ฑ:** ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งค์šฐ ์ž‘๋‹ค๋ฉด ์•„์˜ˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅผ ์ˆ˜๋„ ์žˆ์œผ๋‚˜ [4], ์ผ๋ฐ˜์ ์ธ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ „๋ฉด ์žฌ์ž‘์„ฑ๋ณด๋‹ค๋Š” ์•ˆ์ „์„ฑ์„ ๋‹ด๋ณดํ•œ ์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [1]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ )] -- [[Feature-Sliced Design]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๊ธฐ์ˆ  ๋‹จ์œ„(Component, Hooks ๋“ฑ)๋กœ ํฉ์–ด์ง„ ๊ธฐ์กด ํด๋” ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋Šฅ(Feature) ์ค‘์‹ฌ์œผ๋กœ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์žฌํŽธํ•  ๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” ํ˜„๋Œ€์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋ก ์ž…๋‹ˆ๋‹ค [22, 23]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ™•์žฅ์„ฑ์„ ์œ„ํ•œ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ทœ์น™๊ณผ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ ์ฝ”๋“œ ์บก์Аํ™” ์„ค๊ณ„ ๋ฐฉ๋ฒ•. -- [[SOLID Principles]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ฑฐ๋Œ€ํ•œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)๊ณผ ๊ฐ™์€ ํด๋ฆฐ ์ฝ”๋“œ์˜ ๊ธฐ๋ฐ˜ ์ง€์นจ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [6, 24]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ฑ…์ž„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ถ”์ƒํ™”๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ธฐ์ค€. - -#### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ)] -- [[TanStack Query]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ธฐ์กด์˜ ๋น„ํšจ์œจ์ ์ธ Context API๋‚˜ ๊ฑฐ๋Œ€ํ•œ Redux ์Šคํ† ์–ด๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์„œ๋ฒ„ ์ƒํƒœ(์บ์‹ฑ, ๋™๊ธฐํ™” ๋“ฑ)๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ด ์ฃผ๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [10, 11]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋กœ์ง์˜ ๋ถ„๋ฆฌ์™€ ์ปดํฌ๋„ŒํŠธ ๋‚ด ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ์†Œ ๋ฐฉ๋ฒ•. -- [[Zustand]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง์„ ์œ ๋ฐœํ•˜๋Š” ๊ธฐ์กด์˜ Context API ๊ธฐ๋ฐ˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ์ฃผ๋กœ ๋„์ž…๋˜๋Š” ๊ฒฝ๋Ÿ‰ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค [1, 25]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ์„ ํƒ์ž(Selector)๋ฅผ ํ†ตํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ๊ตฌ์กฐ ๋ฐ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์—†๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง ์ž‘์„ฑ๋ฒ•. -- [[Unit Testing]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ๊ธฐ์กด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํŒŒ๊ดด๋˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์— ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค [2, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ชผ๊ฐœ๊ณ  ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ์‹ค์งˆ์ ์ธ ์—”์ง€๋‹ˆ์–ด๋ง ์ ˆ์ฐจ. - -### Deeper Research Questions -- ๋ ˆ๊ฑฐ์‹œ React ์•ฑ์—์„œ Context API๋ฅผ Zustand๋กœ ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ(Incremental Migration), ์ƒํƒœ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์•ˆ์ „ํ•œ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰ ์‹œ, Feature-Sliced Design(FSD) ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•  ๋•Œ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ(Cross-cutting concerns)์„ ์–ด๋–ป๊ฒŒ ๊ณ„์ธต์ ์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- React Compiler ํ™˜๊ฒฝ์ด ๋„์ž…๋˜์—ˆ์„ ๋•Œ, ๋ฆฌํŒฉํ† ๋ง ์‹œ ๊ธฐ์กด ์ฝ”๋“œ์— ๋‚จ์šฉ๋œ `useMemo`์™€ `useCallback`์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ๋ฐ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์— ์–ด๋–ค ๊ตฌ์ฒด์ ์ธ ์ด์ ์„ ์ฃผ๋Š”๊ฐ€? -- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํ˜ผ์žฌ๋œ ๊ฑฐ๋Œ€ํ•œ ํผ(Form) ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)๊ณผ YAGNI ์›์น™ ๊ฐ„์˜ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ TypeScript ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•  ๋•Œ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ ์ ์ง„์  ํƒ€์ž… ์ •์˜๋ฅผ ์ ์šฉํ•˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ๋น„๋Œ€ํ•ด์ง„ React ์ปดํฌ๋„ŒํŠธ์—์„œ API ํ˜ธ์ถœ๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ Custom Hook์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ , ESLint๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ฝ”๋“œ ์ปจ๋ฒค์…˜๊ณผ ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ์œ„๋ฐ˜์„ ๋ฆฐํŠธ(Lint) ๋‹จ๊ณ„์—์„œ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. -- **System Design:** ํ”„๋กœ์ ํŠธ์˜ ํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ๋ณ„(File-type based) ๋ถ„๋ฅ˜์—์„œ Feature-Sliced Design๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ/๋น„์ฆˆ๋‹ˆ์Šค ์ค‘์‹ฌ์˜ ๊ณ„์ธตํ˜• ๊ตฌ์กฐ๋กœ ์žฌ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. -- **Operation / Maintenance:** ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ํ•œ ๋ฒˆ์— ๋ชจ๋“  ์‹œ์Šคํ…œ์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ์Šคํ† ์–ด๋‚˜ ํŠน์ • ๊ธฐ๋Šฅ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ ์ง„์  ์ ‘๊ทผ๋ฒ•์„ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค. -- **Learning Path:** React ๊ธฐ์ดˆ ์Šต๋“ โž” Clean Code ๋ฐ SOLID ์›์น™ ์ดํ•ด โž” ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์„ธ๋ถ„ํ™”(์„œ๋ฒ„ ๋ฐ์ดํ„ฐ vs UI ์ƒํƒœ) โž” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ โž” ์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง ์ ์šฉ ์ˆœ์œผ๋กœ ์—”์ง€๋‹ˆ์–ด๋ง ์—ญ๋Ÿ‰์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. -- **My Project Relevance:** ํ˜„์žฌ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ณ  ์žˆ๋Š” ๋ณต์žกํ•œ ๋ ˆ๊ฑฐ์‹œ React ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๋Šฅ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ €ํ•˜ ์›์ธ์„ ๋ถ„์„ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ์™€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Zustand, React Query) ๊ต์ฒด ์ž‘์—…์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ธฐํšํ•  ๋•Œ ์ง์ ‘ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics -- [[Web Performance Optimization]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฆฌํŒฉํ† ๋ง์˜ ๊ถ๊ทน์  ๊ฒฐ๊ณผ๋ฌผ ์ค‘ ํ•˜๋‚˜์ธ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ํ–ฅ์ƒ, ๋ Œ๋”๋ง ์ตœ์ ํ™”, ๊ทธ๋ฆฌ๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ด๋Š” ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…(Code Splitting) ๊ธฐ๋ฒ• ๋“ฑ์œผ๋กœ ๊ฐœ๋…์„ ํ™•์žฅํ•˜์—ฌ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Git Workflow & CI/CD]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ธŒ๋žœ์น˜ ์ถฉ๋Œ ๋ฐฉ์ง€์™€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ž๋™ํ™”, ๊ทธ๋ฆฌ๊ณ  Pull Request ๊ณผ์ •์—์„œ Visual Regression Testing์„ ์—ฐ๋™ํ•˜๋Š” ๋“ฑ ํ˜‘์—… ์ „๋žต์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Single Responsibility Principle.md b/00_Raw/Single Responsibility Principle.md deleted file mode 100644 index 84df9046..00000000 --- a/00_Raw/Single Responsibility Principle.md +++ /dev/null @@ -1,62 +0,0 @@ -# [[Single Responsibility Principle]] - -## ๐Ÿ“Œ Brief Summary -SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)๋Š” ์ปดํฌ๋„ŒํŠธ, ํ•จ์ˆ˜ ๋˜๋Š” ๋ชจ๋“ˆ์ด ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋‚˜ ๋ชฉ์ ๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์›์น™์ž…๋‹ˆ๋‹ค [1-3]. ๋ณธ๋ž˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํด๋ž˜์Šค ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ์›์น™์ด์ง€๋งŒ, React์™€ ๊ฐ™์€ ํ•จ์ˆ˜ํ˜• ์ฝ”๋“œ์—์„œ๋„ 'ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค'๋Š” ๊ฐœ๋…์œผ๋กœ ๋ฒˆ์—ญ๋˜์–ด ๋„๋ฆฌ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [3]. ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ ํ•˜๋‚˜๋ฟ์ด์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 4]. - -## ๐Ÿ“– Core Content -* **๊ฐœ๋…๊ณผ ์ ์šฉ์˜ ํ•ต์‹ฌ:** SRP๋Š” ์žฅ๋‚œ๊ฐ ์ƒ์ž์—์„œ ๊ฐ ์žฅ๋‚œ๊ฐ์ด ์ž์‹ ๋งŒ์˜ ํŠน๋ณ„ํ•œ ์œ„์น˜๋ฅผ ๊ฐ€์ง€๋“ฏ, ์ฝ”๋“œ์˜ ๊ฐ ๋ถ€๋ถ„์ด ์˜ค์ง ํ•œ ๊ฐ€์ง€์˜ ํŠน์ •ํ•œ ์ผ๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ์›์น™์ž…๋‹ˆ๋‹ค [1]. React ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๋‚˜ ํ›…(hook)์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•  ์ด์œ ๊ฐ€ ๋ช…ํ™•ํžˆ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [2, 4]. -* **์‹๋ณ„ ๋ฐฉ๋ฒ• (์ฝ”๋“œ ์Šค๋ฉœ):** ์ปดํฌ๋„ŒํŠธ๊ฐ€ 300์ค„์„ ๋„˜์–ด๊ฐ€๋Š” ๋“ฑ ๊ณผ๋„ํ•˜๊ฒŒ ์ปค์ง„๋‹ค๋ฉด, ์ด๋Š” ์ƒํƒœ ๊ด€๋ฆฌ(managing state), ๋ฐ์ดํ„ฐ ํŽ˜์นญ(fetching data), ๋ณต์žกํ•œ JSX ๋ Œ๋”๋ง ๋“ฑ ๋„ˆ๋ฌด ๋งŽ์€ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‹ ํ˜ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. ๋ชจ๋“  ๊ฒƒ์„ ํ•œ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ํ”ํ•œ ์„ค๊ณ„ ํ•จ์ •์ž…๋‹ˆ๋‹ค [5]. -* **React์—์„œ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•:** - * **์ปดํฌ๋„ŒํŠธ ๋ถ„ํ• :** ๊ฑฐ๋Œ€ํ•œ ๋กœ์ง์„ ๊ฐ€์ง„ ํฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋” ์ž‘๊ณ  ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, `UserDashboard` ์ปดํฌ๋„ŒํŠธ๋ฅผ `UserProfile`, `UserPosts`, `UserNotifications`๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [3, 4]. - * **ํ•จ์ˆ˜ ์ถ”์ถœ:** ํŠน์ • ์ž‘์—…์„ ๋ณ„๋„์˜ ๋ฒ”์šฉ ํ•จ์ˆ˜(general-purpose functions)๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค [3]. - * **Custom Hook ํ™œ์šฉ:** ์ปดํฌ๋„ŒํŠธ ๋‚ด์— ํ˜ผ์žฌ๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์„ ์‚ฌ์šฉ์ž ์ •์˜ ํ›…(custom hooks)์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค [3]. ๋ฒ”์šฉ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ณต์œ  ํด๋”์—, ๊ธฐ๋Šฅ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [5]. -* **๊ธฐ๋Œ€ ํšจ๊ณผ:** ์ฝ”๋“œ๋ฅผ ์ž‘๊ณ  ์ง‘์ค‘๋œ ํ˜•ํƒœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ(testability)๊ณผ ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค [4]. ๋˜ํ•œ, ๋‹จ์ผ ๋ชฉ์ ์„ ๊ฐ€์ง„ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฌ๋Ÿฌ ์˜์—ญ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค [5]. - -## โš–๏ธ Trade-offs & Caveats -์†Œ์Šค์— ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP) ์ž์ฒด์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ถ€์ž‘์šฉ์ด๋‚˜ ์ œ์•ฝ ์‚ฌํ•ญ(Trade-offs)์— ๋Œ€ํ•œ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ SRP๊ฐ€ ํฌํ•จ๋œ ์ „์ฒด SOLID ์›์น™์— ๋Œ€ํ•ด์„œ๋Š”, ์ฝ”๋“œ๋ฅผ ๊ณ ๋„๋กœ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ณ  ์กฐ์ง์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์ง€๋งŒ ์ดˆ๊ธฐ์—๋Š” ์ ์šฉํ•˜๊ธฐ ๋ณต์žกํ•˜๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ๋‹ค(May initially feel complex)๋Š” ์ ์ด ์ œ์•ฝ ์‚ฌํ•ญ์œผ๋กœ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค [6]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๋ฐ ๊ธฐ๋ฐ˜ ์›์น™] -- [[SOLID Principles]] - - ์—ฐ๊ฒฐ ์ด์œ : SRP๋Š” SOLID๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” 5๊ฐ€์ง€ ์„ค๊ณ„ ์›์น™ ์ค‘ ์ฒซ ๋ฒˆ์งธ ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค [7]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‹œ์ž‘๋œ ์ด ์›์น™๋“ค์ด ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐํ™”์™€ ํ™•์žฅ์„ฑ์— ์–ด๋–ป๊ฒŒ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ธฐ์—ฌํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8]. -- [[Clean Code]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์›์น™์œผ๋กœ, ์ฝ”๋“œ๋ฅผ ๋ช…ํ™•ํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์ž‘์„ฑํ•  ๊ฒƒ์„ ๊ฐ•์กฐํ•˜๋Š” SRP์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค [2, 9]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ์ฑ…์ž„์„ ์ง€ํ‚ค๋ฉด์„œ๋„ ์–ด๋–ป๊ฒŒ ๋ณ€์ˆ˜๋ช…, ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๋“ฑ์„ ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋‹ค๋“ฌ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์‹ค์ฒœ์  ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9]. - -#### [React ํŒจํ„ด ๋ฐ ํ™œ์šฉ ๋„๊ตฌ] -- [[Custom Hooks]] - - ์—ฐ๊ฒฐ ์ด์œ : React์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ€์งˆ ๋•Œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์„ UI๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ํ•ต์‹ฌ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค [3]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: SRP๋ฅผ ์‹ค์ œ React ํ™˜๊ฒฝ์—์„œ ์ ์šฉํ•˜์—ฌ UI ๋ Œ๋”๋ง ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ตฌํ˜„ ํŒจํ„ด์„ ๊นŠ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. -- [[Component Composition]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ•˜๋‚˜์˜ ํฐ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ์ฑ…์ž„์„ ๊ฐ€์ง„ ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [4, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: OCP(๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)์™€ SRP๋ฅผ ๋™์‹œ์— ๋งŒ์กฑ์‹œํ‚ค๋ฉฐ, ๋ ˆ๊ณ  ๋ธ”๋ก์ฒ˜๋Ÿผ ์œ ์—ฐํ•˜๊ฒŒ UI๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 4]. - -### Deeper Research Questions - -- ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€(์˜ˆ: 300์ค„ ์ดˆ๊ณผ) ํŒ๋‹จํ•  ๋•Œ, '๋‹จ์ผ ์ฑ…์ž„'์˜ ๊ฒฝ๊ณ„(Boundary)๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๊ณ  ํ‰๊ฐ€ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- React ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Custom Hook์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์™ธ์—, ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Zustand, Context API ๋“ฑ)๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด SRP ๊ด€์ ์—์„œ ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€? -- Feature-Sliced Design (FSD)์™€ ๊ฐ™์€ ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ SRP๋Š” ๊ฐ Layer(๊ณต์œ , ์—”ํ‹ฐํ‹ฐ, ๊ธฐ๋Šฅ ๋“ฑ)์— ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋ฉฐ, ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”๊ฐ€? -- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฑฐ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ SRP ์›์น™์— ๋”ฐ๋ผ ๋ถ„๋ฆฌํ•  ๋•Œ, ํšŒ๊ท€(Regression)๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์•ˆ์ „ํ•œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํ…Œ์ŠคํŠธ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- SRP๋ฅผ ๊ทน๋‹จ์ ์œผ๋กœ ์ ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์™€ ํ›…์„ ๋„ˆ๋ฌด ์ž˜๊ฒŒ ๋ถ„ํ•ดํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ๊ตฌ์กฐ ๋ฐ Props ์ „๋‹ฌ์˜ ๋ณต์žก์„ฑ์€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๊ธธ์–ด์ง€๊ฑฐ๋‚˜(์˜ˆ: 300์ค„ ์ดˆ๊ณผ) ๋กœ์ง์ด ๋ณต์žกํ•ด์ง€๋ฉด, ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์„ Custom Hooks๋กœ ์ถ”์ถœํ•˜๊ณ  UI ๋ Œ๋”๋ง์„ ์ชผ๊ฐœ์–ด ๋‹จ์ผ ์ฑ…์ž„๋งŒ ๊ฐ–๋„๋ก ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [3, 4]. -- **System Design:** ํด๋” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋‘์ง€ ์•Š๊ณ , ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋Š” ๊ณต์œ (Shared) ํด๋”์—, ํŠน์ • ๊ธฐ๋Šฅ์— ์ข…์†๋œ ์ปดํฌ๋„ŒํŠธ๋Š” Feature ๋””๋ ‰ํ† ๋ฆฌ์— ๋ช…ํ™•ํžˆ ๊ฒฉ๋ฆฌํ•˜์—ฌ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค [5]. -- **Operation / Maintenance:** ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฝ”๋“œ๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋”ฐ๋ผ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค๋ฉด, ๋ฌธ์ œ๊ฐ€ UI ๋ Œ๋”๋ง์— ์žˆ๋Š”์ง€ ์ƒํƒœ ๊ด€๋ฆฌ์— ์žˆ๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์‰ฌ์›Œ์ ธ ์œ ์ง€๋ณด์ˆ˜ ์†๋„์™€ ์ •ํ™•์„ฑ์„ ํฌ๊ฒŒ ๋†’์ž…๋‹ˆ๋‹ค [4-6]. -- **Learning Path:** React์˜ ๊ธฐ๋ณธ ๊ฐœ๋…(State, Props, JSX)์„ ์ตํžŒ ํ›„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Clean Code์™€ SOLID ์›์น™(ํŠนํžˆ SRP)์„ ํ•™์Šตํ•˜๊ณ  ์ด๋ฅผ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์— ์ ์šฉํ•ด ๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค [7-9]. -- **My Project Relevance:** ๊ฑฐ๋Œ€ํ•œ ๋Œ€์‹œ๋ณด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ์„ ๊ตฌ์ถ•ํ•  ๋•Œ, ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋‚˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์งœ์ง€ ์•Š๊ณ  `UserProfile`, `UserPosts`, `UserNotifications` ๋“ฑ ๋…๋ฆฝ์ ์ธ ๋ชฉ์ ์„ ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋“ค๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ํ…Œ์ŠคํŠธ์™€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [4]. - -### Adjacent Topics - -- [[DRY (Don't Repeat Yourself)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ฝ”๋“œ๋ฅผ ๋‹จ์ผ ์ฑ…์ž„์œผ๋กœ ์ชผ๊ฐ  ํ›„, ์ค‘๋ณต๋˜๋Š” ๋กœ์ง(์˜ˆ: ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋ฐฉ์‹ ๋“ฑ)์„ ์‹๋ณ„ํ•˜๊ณ  ์ด๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋‚˜ ํ›…์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ์ตœ์ ํ™” ๋ฐฉํ–ฅ์œผ๋กœ ์ดํ•ด๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 10]. -- [[KISS (Keep It Simple, Stupid)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ, ์ง€๋‚˜์นœ ์ถ”์ƒํ™”๋กœ ์ธํ•ด ๊ตฌ์กฐ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•ด์ง€์ง€ ์•Š๋„๋ก(๋‹จ์ˆœํ•จ์„ ์œ ์ง€ํ•˜๋„๋ก) ๋•๋Š” ๋ณด์™„์ ์ธ ์„ค๊ณ„ ์›์น™์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 10]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/Trunk-based Development.md b/00_Raw/Trunk-based Development.md deleted file mode 100644 index 50d564cc..00000000 --- a/00_Raw/Trunk-based Development.md +++ /dev/null @@ -1,56 +0,0 @@ -# [[Trunk-based Development]] - -## ๐Ÿ“Œ Brief Summary -Trunk-based Development๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์งง์€ ์ฃผ๊ธฐ๋กœ ์ž‘์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ค‘์•™์˜ ์ฃผ ๋ธŒ๋žœ์น˜(์ฃผ๋กœ `main` ๋ธŒ๋žœ์น˜)์— ์ง€์†์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ธŒ๋žœ์นญ ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ์ „๋žต์€ ์ฝ”๋“œ์˜ ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ๋น ๋ฅธ ํ†ตํ•ฉ(fast integration)์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [3, 4]. ์ฃผ๋กœ ๊ฐ•๋ ฅํ•œ ์ง€์†์  ํ†ตํ•ฉ(CI) ํ™˜๊ฒฝ์„ ๊ฐ–์ถ˜ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ ํŒ€์—๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด๋ฉฐ, Git Flow์™€ ๊ฐ™์€ ๋ฌด๊ฑฐ์šด ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ”ผํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [5]. - -## ๐Ÿ“– Core Content -- **ํ•ต์‹ฌ ์›์น™**: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜(`main`)๋Š” ์ง์ ‘์ ์ธ ํ‘ธ์‹œ(direct push)๊ฐ€ ๊ธˆ์ง€๋˜๋ฉฐ, ์–ธ์ œ๋‚˜ ์•ˆ์ •์ ์ด๊ณ  ์ฆ‰์‹œ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(always stable, deployable)๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 2, 6]. -- **๋‹จ๊ธฐ ๋ธŒ๋žœ์น˜ ์šด์˜ (Short-lived branches)**: ๊ฐ ์ž‘์—…(Task) ๋‹น ํ•˜๋‚˜์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ์•„์ฃผ ์งง์€ ์ฃผ๊ธฐ(์ˆ˜์ผ ๋‚ด)์— ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 2, 4]. -- **๋น ๋ฅธ ํ†ตํ•ฉ ๋ฐ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ**: ๊ฐœ๋ฐœ์ž๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž‘๊ฒŒ ๋‚˜๋ˆ„์–ด ๋น ๋ฅด๊ฒŒ ์ปค๋ฐ‹ํ•˜๋ฉฐ, ์•„์ง ์™„์„ฑ๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์€ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature flags)๋ฅผ ํ™œ์šฉํ•ด ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๋”๋ผ๋„ ์šด์˜ ํ™˜๊ฒฝ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค [4]. -- **ํ’ˆ์งˆ ๋ณด์ฆ (PR ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ)**: ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์—๋Š” ํ•ญ์ƒ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ์—ด์–ด์•ผ ํ•˜๋ฉฐ, ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ๋™๋ฃŒ ๋ฆฌ๋ทฐ(Peer Review)์™€ CI(์ง€์†์  ํ†ตํ•ฉ) ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๊ฐ€ ํ•„์ˆ˜ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค [2, 7]. -- **ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ**: ๊น”๋”ํ•œ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ์ด ์™„๋ฃŒ๋œ ํ›„์—๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•˜์—ฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค [2, 7]. - -## โš–๏ธ Trade-offs & Caveats -์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ฌด๊ฑฐ์šด ํ”„๋กœ์„ธ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ , ์žฅ๊ธฐ ์‹คํ–‰ ๋ธŒ๋žœ์น˜(long-running branches)์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์‹ฌ๊ฐํ•œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [3, 8, 9]. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ด์ ์—๋Š” ๋ถ„๋ช…ํ•œ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€๊ฐ€ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋จผ์ €, ํŒ€์›๋“ค ๊ฐ„์˜ ๋งค์šฐ ๊ธด๋ฐ€ํ•œ ์กฐ์œจ(coordination)๊ณผ ๋†’์€ ๊ทœ์œจ์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [3]. ๋‘ ๋ฒˆ์งธ๋กœ, ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์™€ CI ์ธํ”„๋ผ๊ฐ€ ํ•„์ˆ˜์ ์ด๋ฉฐ, ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ดˆ๋ณด์ž๋ณด๋‹ค๋Š” ์ˆ™๋ จ๋œ ํŒ€(very experienced teams)์—๊ฒŒ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [5]. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฏธ์™„์„ฑ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature flags)๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ๋ณต์žก์„ฑ๊ณผ, ์ด๋ฅผ ๋’ท๋ฐ›์นจํ•  ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๊ฐ•์ œ๋œ๋‹ค๋Š” ๊ธฐ์ˆ ์  ์ œ์•ฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค [4]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ ํ†ตํ•ฉ ์•„ํ‚คํ…์ฒ˜] -- [[Continuous Integration (CI)]] - - ์—ฐ๊ฒฐ ์ด์œ : Trunk-based Development์—์„œ ์งง์€ ์ฃผ๊ธฐ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•  ๋•Œ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ ์•ˆ์ •์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์ „์ œ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค [2, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•ด์•ผ๋งŒ ๋ณ‘ํ•ฉ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ณผ์ •์ด ์–ด๋–ป๊ฒŒ ๋นŒ๋“œ ์‹คํŒจ์™€ ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ์ฐจ๋‹จํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [๊ตฌํ˜„ ๋ฐ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ] -- [[Feature Flags]] - - ์—ฐ๊ฒฐ ์ด์œ : Trunk-based Development์—์„œ ์ฝ”๋“œ ํ†ตํ•ฉ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด, ์•„์ง ์™„์„ฑ๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ์˜ ๋ฐฐํฌ(Deployment)์™€ ๊ธฐ๋Šฅ์˜ ๋ฆด๋ฆฌ์Šค(Release)๋ฅผ ๊ธฐ์ˆ ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Squash Merge]] - - ์—ฐ๊ฒฐ ์ด์œ : ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ž์ฃผ ๋ณ‘ํ•ฉํ•จ์— ๋”ฐ๋ผ ์ง€์ €๋ถ„ํ•ด์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ํ•˜๋‚˜์˜ ์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹์œผ๋กœ ์••์ถ•ํ•˜์—ฌ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ณ‘ํ•ฉ ์ „๋žต์ž…๋‹ˆ๋‹ค [2, 7, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์žฆ์€ ํ†ตํ•ฉ ์ƒํ™ฉ์—์„œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํžˆ์Šคํ† ๋ฆฌ ์ถ”์ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” Git ์ด๋ ฅ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions -- Feature Branch ๊ธฐ๋ฐ˜ ์ „๋žต์—์„œ Trunk-based Development๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ, ๊ฐœ๋ฐœํŒ€์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™”์™€ CI ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? -- ๋ฏธ์™„์„ฑ ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature flags)๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„(Technical debt)๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒญ์‚ฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- Trunk-based Development๋ฅผ ์ ์šฉํ•  ๋•Œ, ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์„ ํ†ตํ•ด ๊น”๋”ํ•œ ๋ฉ”์ธ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐœ๋ณ„ ์ž‘์—… ๋‹จ์œ„์˜ ์ƒ์„ธํ•œ ๋””๋ฒ„๊น… ์ถ”์ ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ ์‚ฌ์ด์˜ ๊ท ํ˜•์€ ์–ด๋–ป๊ฒŒ ๋งž์ถฐ์•ผ ํ•˜๋Š”๊ฐ€? -- ๊ฒฝํ—˜์ด ์ ์€ ํŒ€(์ดˆ๋ณด ํŒ€)์ด Trunk-based Development๋ฅผ ๋„์ž…ํ–ˆ์„ ๋•Œ ๊ฒช์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์น˜๋ช…์ ์ธ ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„์  ๋„์ž… ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋‚˜ ๋Œ€ํ˜• ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ Trunk-based Development๊ฐ€ Git Flow ๋ฐฉ์‹์— ๋น„ํ•ด ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„์ ์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ์ž‘์—…์„ ๋งค์šฐ ์ž‘์€ ๋‹จ์œ„ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ(atomic commits)์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•ด ๋ฏธ์™„์„ฑ ์ฝ”๋“œ๋ผ๋„ ์ง€์†์ ์œผ๋กœ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [4, 11]. -- **System Design:** ์ฝ”๋“œ๊ฐ€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ๋˜๊ธฐ ์ „ ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฐ•๋ ฅํ•œ CI(์ง€์†์  ํ†ตํ•ฉ) ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™(Branch protection)์„ ์‹œ์Šคํ…œ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ์—ฐ๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5, 7]. -- **Operation / Maintenance:** '๋ณ‘ํ•ฉ ํ›„ ๋ธŒ๋žœ์น˜ ์ž๋™ ์‚ญ์ œ(Auto-delete merged branches)' ์„ค์ •์„ ์ผœ๊ณ , ์ง์ ‘ ํ‘ธ์‹œ(direct push)๋ฅผ ๊ธˆ์ง€ํ•˜์—ฌ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๊น”๋”ํ•œ ์ƒํƒœ๋กœ ์œ ์ง€๋ณด์ˆ˜ํ•ฉ๋‹ˆ๋‹ค [7, 11]. -- **Learning Path:** ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํ•œ Feature Branch ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด ์ž‘์€ ์ปค๋ฐ‹๊ณผ PR ๊ณผ์ •์„ ์ตํžˆ๊ณ , CI๊ฐ€ ๊ฐ•ํ™”๋˜๊ณ  ๋ธŒ๋žœ์น˜ ์ˆ˜๋ช…์„ ์ˆ˜์ผ ๋‚ด๋กœ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์‹ ์ด ๋“ค ๋•Œ Trunk-based ์ „๋žต์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ์ด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [4, 5]. -- **My Project Relevance:** ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. - -### Adjacent Topics - -- [[Git Flow]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: Trunk-based Development์™€ ๋Œ€๋น„๋˜๋Š” ๋ฌด๊ฒ๊ณ  ๋ณต์žกํ•œ ๋ธŒ๋žœ์นญ ์ „๋žต์œผ๋กœ, ์™œ ์†Œ๊ทœ๋ชจ ํŒ€์ด๋‚˜ ๋น ๋ฅธ ๋ฐฐํฌ๋ฅผ ์›ํ•˜๋Š” ํŒ€์ด ์ด ์ „๋žต ๋Œ€์‹  Trunk-based๋ฅผ ์„ ํƒํ•˜๋Š”์ง€ ๋‘ ์ „๋žต ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด์™€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋น„๊ตํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 5]. -- [[Feature Branch Workflow]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์†Œ๊ทœ๋ชจ ํŒ€์— ๊ฐ€์žฅ ์นœํ™”์ ์ธ ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ, ์ด ์ „๋žต์˜ ๋ธŒ๋žœ์น˜ ์ˆ˜๋ช…์„ ๊ทน๋‹จ์ ์œผ๋กœ ์ค„์˜€์„ ๋•Œ ์–ด๋–ป๊ฒŒ Trunk-based Development๋กœ ์ง„ํ™”ํ•˜๊ฒŒ ๋˜๋Š”์ง€ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 12]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/YAGNI.md b/00_Raw/YAGNI.md deleted file mode 100644 index 3ec47b1a..00000000 --- a/00_Raw/YAGNI.md +++ /dev/null @@ -1,52 +0,0 @@ -# [[YAGNI]] - -## ๐Ÿ“Œ Brief Summary -YAGNI๋Š” "You Aren't Gonna Need It(๋‹น์‹ ์€ ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค)"์˜ ์•ฝ์ž๋กœ, ๋ฏธ๋ž˜์— ํ•„์š”ํ• ์ง€๋„ ๋ชจ๋ฅด๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ๋ง๋ผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™์ž…๋‹ˆ๋‹ค [1, 2]. ๊ฐœ๋ฐœ์ž๋Š” ์˜ค์ง ํ˜„์žฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ์—๋งŒ ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋ฉฐ, ๋‚˜์ค‘์— ์‚ฌ์šฉ๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์ „์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 3]. ์ด ์›์น™์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์‹œ๊ฐ„ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ์ฝ”๋“œ์˜ ์–‘๊ณผ ๋ณต์žก์„ฑ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 4]. - -## ๐Ÿ“– Core Content -* **ํ•ต์‹ฌ ๊ฐœ๋… ๋ฐ ๋ชฉ์ **: YAGNI๋Š” ํ˜„์žฌ ๋ช…ํ™•ํžˆ ์š”๊ตฌ๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋„๋ก ๋•๋Š” ์‹ค์šฉ์ฃผ์˜์  ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [3]. ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•ด ์„ ์ œ์ ์œผ๋กœ ์ž‘์„ฑํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ ๊ฒฐ๊ตญ ์‹ค์ œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํ™•๋ฅ ์ด ๋†’์œผ๋ฉฐ, ์ถ”ํ›„ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์• ์จ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์•„์˜ˆ ๋ถˆํ•„์š”ํ•ด์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค [3]. -* **React ๋ฐ ํ”„๋ก ํŠธ์—”๋“œ ์ƒํƒœ๊ณ„์—์„œ์˜ ์ ์šฉ**: React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ํ˜„์žฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹น์žฅ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ(props)๋งŒ์„ ๋จผ์ € ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [5]. ํ™•์žฅ์„ฑ์€ ์ถ”ํ›„ ์‹ค์ œ๋กœ ๊ทธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด์กŒ์„ ๋•Œ ๊ณ ๋ คํ•˜์—ฌ ๋ง๋ถ™์ด๋Š” ํ˜•ํƒœ๋ฅผ ์ทจํ•ฉ๋‹ˆ๋‹ค [5]. -* **์ ์šฉ ํ™˜๊ฒฝ**: ํŠนํžˆ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋น ๋ฅด๊ณ  ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์• ์ž์ผ(Agile) ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋‚˜ ์Šคํƒ€ํŠธ์—… ํ”„๋กœ์ ํŠธ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์›์น™์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค [1, 5]. ํ˜„์žฌ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•จ์œผ๋กœ์จ ํ”„๋กœ์ ํŠธ์˜ ๋ฐฉํ–ฅ ์ „ํ™˜ ์‹œ ๋ถˆํ•„์š”ํ•œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๊ฐ€ ๋ฐœ๋ชฉ์„ ์žก๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. - -## โš–๏ธ Trade-offs & Caveats -YAGNI ์›์น™์„ ์ค€์ˆ˜ํ•˜๋ฉด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋‚ญ๋น„๋˜๋Š” ๋…ธ๋ ฅ(wasted effort)์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ์‹œ์Šคํ…œ ๋‚ด์— ๋ฐฉ์น˜๋˜๋Š” ๋ฐ๋“œ ์ฝ”๋“œ(dead code)๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ•๋ ฅํ•œ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [1, 4]. - -ํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€(Trade-off)๋กœ **๋ฏธ๋ž˜์˜ ํ™•์žฅ์„ฑ(future scalability)์„ ๊ฐ„๊ณผํ•  ์œ„ํ—˜**์ด ์žˆ์Šต๋‹ˆ๋‹ค [4]. ๋‹น์žฅ์˜ ์š”๊ตฌ์‚ฌํ•ญ์—๋งŒ ์ง€๋‚˜์น˜๊ฒŒ ์ดˆ์ ์„ ๋งž์ถ”๋‹ค ๋ณด๋ฉด, ์ถ”ํ›„ ์‹œ์Šคํ…œ์„ ๋Œ€๊ทœ๋ชจ๋กœ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๊ทผ๋ณธ์ ์ธ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ ๊ธฐ์กด ๊ตฌ์กฐ๊ฐ€ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜์ง€ ๋ชปํ•˜์—ฌ ์˜คํžˆ๋ ค ๋” ํฐ ๋ฆฌํŒฉํ† ๋ง ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์•ฝ ์‚ฌํ•ญ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [4]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™ (Software Engineering Principles)] -- [[KISS]] - - ์—ฐ๊ฒฐ ์ด์œ : "Keep It Simple, Stupid"์˜ ์•ฝ์ž๋กœ, ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ๋ณต์žก์„ฑ์„ ํ”ผํ•˜๋ผ๋Š” ์›์น™์ด๋ฏ€๋กœ YAGNI์™€ ๋ฐฉํ–ฅ์„ฑ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค [2, 6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: YAGNI๊ฐ€ ๊ธฐ๋Šฅ์˜ '์ถ”๊ฐ€ ์—ฌ๋ถ€(๊ฐœ๋ฐœํ•  ๊ฒƒ์ธ๊ฐ€ ๋ง ๊ฒƒ์ธ๊ฐ€)'๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด, KISS๋Š” ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ๊ฒฐ์ •๋œ ๊ธฐ๋Šฅ์„ '์–ผ๋งˆ๋‚˜ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€'๋ฅผ ๊ทœ์ •ํ•˜์—ฌ ํด๋ฆฐ ์ฝ”๋“œ ์ž‘์„ฑ์„ ๋•์Šต๋‹ˆ๋‹ค [2]. -- [[DRY]] - - ์—ฐ๊ฒฐ ์ด์œ : "Don't Repeat Yourself"์˜ ์•ฝ์ž๋กœ, YAGNI, KISS์™€ ํ•จ๊ป˜ ๋ฐ˜๋ณต์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ๋˜ ๋‹ค๋ฅธ ํ•ต์‹ฌ ์›์น™์œผ๋กœ ๋ฌถ์—ฌ ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค [2, 6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ถ”์ƒํ™”(Custom Hooks ๋“ฑ)๋ฅผ ๋„์ž…ํ•  ๋•Œ, ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”(Over-engineering)๋กœ ์ด์–ด์ง€์ง€ ์•Š๋„๋ก YAGNI ์›์น™๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ์ž‘์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 6]. -- [[SOLID]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ 5๊ฐ€์ง€ ์›์น™ ๋ชจ์Œ์œผ๋กœ, React ํ™˜๊ฒฝ์—์„œ๋„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค [7, 8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์—์„œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์ด๋‚˜ ๊ฐœ๋ฐฉ/ํ์‡„ ์›์น™(OCP)์„ ์ง€ํ‚ค๋Š” ๋ผˆ๋Œ€๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ๋„, YAGNI๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค ํ™•์žฅ์„ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ท ํ˜•์ ์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 9]. - -### Deeper Research Questions -- YAGNI ์›์น™์„ ์ ์šฉํ•  ๋•Œ, '๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์œ ์—ฐํ•œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„'์™€ ๋ถˆํ•„์š”ํ•œ '์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)' ์‚ฌ์ด์˜ ๊ฒฝ๊ณ„๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ์• ์ž์ผ(Agile) ํ™˜๊ฒฝ์—์„œ YAGNI ์›์น™์ด ์žฆ์€ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ์˜ ๋Œ€์ฒ˜ ๋Šฅ๋ ฅ์„ ๋ณธ์งˆ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๊ฐ€? -- ๋ฏธ๋ž˜์˜ ํ™•์žฅ์„ฑ์„ ํฌ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” YAGNI์˜ ๋‹จ์ (Trade-off)์„ ๋ณด์™„ํ•˜๋ฉด์„œ๋„ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ๋ฌด์—‡์ธ๊ฐ€? -- React ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ์‹œ YAGNI ์›์น™์„ ๊ณ ์ˆ˜ํ•˜์—ฌ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ฐ€, ์ถ”ํ›„ ๋Œ€๊ทœ๋ชจ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์–ด ์ „๋ฉด์ ์ธ ๋ฆฌํŒฉํ† ๋ง์ด ๋ถˆ๊ฐ€ํ”ผํ•ด์ง€๋Š” ์ƒํ™ฉ์„ ์™„ํ™”ํ•  ๋ฐฉ๋ฒ•์€ ์—†๋Š”๊ฐ€? -- "๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ•ด๊ฒฐ์ฑ…"์„ ์š”๊ตฌํ•˜๋Š” KISS ์›์น™๊ณผ "๋ฏธ๋ž˜์˜ ๊ธฐ๋Šฅ ๋ฐฐ์ œ"๋ฅผ ์š”๊ตฌํ•˜๋Š” YAGNI ์›์น™์ด ์‹ค๋ฌด ์ฝ”๋“œ ๊ตฌํ˜„ ์ค‘ ์„œ๋กœ ์ƒ์ถฉํ•˜๊ฑฐ๋‚˜ ๋ชจ์ˆœ์„ ์ผ์œผํ‚ค๋Š” ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** React ๋“ฑ ํ”„๋ก ํŠธ์—”๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ๋‹น์žฅ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ props ์†์„ฑ์„ ์˜ˆ์ƒํ•˜์—ฌ ์„ ์–ธํ•ด๋‘๊ฑฐ๋‚˜ ์“ฐ์ด์ง€ ์•Š์„ ํ—ฌํผ ํ•จ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•จ์œผ๋กœ์จ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [5]. -- **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์‹œ ํ˜„์žฌ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ(Business Needs)์— ์ง๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ถ€๊ฐ€์ ์ธ ์‹œ์Šคํ…œ ๋ ˆ์ด์–ด๋‚˜ ๋ณต์žกํ•œ ๋””์ž์ธ ํŒจํ„ด์˜ ๋„์ž…์„ ๋ณด๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. -- **Operation / Maintenance:** ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•ด ๋‚จ๊ฒจ๋‘” ๋ฏธ์‚ฌ์šฉ ์ฝ”๋“œ(dead code)๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์œ ์ง€๋ณด์ˆ˜ ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒŒ์•…ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•  ์ฝ”๋“œ์˜ ์–‘์ด ์ค„์–ด๋“ค์–ด ์šด์˜ ํšจ์œจ์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค [1]. -- **Learning Path:** ํด๋ฆฐ ์ฝ”๋“œ(Clean Code)์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ง€๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ์›์น™(SOLID, DRY, KISS)์„ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹ค์šฉ์ฃผ์˜์  ๊ฐœ๋ฐœ ๋งˆ์ธ๋“œ์…‹์„ ๊ฐ–์ถ”๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ํ•จ๊ป˜ ํ•™์Šต๋ฉ๋‹ˆ๋‹ค [7, 10]. -- **My Project Relevance:** ๊ธฐํš์ด ์ˆ˜์‹œ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ์Šคํƒ€ํŠธ์—… ํ”„๋กœ์ ํŠธ๋‚˜ MVP(Minimum Viable Product) ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋Š” ๋ฐ ์ง์ ‘์ ์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [5]. - -### Adjacent Topics -- [[Agile Development]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: YAGNI ์›์น™์ด ์™œ ์• ์ž์ผ์˜ ์งง์€ ์Šคํ”„๋ฆฐํŠธ ๋ฐ ๋ฐ˜๋ณต์  ๊ฐœ๋ฐœ ์ฃผ๊ธฐ์™€ ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š”์ง€, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐ ๊ฐœ๋ฐœ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€์ ์—์„œ ์ดํ•ด๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Clean Code]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: YAGNI, DRY, KISS์™€ ๊ฐ™์€ ์›์น™๋“ค์ด ๊ถ๊ทน์ ์œผ๋กœ ๊ฐ€๋…์„ฑ ๋†’๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฒ ์ด์Šค(Clean Code)๋ฅผ ์–ด๋–ป๊ฒŒ ์™„์„ฑํ•˜๋Š”์ง€ ํ†ตํ•ฉ์ ์ธ ๊ด€์ ์œผ๋กœ ํ™•์žฅํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜.md b/00_Raw/๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜.md deleted file mode 100644 index 42133bab..00000000 --- a/00_Raw/๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜.md +++ /dev/null @@ -1,66 +0,0 @@ -# [[๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜]] - -## ๐Ÿ“Œ Brief Summary -๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(๋ฆฌํŒฉํ† ๋ง)์€ ์˜ค๋ž˜๋œ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•„ํ‚คํ…์ฒ˜, ์ƒํƒœ ๊ด€๋ฆฌ, ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๋“ฑ์„ ์ตœ์‹  ํ‘œ์ค€๊ณผ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค์— ๋งž๊ฒŒ ๊ฐœ์„ ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ๊ณผ์ •์€ ๋‹จ์ˆœํžˆ ๊ตฌ์‹ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•œ ์•ˆ์ •์„ฑ ํ™•๋ณด, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•จ์ˆ˜ํ˜•/ํ›…(Hook)์œผ๋กœ์˜ ์ „ํ™˜, ๊ทธ๋ฆฌ๊ณ  ์ ์ง„์ ์ธ ์•„ํ‚คํ…์ฒ˜ ๊ฐœํŽธ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [2, 3]. ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ๋†’์—ฌ ๋ˆ„์ ๋œ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [1, 4]. - -## ๐Ÿ“– Core Content -* **๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค€๋น„ ๋ฐ ๊ธฐ๋ณธ ์›์น™**: - ๋ฆฌํŒฉํ† ๋ง์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ๊ฐ€์žฅ ๋จผ์ € ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์€ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๋Š” ์œ ๋‹› ํ…Œ์ŠคํŠธ(Unit Test)๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [3, 5, 6]. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งค์šฐ ์ž‘๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„ ์ˆ˜๋„ ์žˆ์œผ๋‚˜ [7], ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ „๋ฉด ์žฌ์ž‘์„ฑ(Rewrite)๋ณด๋‹ค๋Š” ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” "๋ฆฌํŒฉํ† ๋ง(Refactor, do not rewrite)" ์ฒ ํ•™์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [1]. -* **์ปดํฌ๋„ŒํŠธ ๋ฐ ์–ธ์–ด ํ˜„๋Œ€ํ™”**: - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JS)๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ผ๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TS)๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ •์  ํƒ€์ดํ•‘์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [2, 8]. ๋˜ํ•œ, ๋ ˆ๊ฑฐ์‹œ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks)์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ผ์ดํ”„์‚ฌ์ดํด์— ๋ฌถ์—ฌ ์žˆ๋˜ ๋ถˆํ•„์š”ํ•œ `useEffect` ์‚ฌ์šฉ์„ ์‹๋ณ„ํ•˜๊ณ  ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. -* **์ƒํƒœ ๊ด€๋ฆฌ(State Management) ๋ฆฌํŒฉํ† ๋ง**: - ๊ณผ๊ฑฐ์˜ ๋ฐฉ๋Œ€ํ•œ Redux ์Šคํ† ์–ด๋‚˜ ๋น„ํšจ์œจ์ ์ธ Context API ์‚ฌ์šฉ์„ ๋ชฉ์ ์— ๋งž๊ฒŒ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2, 9, 10]. ์„œ๋ฒ„ ์ƒํƒœ(API ๋ฐ์ดํ„ฐ)๋Š” TanStack Query์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ณ , ์ „์—ญ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋Š” Zustand๋‚˜ Context๋กœ ๋ถ„๋ฆฌํ•˜๋ฉฐ, ์ง€์—ญ ์ƒํƒœ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๋กœ ๊ตญํ•œ์‹œํ‚ค๋Š” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [2]. ์ด ๊ณผ์ • ์—ญ์‹œ ํ•œ ๋ฒˆ์— ๋ณ€๊ฒฝํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋‹จ์ผ ์Šคํ† ์–ด ๋‹จ์œ„(์˜ˆ: ์•Œ๋ฆผ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ฒดํฌ์•„์›ƒ ํ”Œ๋กœ์šฐ๋กœ ์ด๋™)๋กœ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค [1]. -* **์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์กฐ ๊ฐœํŽธ**: - ๊ธฐ์กด์— ํŒŒ์ผ ํƒ€์ž…๋ณ„(์˜ˆ: components, hooks)๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋˜ ๊ตฌ์กฐ๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์ด๋‚˜ ๊ธฐ๋Šฅ๋ณ„(Feature-based) ๊ตฌ์กฐ๋กœ ๊ฐœํŽธํ•ฉ๋‹ˆ๋‹ค [11, 12]. ๋” ๋‚˜์•„๊ฐ€ Feature-Sliced Design(FSD) ๊ฐ™์€ ๊ณ„์ธต์  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜์—ฌ ๊ฐ ๋ชจ๋“ˆ์˜ ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ  ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ์„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค [13, 14]. -* **ํด๋ฆฐ ์ฝ”๋“œ์™€ ์Šคํƒ€์ผ๋ง ์ผ๊ด€์„ฑ ํ™•๋ณด**: - ๋ฐฉ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…(Custom Hooks)์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ ๋ชจ๋“ˆํ™”ํ•ฉ๋‹ˆ๋‹ค [15, 16]. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ CSS ๋ฐฉ์‹(์ธ๋ผ์ธ ์Šคํƒ€์ผ, ์™ธ๋ถ€ CSS, sx ๋“ฑ)์ด ํ˜ผ์žฌ๋˜์–ด ์žˆ๋‹ค๋ฉด ํ•˜๋‚˜๋กœ ํ‘œ์ค€ํ™”ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ๋งž์ถ”๊ณ , ESLint ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ฝ”๋“œ ๋ฆฐํŒ…์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค [6, 17-19]. - -## โš–๏ธ Trade-offs & Caveats -* **์ „๋ฉด ์žฌ์ž‘์„ฑ(Rewrite) vs ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜**: ์ „๋ฉด ์žฌ์ž‘์„ฑ์€ ์ƒˆ๋กœ์šด ์„ค๊ณ„๋กœ ๊นจ๋—ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜, ์‹œ๊ฐ„ ๋น„์šฉ์ด ํฌ๊ณ  ๊ธฐ์กด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ˆ„๋ฝ์ด๋ผ๋Š” ์‹ฌ๊ฐํ•œ ๋ฆฌ์Šคํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [1, 7]. ๋ฐ˜๋ฉด ์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง์€ ๋น„๊ต์  ์•ˆ์ „ํ•˜์ง€๋งŒ, ๊ณผ๋„๊ธฐ ๋™์•ˆ ๋ ˆ๊ฑฐ์‹œ ์ƒํƒœ ๊ด€๋ฆฌ(์˜ˆ: Context API)์™€ ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ด€๋ฆฌ(์˜ˆ: Zustand)๊ฐ€ ๊ณต์กดํ•˜๊ฒŒ ๋˜์–ด ๊ตฌ์กฐ์  ๋ณต์žก์„ฑ์ด ์ผ์‹œ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. -* **ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript) ๋„์ž…์˜ ํ•œ๊ณ„**: JS ์ฝ”๋“œ๋ฅผ TS๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์•ˆ์ •์„ฑ์„ ํฌ๊ฒŒ ๋†’์ด์ง€๋งŒ, ํŒ€์›์˜ ์ˆ™๋ จ๋„์— ๋”ฐ๋ผ ์ธ์ง€์  ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณต์žก์„ฑ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ํŒ€์ด๋ผ๋ฉด ๋ฌด๋ฆฌํ•˜๊ฒŒ ํ•œ ๋ฒˆ์— ์ ์šฉํ•˜๊ธฐ๋ณด๋‹ค ์ ์ง„์  ์ฑ„ํƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [8]. -* **์ถ”์ƒํ™”์˜ ๋ถ€์ž‘์šฉ**: DRY(Don't Repeat Yourself) ์›์น™์„ ๊ทน๋‹จ์ ์œผ๋กœ ์ถ”๊ตฌํ•˜์—ฌ ๊ณตํ†ต ๋กœ์ง์„ ๋ฌด๋ฆฌํ•˜๊ฒŒ ์ถ”์ƒํ™”ํ•˜๋ฉด, ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•ด์ ธ KISS(Keep It Simple, Stupid) ์›์น™์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค [20]. ์ž˜๋ชป ์ถ”์ƒํ™”๋œ ์ฝ”๋“œ๋Š” ์˜คํžˆ๋ ค ํ–ฅํ›„ ๋ณ€๊ฒฝ์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŒจํ„ด์ด ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [20, 21]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Feature-Sliced Design]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ๊ฑฐ์‹œ ๊ตฌ์กฐ์˜ ํŒŒํŽธํ™”๋œ ์ฝ”๋“œ๋“ค์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์žฌ๋ฐฐ์น˜ํ•˜๊ณ  ํ–ฅํ›„ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ ํด๋” ๊ตฌ์กฐ๋กœ ๊ฐœํŽธํ•  ๋•Œ ํ™œ์šฉ๋˜๋Š” ํ˜„๋Œ€์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋ก ์ž…๋‹ˆ๋‹ค [13, 14]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ๋Šฅ, ์—”ํ‹ฐํ‹ฐ, ์œ„์ ฏ ๋“ฑ์œผ๋กœ ๊ณ„์ธต์„ ๋‚˜๋ˆ„๊ณ  ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๋ฐ ๋ช…์‹œ์  Public API๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ์›๋ฆฌ [13, 14, 22]. - -- [[์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Incremental Migration)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์‹คํ–‰ ์ „๋žต์ž…๋‹ˆ๋‹ค [1]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒˆ๋กœ์šด ๊ธฐ์ˆ (์˜ˆ: Zustand)์„ ๋„์ž…ํ•  ๋•Œ ์ „์ฒด๋ฅผ ์žฌ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ์•Œ๋ฆผ ๊ธฐ๋Šฅ ๋“ฑ ๋…๋ฆฝ์ ์ด๊ณ  ์ž‘์€ ์Šคํ† ์–ด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ ์ง„์ ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฆฌ์Šคํฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• [1]. - -#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[์ปค์Šคํ…€ ํ›… (Custom Hooks)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋น„๋Œ€ํ•ด์ง„ ๋ ˆ๊ฑฐ์‹œ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋ Œ๋”๋ง ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ํ•ต์‹ฌ์ ์ธ ๋ฆฌํŒฉํ† ๋ง ๋‹จ์œ„์ž…๋‹ˆ๋‹ค [15, 16]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋กœ์ง(์˜ˆ: `useFetch`, `useForm`)์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐœ๋ณ„ ์œ ๋‹› ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•ด์ง€๊ณ  ์ปดํฌ๋„ŒํŠธ์˜ ์ฑ…์ž„์„ ๋‹จ์ผํ™”ํ•˜๋Š” ์›๋ฆฌ [15]. - -- [[TanStack Query (React Query)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์•ฑ์—์„œ Redux๋‚˜ Context API๋กœ ์–ต์ง€๋กœ ๊ด€๋ฆฌํ•˜๋˜ API ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ด๋‚ด๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [2, 10, 23]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ค„์ด๊ณ  ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ์‹ [10, 23]. - -### Deeper Research Questions -- ๋ ˆ๊ฑฐ์‹œ Context API์—์„œ Zustand ๋“ฑ ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ, ๋‘ ์ƒํƒœ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์ด์Šˆ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- TypeScript๊ฐ€ ์ „ํ˜€ ์ ์šฉ๋˜์ง€ ์•Š์€ ๋ฐฉ๋Œ€ํ•œ JavaScript ์ฝ”๋“œ๋ฒ ์ด์Šค์— TS๋ฅผ ๋„์ž…ํ•  ๋•Œ ๊ฐ€์žฅ ๋ฆฌ์Šคํฌ๊ฐ€ ์ ๊ณ  ํšจ์œจ์ ์ธ ์ ์ง„์  ์ ์šฉ(incremental adoption) ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Œ์„ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด, ์œ ๋‹› ํ…Œ์ŠคํŠธ์™€ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual Regression Testing) ์ค‘ ์–ด๋А ๊ฒƒ์„ ๋จผ์ € ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ธ๊ฐ€? -- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ทฐ(View)์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๋ ˆ๊ฑฐ์‹œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ์ถ”์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜์กด์„ฑ(props, state) ์–ฝํž˜ ๋ฌธ์ œ๋Š” ์–ด๋–ค ํŒจํ„ด์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- Feature-Sliced Design(FSD) ์•„ํ‚คํ…์ฒ˜๋กœ ๊ฐœํŽธ ์‹œ, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ(Feature)์—์„œ ๊ณตํ†ต์œผ๋กœ ๊ต์ฐจ๋˜๋Š” ๊ด€์‹ฌ์‚ฌ(Cross-cutting concerns, ์˜ˆ: ์ธ์ฆ ๋กœ์ง)๋Š” ์–ด๋А ๊ณ„์ธต์— ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ•ด์•ผ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๋ณต์žกํ•œ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ํ›…(`useState`, `useEffect`)์œผ๋กœ 1:1 ๋Œ€์‘ ๋ณ€ํ™˜ํ•˜๊ณ , ๋ Œ๋”๋ง ์ตœ์ ํ™” ๋กœ์ง์„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋”ฉ ์ž‘์—… [2]. -- **System Design:** ๋‹จ์ˆœํžˆ ์ปดํฌ๋„ŒํŠธ, ํ›…, ์Šคํƒ€์ผ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋˜ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ(Auth, Dashboard ๋“ฑ) ๋‹จ์œ„๋กœ ์žฌ์„ค๊ณ„ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ ๊ฐœํŽธ [11, 12]. -- **Operation / Maintenance:** ESLint ๋ฐ Prettier์™€ ํ•จ๊ป˜ Git ํ›…(Husky ๋“ฑ)์„ ๊ตฌ์ถ•ํ•˜์—ฌ, ํ–ฅํ›„ ์ƒˆ๋กœ ์ž‘์„ฑ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ ˆ๊ฑฐ์‹œ ํŒจํ„ด(๊ตฌ์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ, CSS ํ˜ผ์žฌ)์œผ๋กœ ๋˜๋Œ์•„๊ฐ€์ง€ ์•Š๋„๋ก ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ž๋™ํ™”ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ [19, 24]. -- **Learning Path:** ์†Œ๊ทœ๋ชจ ์žฅ๋‚œ๊ฐ(toy) ์•ฑ์—์„œ ๋จผ์ € TypeScript์™€ Custom Hooks ๋ถ„๋ฆฌ๋ฅผ ์—ฐ์Šตํ•œ ๋’ค, ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋ถ€ํ„ฐ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด๊ฐ€๋ฉฐ ์ ์ง„์ ์œผ๋กœ ๊ทœ๋ชจ๋ฅผ ํ‚ค์šฐ๋Š” ์‹ค๋ฌด ํ•™์Šต ๋ฐฉํ–ฅ [5, 25]. -- **My Project Relevance:** ์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๊ฐ„์ด ์˜ค๋ž˜๋˜์–ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ์Œ“์ธ React ํ”„๋กœ์ ํŠธ๋ฅผ ์ธ์ˆ˜๋ฐ›์•˜์„ ๋•Œ, ์‹œ์Šคํ…œ์˜ ์ค‘๋‹จ ์—†์ด ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ์„ฑ๋Šฅ์„ ์ตœ์‹  ๊ธฐ์ค€์— ๋งž๊ฒŒ ํ˜„๋Œ€ํ™”(Modernization)ํ•ด์•ผ ํ•˜๋Š” ์‹ค๋ฌด ํ™˜๊ฒฝ์— ์ง์ ‘ ์ ์šฉ. - -### Adjacent Topics -- [[ํด๋ฆฐ ์ฝ”๋“œ (Clean Code)์™€ SOLID ์›์น™]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฆฌํŒฉํ† ๋ง ์‹œ ์ปดํฌ๋„ŒํŠธ์˜ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)๊ณผ ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP)์„ ์ค€์ˆ˜ํ•˜์—ฌ ๊ฐ€๋…์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ์„ค๊ณ„ ํŒจํ„ด ํƒ๊ตฌ. -- [[ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŒ… (Frontend Testing)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ์ •์—์„œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ํ›ผ์†๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด Storybook ๊ธฐ๋ฐ˜ UI ํ…Œ์ŠคํŠธ๋‚˜ Jest, Cypress ๋“ฑ์„ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•๋ณด ์ „๋žต ์กฐ์‚ฌ. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/00_Raw/ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜.md b/00_Raw/ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜.md deleted file mode 100644 index 5524db97..00000000 --- a/00_Raw/ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜.md +++ /dev/null @@ -1,77 +0,0 @@ -# [[ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜]] - -## ๐Ÿ“Œ Brief ์‹œ Summary -ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ์กด ๋™์ž‘์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ, ๊ฐ€๋…์„ฑ, ํ™•์žฅ์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ์ง€์†์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1, 2]. ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ์–ฝํ˜€์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ํŒŒ์ผ ์œ ํ˜•์ด ์•„๋‹Œ ๋„๋ฉ”์ธ ๋˜๋Š” ๊ธฐ๋Šฅ(Feature) ๋‹จ์œ„๋กœ ๊ตฌ์กฐ๋ฅผ ์žฌํŽธํ•˜์—ฌ ์•„ํ‚คํ…์ฒ˜์˜ ๋ถ•๊ดด๋ฅผ ๋ง‰๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค [1, 3, 4]. ๋˜ํ•œ, SOLID๋‚˜ DRY, KISS์™€ ๊ฐ™์€ ์„ค๊ณ„ ์›์น™์„ ์ ์šฉํ•˜๊ณ , ์ž๋™ํ™”๋œ ๋ฆฐํŒ…(Linting)๊ณผ ์—„๊ฒฉํ•œ Git ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ํ†ตํ•ด ๋‹ค์ˆ˜์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜‘์—…ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋„ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์‹œ์Šคํ…œ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [1, 5, 6]. - -## ๐Ÿ“– Core Content -* **๋ฆฌํŒฉํ† ๋ง์˜ ์ค€๋น„์™€ ํ…Œ์ŠคํŠธ ์˜์กด์„ฑ** - * ๋ ˆ๊ฑฐ์‹œ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ React ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋‚˜ UI ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜์—ฌ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. - * Storybook๊ณผ ์—ฐ๋™๋˜๋Š” ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual Regression Testing) ๋„๊ตฌ(์˜ˆ: Happo, Chromatic)๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜๋„์น˜ ์•Š์€ UI ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์ด๋‚˜ ์ ‘๊ทผ์„ฑ ์˜ค๋ฅ˜๋ฅผ ์ž๋™์œผ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7]. - * ์™„์ „ํžˆ ์ฝ”๋“œ๋ฅผ ๊ฐˆ์•„์—Ž๋Š” ์žฌ์ž‘์„ฑ(Rewrite)๋ณด๋‹ค๋Š” ํ•œ ๋ฒˆ์— ์•Œ๋ฆผ ๊ธฐ๋Šฅ์ด๋‚˜ ์ฒดํฌ์•„์›ƒ ํ๋ฆ„ ๋“ฑ ์ž‘์€ ์Šคํ† ์–ด ๋‹จ์œ„๋กœ ๊ธฐ์ˆ ์„ ๊ต์ฒดํ•˜๋Š” '์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Migration)' ์ „๋žต์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [1]. -* **์•„ํ‚คํ…์ฒ˜ ๋ฐ ํด๋” ๊ตฌ์กฐ์˜ ํ˜„๋Œ€ํ™”** - * ์ปดํฌ๋„ŒํŠธ, ํ›…, ์Šคํƒ€์ผ ๋“ฑ์„ ๋‹จ์ˆœํžˆ ๊ธฐ์ˆ ์  ํŒŒ์ผ ์œ ํ˜•(Type-based)์œผ๋กœ ๋ฌถ๋Š” ํด๋” ๊ตฌ์กฐ๋Š” ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๊ทน๋„๋กœ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [1, 4]. - * 2025๋…„ ๊ธฐ์ค€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” ์ฝ”๋“œ๋ฅผ ๊ธฐ๋Šฅ(Feature) ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠน์ • ๊ธฐ๋Šฅ ๋‚ด์— ํ•ด๋‹น ๊ธฐ๋Šฅ๋งŒ์˜ ์ปดํฌ๋„ŒํŠธ, API, ํ›… ๋“ฑ์„ ์œ„์น˜์‹œ์ผœ ๋†’์€ ์‘์ง‘๋„๋ฅผ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค [1, 4]. - * ๋” ๋‚˜์•„๊ฐ€ **Feature-Sliced Design (FSD)** ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋ก ์„ ๋„์ž…ํ•˜์—ฌ, ์ฝ”๋“œ๋ฅผ app, pages, widgets, features, entities, shared ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•˜๊ฒŒ ํ•˜๋Š” '๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ' ๋ฐ '๋‹จ์ผ ์ง„์ž…์ (Public API)' ๊ทœ์น™์„ ๊ฐ•์ œํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 3]. -* **์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ์„ค๊ณ„ ์›์น™(SOLID, DRY, KISS) ์ ์šฉ** - * **๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP):** 300์ค„์ด ๋„˜์–ด๊ฐ€๋Š” ๋“ฑ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ํ•˜๋Š” ๋Œ€ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ๋ Œ๋”๋ง ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋” ์ž‘๊ณ  ์ง‘์ค‘๋œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 6]. - * **๋กœ์ง์˜ ์ถ”์ถœ๊ณผ ์žฌ์‚ฌ์šฉ:** ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์—†์• ๋Š” 'DRY(Don't Repeat Yourself)' ์›์น™์— ๋”ฐ๋ผ, ์–ฝํ˜€์žˆ๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํผ ์ฒ˜๋ฆฌ ๋กœ์ง ๋“ฑ์„ '์ปค์Šคํ…€ ํ›…(Custom Hooks)'์œผ๋กœ ๋ถ„๋ฆฌํ•ด ๋ฆฌํŒฉํ† ๋ง์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค [1, 6]. - * ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›… ๊ธฐ๋ฐ˜์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ `useEffect`๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript)๋ฅผ ๋„์ž…ํ•ด ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ์™€ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•ด, ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋Š” TanStack Query์™€ ๊ฐ™์€ ์ „์šฉ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [1, 2]. -* **์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•œ ๊ฑฐ๋ฒ„๋„Œ์Šค์™€ ํ‘œ์ค€ํ™”** - * React ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ด๋ฆ„์€ PascalCase, ์ผ๋ฐ˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋‚˜ ํ›…์€ camelCase, ํด๋”๋ช…์€ ์šด์˜์ฒด์ œ ๊ฐ„ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด kebab-case๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ์ผ๊ด€๋œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์„ ํ™•๋ฆฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 8]. - * ํŒ€ ๋‹จ์œ„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ESLint, Prettier, Husky๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ปค๋ฐ‹์ด๋‚˜ ๋ณ‘ํ•ฉ ์ „์— ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ์œ„๋ฐ˜(์˜ˆ: feature๊ฐ€ ๋‹ค๋ฅธ feature๋ฅผ ์ž„ํฌํŠธํ•˜๋Š” ํ–‰์œ„)์ด๋‚˜ ์ฝ”๋“œ ํฌ๋งทํŒ…์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ณ  ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1]. - * Git ๋ธŒ๋žœ์นญ ์‹œ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature Branch)๋ฅผ ์šด์˜ํ•˜๊ณ , 'Conventional Commits' ๊ทœ์น™์— ๋”ฐ๋ผ ์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ, ๋‹จ์ผ ์ฑ…์ž„์— ๋งž๋Š” ์ž‘์€ PR(Pull Request)์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์œ ์ง€๋ณด์ˆ˜ ํ”„๋ž™ํ‹ฐ์Šค์ž…๋‹ˆ๋‹ค [1, 5, 9]. - -## โš–๏ธ Trade-offs & Caveats -* **์ถ”์ƒํ™”์™€ ๋ณต์žก์„ฑ์˜ ์ถฉ๋Œ (DRY vs KISS):** ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด(DRY) ๋ฌด๋ฆฌํ•˜๊ฒŒ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ”์ƒํ™”๋ฅผ ๋งŒ๋“ค๋ฉด, ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ ธ KISS(Keep It Simple, Stupid) ์›์น™์„ ์œ„๋ฐฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ ํŒจํ„ด์ด ์ตœ์†Œ 3๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ์ด ์„ฃ๋ถ€๋ฅธ ์ตœ์ ํ™”๋กœ ์ธํ•œ ๋ถ€์ž‘์šฉ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค [1, 6]. -* **์•„ํ‚คํ…์ฒ˜ ์˜ค๋ฒ„ํ—ค๋“œ:** Feature-Sliced Design(FSD)๊ณผ ๊ฐ™์ด ์—„๊ฒฉํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ ๊ณ„์ธต ๊ตฌ์กฐ๋Š” ๋Œ€๊ทœ๋ชจ ์•ฑ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์— ํƒ์›”ํ•˜์ง€๋งŒ, ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ํด๋”์™€ ํŒŒ์ผ์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ชผ๊ฐœ์ง€๊ณ  ๊ฐœ๋…์  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๊ณผ๋„ํ•œ ์„ค๊ณ„(Overkill)๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 4]. -* **์ƒํƒœ ๊ด€๋ฆฌ ๋ฆฌํŒฉํ† ๋ง์˜ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€:** Context API์—์„œ ์‹œ์ž‘ํ•œ ์ƒํƒœ๋ฅผ ๋Œ€๊ทœ๋ชจ ์•ฑ์˜ ์„ฑ๋Šฅ(๋ฆฌ๋ Œ๋”๋ง) ๋ฌธ์ œ๋กœ ์ธํ•ด Zustand๋‚˜ Redux๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Zustand๋Š” ์œ ์—ฐํ•˜์ง€๋งŒ ํŒ€์›๋งˆ๋‹ค ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด์ด ํŒŒํŽธํ™”๋  ์œ„ํ—˜์ด ์žˆ์œผ๋ฉฐ, Redux๋Š” ์ผ๊ด€๋œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(Boilerplate) ์ฝ”๋“œ๊ฐ€ ํญ๋ฐœ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10]. -* **์ „๋ฉด ์žฌ์ž‘์„ฑ์˜ ์œ„ํ—˜์„ฑ:** ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ๋งˆ์ฃผํ–ˆ์„ ๋•Œ ์ „์ฒด ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์žฌ์ž‘์„ฑ(Rewrite)ํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์‹คํŒจํ•  ํ™•๋ฅ ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง์€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋ฉˆ์ถ”์ง€ ์•Š์€ ์ƒํƒœ์—์„œ, ์ปดํฌ๋„ŒํŠธ ๋ฐ ์Šคํ† ์–ด๋ฅผ ํ•˜๋‚˜์”ฉ '์ ์ง„์ (Incremental)'์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผ๋งŒ ๋ฆฌ์Šคํฌ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ )] -- [[Feature-Sliced Design (FSD)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ฑ„ํƒํ•˜๋Š” ์ตœ์‹  ํด๋” ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [1, 3]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•ฑ์„ ๋ ˆ์ด์–ด(app, pages, widgets, features, entities, shared)๋กœ ์—„๊ฒฉํžˆ ๋‚˜๋ˆ„๊ณ  ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ๊ฐ•์ œํ•˜์—ฌ ์ฝ”๋“œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ์›๋ฆฌ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[SOLID ์›์น™]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง ์‹œ ์ปดํฌ๋„ŒํŠธ์™€ ๋ชจ๋“ˆ์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๊ณ  ๊ตฌ์„ฑํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์ฒ ํ•™์ž…๋‹ˆ๋‹ค [1, 6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ํ†ตํ•ด ๋น„๋Œ€ํ•ด์ง„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„ํ• ํ•˜๊ณ , ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP)์„ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ)] -- [[์ปค์Šคํ…€ ํ›… (Custom Hooks)]] - - ์—ฐ๊ฒฐ ์ด์œ : React ๋ฆฌํŒฉํ† ๋ง์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , DRY ์›์น™์„ ์‹คํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์œ„์ด์ž ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [1, 6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์‚ฐ์žฌํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ถ€์ˆ˜ ํšจ๊ณผ(`useEffect`)๋ฅผ ์–ด๋–ป๊ฒŒ ์‘์ง‘๋„ ๋†’์€ ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Incremental Migration)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ฐœ์„ ํ•  ๋•Œ ์‹œ์Šคํ…œ์„ ์ค‘๋‹จ์‹œํ‚ค๊ฑฐ๋‚˜ ์œ„ํ—˜ํ•œ '์ „์ฒด ์žฌ์ž‘์„ฑ'์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์ฑ„ํƒํ•ด์•ผ ํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค [1]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•Œ๋ฆผ์ด๋‚˜ ๋‹จ์ˆœ ์ƒํƒœ ๊ฐ™์€ ์ž‘์€ ๋ชจ๋“ˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ ์ง„์ ์œผ๋กœ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋‚˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ต์ฒดํ•ด ๋‚˜๊ฐ€๋Š” ๊ตฌ์ฒด์ ์ธ ์ „ํ™˜ ์ ˆ์ฐจ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ (Visual Regression Testing)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ์‹œ, ๊ธฐ์กด UI๊ฐ€ ์˜๋„์น˜ ์•Š๊ฒŒ ๊นจ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ์•ˆ์ „๋ง์ž…๋‹ˆ๋‹ค [7]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Storybook๊ณผ ํ†ตํ•ฉ๋œ ๋„๊ตฌ(์˜ˆ: Happo, Chromatic)๋ฅผ ํ†ตํ•ด DOM ๊ตฌ์กฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”ฝ์…€ ์ฐจ์ด๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions - -- DRY ์›์น™๊ณผ KISS ์›์น™์ด ์ƒ์ถฉํ•˜๋Š” ์ƒํ™ฉ์—์„œ, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฆฌํŒฉํ† ๋ง ์‹œ ์ถ”์ƒํ™”์˜ ์ ์ ˆํ•œ ์‹œ์ (์˜ˆ: Rule of Three)์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์‹ค๋ฌด์  ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Context API๋กœ ๊ตฌ์ถ•๋œ ๊ธฐ์กด ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ Zustand๋‚˜ Redux๋กœ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Migration)ํ•  ๋•Œ ์ง๋ฉดํ•˜๋Š” ๊ธฐ์ˆ ์  ์žฅ์• ๋ฌผ๊ณผ ๋‹จ๊ณ„๋ณ„ ํ•ด๊ฒฐ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- Feature-Sliced Design (FSD)์„ ๋„์ž…ํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ(Feature)์—์„œ ๊ณตํ†ต์œผ๋กœ ํ•„์š”ํ•œ ๋กœ์ง์ด 'Shared' ๊ณ„์ธต์— ์ง€๋‚˜์น˜๊ฒŒ ๋น„๋Œ€ํ•ด์ง€๋Š” ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•˜๊ณ  ์กฐ์œจํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ๋‹ค์ˆ˜์˜ ๋ถˆํ•„์š”ํ•œ `useEffect`์™€ ํŒŒํŽธํ™”๋œ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ TanStack Query์™€ ๊ฐ™์€ ๋„๊ตฌ๋กœ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ๊ธฐ์กด ์œ ๋‹› ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ „๋žต์€ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€? -- ๋‹ค์ˆ˜์˜ ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์ด ํ˜‘์—…ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ESLint, Prettier, Husky๋ฅผ ํ™œ์šฉํ•ด FSD์˜ ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„(๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๋“ฑ)์™€ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์„ ์ž๋™ํ™” ๋ฐ ๊ฐ•์ œํ•˜๋Š” ์ตœ์ ์˜ CI/CD ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ตฌ์„ฑ ๋ฐฉ์‹์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ๋น„๋Œ€ํ•ด์ง„ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งˆ์ฃผํ–ˆ์„ ๋•Œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์„ ์ ์šฉํ•˜์—ฌ, UI ๋ Œ๋”๋ง ๋กœ์ง์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ณต์žกํ•œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋‚˜ API ํŽ˜์นญ ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์„ ์ฆ‰์‹œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [1, 6]. -- **System Design:** ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๊ฐ€ ์ ์  ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์ง€๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด, ์ดˆ๊ธฐ๋ถ€ํ„ฐ ํŒŒ์ผ ์œ ํ˜•(components, hooks) ๊ธฐ๋ฐ˜์˜ ํด๋” ๋ถ„๋ฅ˜๋ฅผ ์ง€์–‘ํ•˜๊ณ , Feature-Sliced Design(FSD)๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ/๊ธฐ๋Šฅ ์ค‘์‹ฌ์˜ ํด๋” ๊ตฌ์กฐ๋ฅผ ์‹œ์Šคํ…œ์˜ ๋ผˆ๋Œ€๋กœ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [1, 3, 4]. -- **Operation / Maintenance:** ์œ ์ง€๋ณด์ˆ˜ ๊ณผ์ •์—์„œ ๋ฒ„๊ทธ ํ”ฝ์Šค์™€ ๋ฆฌํŒฉํ† ๋ง ์ฝ”๋“œ๊ฐ€ ์„ž์ด์ง€ ์•Š๋„๋ก, ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Conventional Commits๋ฅผ ๋„์ž…ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ ์ด๋ ฅ(History)์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [5]. -- **Learning Path:** ๋ฆฌ์•กํŠธ๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šด ํ›„, ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์œ ๋‹› ํ…Œ์ŠคํŠธ(Unit Test)๋กœ ๊ฒ€์ฆํ•œ ๋’ค DRY, KISS, YAGNI ์›์น™์— ๋”ฐ๋ผ ๊ตฐ๋”๋”๊ธฐ๋ฅผ ์—†์• ๋Š” ์•ˆ์ „ํ•œ ๋ฆฌํŒฉํ† ๋ง ์‚ฌ์ดํด์„ ํ›ˆ๋ จํ•ฉ๋‹ˆ๋‹ค [2, 6]. -- **My Project Relevance:** ํƒ€์ธ์ด ์ž‘์„ฑํ•œ ๋˜๋Š” ์˜ค๋ž˜๋œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ธ๊ณ„๋ฐ›์•˜์„ ๋•Œ, ์ฝ”๋“œ๋ฅผ ์ „๋ฉด ์žฌ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  Storybook ๋“ฑ์œผ๋กœ ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ ์•ˆ์ „๋ง์„ ๊ตฌ์ถ•ํ•œ ๋’ค [7], ๋ถˆํ•„์š”ํ•œ ์ƒํƒœ ๋ฐ Effect๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ •๋ˆํ•ด ๋‚˜๊ฐ€๋Š” [2] ๊ตฌ์ฒด์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics - -- [[ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™” (Frontend Performance Optimization)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜(Chrome DevTools ํ™œ์šฉ), ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ์š”์†Œ(React.memo, useCallback ์˜ค๋‚จ์šฉ ๋“ฑ)๋ฅผ ์ฐพ์•„๋‚ด์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. -- [[Git ๋ธŒ๋žœ์นญ ๋ฐ ํ˜‘์—… ์ „๋žต (Git Branching & Workflow)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฆฌํŒฉํ† ๋ง๊ณผ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ํŒ€ ํ™˜๊ฒฝ์—์„œ, ์ฝ”๋“œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฆฌ๋ทฐ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ Trunk-based Development, GitHub Flow ๋“ฑ ์‹ค๋ฌด์  ํ˜‘์—… ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์ดํ•ด๋ฅผ ๋„“ํž™๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/10_Wiki/Topics/.obsidian/graph.json b/10_Wiki/Topics/.obsidian/graph.json index 45022f11..b91795f9 100644 --- a/10_Wiki/Topics/.obsidian/graph.json +++ b/10_Wiki/Topics/.obsidian/graph.json @@ -17,6 +17,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.05827063129609155, + "scale": 0.04981590829732712, "close": false } \ No newline at end of file diff --git a/10_Wiki/Topics/.obsidian/workspace.json b/10_Wiki/Topics/.obsidian/workspace.json index d692b13a..e72da11b 100644 --- a/10_Wiki/Topics/.obsidian/workspace.json +++ b/10_Wiki/Topics/.obsidian/workspace.json @@ -11,10 +11,14 @@ "id": "e84fb23982481828", "type": "leaf", "state": { - "type": "graph", - "state": {}, - "icon": "lucide-git-fork", - "title": "๊ทธ๋ž˜ํ”„ ๋ทฐ" + "type": "markdown", + "state": { + "file": "Data-Augmentation Strategies.md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "Data-Augmentation Strategies" } } ] @@ -181,6 +185,11 @@ }, "active": "e84fb23982481828", "lastOpenFiles": [ + "AI/PEV_Loop.md", + "AI/Context_Engineering.md", + "AI/A2A.md", + "AI/ACI.md", + "Development/Legacy_React_Migration.md", "Development/Agentic_Software_Engineering.md", "AI/Agent_State_Store.md", "Risk-Management.md", @@ -202,11 +211,6 @@ "์ปจํŠธ๋กค๋„ท(ControlNet).md", "์ปจํŠธ๋กค๋„ท (ControlNet).md", "์บ๋ฆญํ„ฐ ์ฐธ์กฐ (Character Reference).md", - "์ดˆ์ƒํ™” ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์Šคํƒ€์ผ ์ œ์–ด.md", - "์กฐ๋ช… ๋ฐ ์นด๋ฉ”๋ผ ์‚ฌ์–‘ ์ง€์‹œ(Lighting and Camera Specification).md", - "์ž์—ฐ์–ด ํ”„๋กฌํ”„ํŠธ(Natural Language Prompt).md", - "์ธํŽ˜์ธํŒ… ๋ฐ ์•„์›ƒํŽ˜์ธํŒ… (Inpainting and Outpainting).md", - "์ธํŽ˜์ธํŒ… ๋ฐ ๋“œ๋ž˜ํ”„ํŠธ ๋ชจ๋“œ(Inpainting and Draft Mode).md", "sessions/2026-04-30T07-07", "sessions", "company_state.json", diff --git a/10_Wiki/Topics/AI/A2A.md b/10_Wiki/Topics/AI/A2A.md new file mode 100644 index 00000000..dbc63bcc --- /dev/null +++ b/10_Wiki/Topics/AI/A2A.md @@ -0,0 +1,41 @@ +--- +id: b3c4d5e6-f7a8-4b9c-0d1e-2f3a4b5c6d7e +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.97 +tags: [a2a, agent, protocol, multi-agent, communication, infrastructure] +last_reinforced: 2026-05-01 +github_commit: "wikification-a2a" +--- + +# [[Agent-to-Agent (A2A)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> A2A๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ•˜๋„ค์Šค๋‚˜ ์›๊ฒฉ์ง€์— ์œ„์น˜ํ•œ ์—์ด์ „ํŠธ๋“ค์ด ์ž‘์—…์„ ์œ„์ž„ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ƒํ˜ธ์šด์šฉ์„ฑ ๋„คํŠธ์›Œํฌ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. A2A์˜ ์ •์˜ ๋ฐ ๋ชฉ์  +- **์—์ด์ „ํŠธ ๊ฐ„ ํ†ต์‹ ๋ง**: ๋‹จ์ผ ํ•˜๋„ค์Šค๋ฅผ ๋„˜์–ด ๋ถ„์‚ฐ๋œ ์—์ด์ „ํŠธ ์ƒํƒœ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. +- **์ž‘์—… ์œ„์ž„(Delegation)**: ์ƒ์œ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ์—์ด์ „ํŠธ๊ฐ€ ํŠน์ • ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€ ์—์ด์ „ํŠธ์—๊ฒŒ ํ•˜์œ„ ์ž‘์—…์„ ๋งก๊ธฐ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ทœ๊ฒฉํ™”ํ•œ๋‹ค. + +### 2. ์ฃผ์š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ +- **๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ…**: ์š”์ฒญ-์‘๋‹ต(Request-Response) ๋ฐ ์ด๋ฒคํŠธ ๋ฐœํ–‰-๊ตฌ๋…(Pub-Sub) ๋ชจ๋ธ์„ ํ†ตํ•ด ์—์ด์ „ํŠธ ๊ฐ„ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. +- **์ปจํ…์ŠคํŠธ ์ „ํŒŒ**: ์ž‘์—…์„ ์œ„์ž„ํ•  ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ฌธ๋งฅ(Context)๊ณผ ๊ถŒํ•œ(Authorization)์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. +- **์—ญํ•  ์ •์˜**: ์†ก์‹ ์ž(Requester)์™€ ์ˆ˜์‹ ์ž(Worker) ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์ฑ…์ž„ ๋ฒ”์œ„๋ฅผ ๋ช…์‹œํ•œ๋‹ค. + +### 3. MCP์™€์˜ ๊ด€๊ณ„ +- **์ˆ˜ํ‰์ /์ˆ˜์ง์  ํ™•์žฅ**: MCP๊ฐ€ '์—์ด์ „ํŠธ-๋„๊ตฌ' ๊ฐ„์˜ ์ˆ˜์ง์  ํ†ตํ•ฉ์„ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, A2A๋Š” '์—์ด์ „ํŠธ-์—์ด์ „ํŠธ' ๊ฐ„์˜ ์ˆ˜ํ‰์  ํ˜‘์—…์„ ๋‹ด๋‹นํ•˜์—ฌ ์™„์ „ํ•œ ํ†ต์‹  ์Šคํƒ์„ ํ˜•์„ฑํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **๋ณด์•ˆ ๊ฒฝ๊ณ„**: ์›๊ฒฉ ์—์ด์ „ํŠธ ํ˜ธ์ถœ ์‹œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ์ž…๋  ์œ„ํ—˜์ด ์žˆ์œผ๋ฉฐ, ๊ต์ฐจ ์ธ์ฆ ๋ฐ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๊ณ„์ธต์ด ํ•„์ˆ˜์ ์ด๋‹ค. +- **์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ณต์žก์„ฑ**: ์—์ด์ „ํŠธ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ†ต์‹  ์ง€์—ฐ๊ณผ ์ƒํƒœ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ์„ค๊ณ„๊ฐ€ ์š”๊ตฌ๋œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Model Context Protocol (MCP)]], [[Agentic Software Engineering]] +- **Raw Source**: [[00_Raw/Agent-to-Agent (A2A)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Agent-to-Agent (A2A) Protocol"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics/AI/ACI.md b/10_Wiki/Topics/AI/ACI.md new file mode 100644 index 00000000..23cbbc26 --- /dev/null +++ b/10_Wiki/Topics/AI/ACI.md @@ -0,0 +1,42 @@ +--- +id: a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.98 +tags: [aci, agent, interface, llm, infrastructure, harness] +last_reinforced: 2026-05-01 +github_commit: "wikification-aci" +--- + +# [[Agent-Computer Interface (ACI)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ACI๋Š” ์ธ๊ฐ„ ์ค‘์‹ฌ์˜ UI๋ฅผ ๋„˜์–ด, LLM ์—์ด์ „ํŠธ๊ฐ€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ(OS, ํŒŒ์ผ, ๋„๊ตฌ)์„ ํšจ์œจ์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, ์—์ด์ „ํŠธ์˜ ๊ด€์ฐฐ(Observation) ๋ฐ ํ–‰๋™(Action) ๊ณต๊ฐ„์˜ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ์š”์†Œ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ACI์˜ ์ •์˜ ๋ฐ ํ•„์š”์„ฑ +- **๋ชจ๋ธ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค**: ์ธ๊ฐ„์—๊ฒŒ๋Š” ์‹œ๊ฐ์  UI(GUI)๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ์—์ด์ „ํŠธ์—๊ฒŒ๋Š” ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ(JSON, XML)๋‚˜ ๊ฐ„๊ฒฐํ•œ ํ…์ŠคํŠธ ์ถœ๋ ฅ์ด ๋” ํšจ์œจ์ ์ด๋‹ค. +- **์ธ์ง€ ๋ถ€ํ•˜ ๊ฐ์†Œ**: ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ์  ๋…ธ์ด์ฆˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์—์ด์ „ํŠธ๊ฐ€ ํ–‰๋™์˜ ๊ฒฐ๊ณผ์™€ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ณด๋ฅผ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค. + +### 2. ACI ์„ค๊ณ„ ์›์น™ +- **๊ตฌ์กฐ์  ๋ช…ํ™•์„ฑ**: ๋„๊ตฌ์˜ ์ธ์ž ์Šคํ‚ค๋งˆ(Schema)์™€ ๋ฐ˜ํ™˜๊ฐ’ ํ˜•์‹์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ๋ชจ๋ธ์˜ ํŒŒ์‹ฑ ์˜ค๋ฅ˜๋ฅผ ์ค„์ธ๋‹ค. +- **์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์˜ ํ’๋ถ€ํ•จ**: ๋‹จ์ˆœํ•œ ์‹คํŒจ ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋‹Œ, ๋ชจ๋ธ์ด ๋‹ค์Œ ํ–‰๋™์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ํžŒํŠธ(์˜ˆ: "ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค...")๋ฅผ ์ œ๊ณตํ•œ๋‹ค. +- **์ƒํƒœ์˜ ๊ฐ€์‹œ์„ฑ**: ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ, ์ƒŒ๋“œ๋ฐ•์Šค ์ƒํƒœ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ ์—์ด์ „ํŠธ๊ฐ€ ์ถ”๋ก ์— ํ•„์š”ํ•œ ๋ฌธ๋งฅ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋…ธ์ถœํ•œ๋‹ค. + +### 3. ํ•˜๋„ค์Šค ๋‚ด์—์„œ์˜ ์—ญํ•  +- **์ž…์ถœ๋ ฅ ๋ž˜ํผ**: ํ•˜๋„ค์Šค๋Š” ์ปดํ“จํ„ฐ์˜ ์›์‹œ ์ถœ๋ ฅ์„ ACI ํ‘œ์ค€์— ๋งž์ถฐ ๊ฐ€๊ณตํ•˜์—ฌ ๋ชจ๋ธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋ฉฐ, ๋ชจ๋ธ์˜ ์ž์—ฐ์–ด ์š”์ฒญ์„ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. +- **์ธํ„ฐํŽ˜์ด์Šค ์ตœ์ ํ™”**: ํŠน์ • ๋ชจ๋ธ์˜ ํŠน์„ฑ(์˜ˆ: ๊ธด JSON์— ๊ฐ•ํ•จ, ํŠน์ • ํƒœ๊ทธ ํ˜•์‹ ์„ ํ˜ธ)์— ๋งž์ถฐ ACI๋ฅผ ํŠœ๋‹ํ•˜์—ฌ ์ž‘์—… ์„ฑ๊ณต๋ฅ (Pass@1)์„ ๋†’์ธ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ถ”์ƒํ™” vs ์ œ์–ด๊ถŒ**: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„ˆ๋ฌด ๊ณ ์ˆ˜์ค€์œผ๋กœ ์ถ”์ƒํ™”ํ•˜๋ฉด ์—์ด์ „ํŠธ์˜ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ๋„ˆ๋ฌด ์ €์ˆ˜์ค€(์˜ˆ: raw byte stream)์œผ๋กœ ๋‘๋ฉด ์ธ์ง€ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰์ฆํ•œ๋‹ค. +- **๋ฒ”์šฉ ํ‘œ์ค€์˜ ๋ถ€์žฌ**: ๊ฐ ํ•˜๋„ค์Šค๋งˆ๋‹ค ACI ์„ค๊ณ„๊ฐ€ ์ƒ์ดํ•˜์—ฌ ์—์ด์ „ํŠธ์˜ ํ–‰๋™ ํŒจํ„ด์ด ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค์— ๊ณ ์ฐฉํ™”(Coupling)๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Model Context Protocol (MCP)]], [[Context Engineering]] +- **Raw Source**: [[00_Raw/Agent-Computer Interfaces (ACI)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Agent-Computer Interface (ACI) Design Principle"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics/AI/Context_Engineering.md b/10_Wiki/Topics/AI/Context_Engineering.md new file mode 100644 index 00000000..0c7b0062 --- /dev/null +++ b/10_Wiki/Topics/AI/Context_Engineering.md @@ -0,0 +1,41 @@ +--- +id: d5e6f7a8-b9c0-4d1e-2f3a-4b5c6d7e8f9a +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.99 +tags: [context, engineering, llm, optimization, token-management, agent] +last_reinforced: 2026-05-01 +github_commit: "wikification-context-engineering" +--- + +# [[Context Engineering]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ์ปจํ…์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์€ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ์„ ๋„˜์–ด, ์—์ด์ „ํŠธ์˜ ์ œํ•œ๋œ ์ธ์ง€ ์ž์›(Context Window)์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๋ฅผ ํ•„ํ„ฐ๋ง, ์••์ถ•, ์šฐ์„ ์ˆœ์œ„ํ™”ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ถ”๋ก  ์ถฉ์‹ค๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ •๊ตํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ํ”„๋กฌํ”„ํŠธ์—์„œ ์ปจํ…์ŠคํŠธ๋กœ์˜ ์ง„ํ™” +- **์ •์ ์—์„œ ๋™์ ์œผ๋กœ**: ๊ณ ์ •๋œ ์ง€์‹œ๋ฌธ(Prompt) ์ž‘์„ฑ์—์„œ, ๋Ÿฐํƒ€์ž„ ์ƒํ™ฉ์— ๋งž์ถฐ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์ฃผ์ž…ํ•˜๋Š” ๋™์  ๊ด€๋ฆฌ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ „ํ™˜๋˜์—ˆ๋‹ค. +- **์ธ์ง€ ๋ถ€ํ•˜ ์ œ์–ด**: ๋ชจ๋ธ์ด ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋ณด๊ฒŒ ํ•˜๋Š” ๋Œ€์‹ , ํ˜„์žฌ ์ž‘์—…์— ๊ฒฐ์ •์ ์ธ ์ •๋ณด(Salient Information)๋งŒ ๋…ธ์ถœํ•˜์—ฌ ์ถ”๋ก ์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ธ๋‹ค. + +### 2. ํ•ต์‹ฌ ๊ธฐ์ˆ  ๋ฐ ์ „๋žต +- **์„ ํƒ์  ์ฃผ์ž… (Selective Injection)**: RAG ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ค‘ ๊ด€๋ จ์„ฑ ๋†’์€ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ์ปจํ…์ŠคํŠธ์— ํฌํ•จ์‹œํ‚จ๋‹ค. +- **์ ์‘ํ˜• ์••์ถ• (Adaptive Compaction)**: ๊ณผ๊ฑฐ ๋Œ€ํ™”๋‚˜ ์ž‘์—… ์ด๋ ฅ์„ ์š”์•ฝ(Summary)ํ•˜๊ฑฐ๋‚˜ ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ํ† ํฐ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•œ๋‹ค. +- **์šฐ์„ ์ˆœ์œ„ํ™” (Prioritization)**: ์‹œ์Šคํ…œ ์ง€์‹œ์–ด, ์ตœ๊ทผ ๋„๊ตฌ ๊ฒฐ๊ณผ, ์žฅ๊ธฐ ๊ธฐ์–ต ๋“ฑ์„ ๋ ˆ์ด์–ด๋ณ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ์กฐ์ •ํ•œ๋‹ค. + +### 3. ํ•˜๋„ค์Šค์˜ C-์ปดํฌ๋„ŒํŠธ +- ํ•˜๋„ค์Šค๋Š” ๋ชจ๋ธ์ด ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” '์ฐฝ(Window)'์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ปจํ…์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์€ ์ด ์ฐฝ ๋‚ด๋ถ€๋ฅผ ์ฑ„์šฐ๋Š” ์ •์ฑ…(Policy)๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ด๋‹นํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ปจํ…์ŠคํŠธ ๋ถ€ํŒจ (Context Rot)**: ์ •๋ณด๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์œ ์ง€ํ•˜๋ฉด ์ฃผ์˜ ๋ถ„์‚ฐ(Attention Dilution)์ด ๋ฐœ์ƒํ•˜๊ณ , ๋„ˆ๋ฌด ์ ๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ์ •๋ณด ์ƒ์‹ค๋กœ ์ธํ•œ ์ถ”๋ก  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +- **ํ† ํฐ ๊ฒฝ์ œ์„ฑ**: ๊ธด ์ปจํ…์ŠคํŠธ ๋ชจ๋ธ์ด ๋“ฑ์žฅํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์—ฐ์‚ฐ ๋น„์šฉ๊ณผ ์ง€์—ฐ ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ํšจ์œจ์ ์ธ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ๋Š” ํ•„์ˆ˜์ ์ธ ์ตœ์ ํ™” ์˜์—ญ์ด๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[RAG (Retrieval-Augmented Generation)]], [[Agent State Store]] +- **Raw Source**: [[00_Raw/Context Engineering]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Context Engineering Strategies"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics/AI/PEV_Loop.md b/10_Wiki/Topics/AI/PEV_Loop.md new file mode 100644 index 00000000..3fb9b85a --- /dev/null +++ b/10_Wiki/Topics/AI/PEV_Loop.md @@ -0,0 +1,41 @@ +--- +id: e6f7a8b9-c0d1-4e2f-3a4b-5c6d7e8f9a0b +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.99 +tags: [pev-loop, execution, verification, agent, harness, reliability] +last_reinforced: 2026-05-01 +github_commit: "wikification-pev-loop" +--- + +# [[Plan-Execute-Verify (PEV) Loop]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> PEV ๋ฃจํ”„๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ฆ‰ํฅ์ ์œผ๋กœ ํ–‰๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„ํš, ์ œํ•œ๋œ ์‹คํ–‰, ์—„๊ฒฉํ•œ ๊ฒ€์ฆ์˜ 3๋‹จ๊ณ„๋ฅผ ๊ฐ•์ œํ•˜์—ฌ ์ž์œจ ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์•„ํ‚คํ…์ฒ˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์‹คํ–‰ ํŒจํ„ด์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. 3๋‹จ๊ณ„ ์‹คํ–‰ ํŒŒ์ดํ”„๋ผ์ธ +- **Plan (๊ณ„ํš)**: ๋ฌธ์ œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ์ˆ˜์šฉ ๊ธฐ์ค€(Acceptance Criteria)์„ ํฌํ•จํ•œ ์ƒ์„ธ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. ์ด๋Š” ์ถ”๋ก ์˜ ๋น„๊ฒฐ์ •์„ฑ ๋ฌธ์ œ๋ฅผ ์ค„์ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. +- **Execute (์‹คํ–‰)**: ์ˆ˜๋ฆฝ๋œ ๊ณ„ํš์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์‹คํ–‰ ์ „ ๊ฒŒ์ดํŠธ(Pre-execution gates)๊ฐ€ ๊ฐœ์ž…ํ•˜์—ฌ ์ธ์ž ์œ ํšจ์„ฑ ๋ฐ ๊ถŒํ•œ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ†ต์ œํ•œ๋‹ค. +- **Verify (๊ฒ€์ฆ)**: ๋‹จ์ˆœ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋„˜์–ด ๊ณ„ํš๊ณผ์˜ ์ผ์น˜์„ฑ(Plan Alignment)์„ ํ‰๊ฐ€ํ•œ๋‹ค. ์‹คํŒจ ์‹œ ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์„ ์ถ”๋ก  ๋ฃจํ”„๋กœ ๋Œ๋ ค๋ณด๋‚ด ์ž๊ฐ€ ์ˆ˜์ •์„ ์œ ๋„ํ•œ๋‹ค. + +### 2. ํ•˜๋„ค์Šค ๊ฒŒ์ดํŠธ (Harness Gates) +- **Pre-execution gates**: ๋„๊ตฌ ํ˜ธ์ถœ ์ „ ์ž‘์—… ๊ณต๊ฐ„ ๋ฐ ๊ถŒํ•œ์„ ํ™•์ธํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ํ–‰๋™์„ ์›์ฒœ ์ฐจ๋‹จํ•œ๋‹ค. +- **Post-execution verification**: ๋ฆฐํ„ฐ, ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ, ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ๊ฒ€์‚ฌ ๋“ฑ์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์„ ๋ณด์ฆํ•œ๋‹ค. + +### 3. ์‹ ๋ขฐ์„ฑ ์ค‘์‹ฌ ์„ค๊ณ„ +- '์ผ๋‹จ ํ•ด๋ณด๊ณ  ํ™•์ธํ•˜๊ธฐ(Generate-and-Check)' ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , ํ•˜๋„ค์Šค ๊ณ„์ธต์—์„œ ๊ฒฐ์ •๋ก ์  ๊ทœ์น™์„ ๊ฐ•์ œํ•จ์œผ๋กœ์จ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธ‰์˜ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ง€์—ฐ ์‹œ๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ**: ๋‹จ๊ณ„๋ฅผ ๊ฐ•์ œํ•จ์— ๋”ฐ๋ผ ๊ฐ„๋‹จํ•œ ์ž‘์—…์—์„œ๋„ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋ฉฐ ํ† ํฐ ์†Œ๋ชจ๋Ÿ‰์ด ๋Š˜์–ด๋‚œ๋‹ค. +- **๊ฒ€์ฆ ๋กœ์ง์˜ ๋ณต์žก์„ฑ**: ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€๋ฅผ ๋„˜์–ด ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” '๊ณ„ํš ์ผ์น˜์„ฑ' ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„์— ๋†’์€ ๊ธฐ์ˆ ์  ๋‚œ์ด๋„๊ฐ€ ๋”ฐ๋ฅธ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Pre-execution gates]], [[Plan alignment]], [[Generate-and-Check]] +- **Raw Source**: [[00_Raw/Plan-Execute-Verify (PEV) Loop]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Plan-Execute-Verify (PEV) Loop Architecture"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics/Development/Engineering_Principles.md b/10_Wiki/Topics/Development/Engineering_Principles.md new file mode 100644 index 00000000..efc71f74 --- /dev/null +++ b/10_Wiki/Topics/Development/Engineering_Principles.md @@ -0,0 +1,45 @@ +--- +id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.99 +tags: [engineering-principles, solid, dry, kiss, yagni, clean-code, software-engineering] +last_reinforced: 2026-05-01 +github_commit: "wikification-engineering-principles" +--- + +# [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์›์น™๋“ค์€ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ํ†ต์ œํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋ฉฐ, ํŠนํžˆ SOLID์™€ DRY/KISS/YAGNI๋Š” '๋‹จ์ˆœํ•จ'๊ณผ '์œ ์—ฐํ•จ' ์‚ฌ์ด์˜ ์ตœ์ ์˜ ๊ท ํ˜•์ ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ง€์นจ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. SOLID ์›์น™ (Object-Oriented Design) +- **SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)**: ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ/์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ฑ…์ž„(๋ณ€๊ฒฝ ์ด์œ )๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. React์—์„œ๋Š” ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ชผ๊ฐœ๋Š” ํ•ต์‹ฌ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค. +- **OCP (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ๋‹ค. +- **LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)**: ์ž์‹ ํด๋ž˜์Šค(๋˜๋Š” ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ)๋Š” ๋ถ€๋ชจ์˜ ์—ญํ• ์„ ์˜จ์ „ํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. +- **ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)**: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค(Props)์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์ž˜๊ฒŒ ์ชผ๊ฐ ๋‹ค. +- **DIP (์˜์กด์„ฑ ์—ญ์ „ ์›์น™)**: ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค. + +### 2. Pragmatic Principles (DRY, KISS, YAGNI) +- **DRY (Don't Repeat Yourself)**: ์ง€์‹์˜ ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ์ถ”์ถœํ•œ๋‹ค. +- **KISS (Keep It Simple, Stupid)**: ๋‹จ์ˆœํ•จ์ด ๊ถ๊ทน์˜ ์ •๊ตํ•จ์ด๋‹ค. ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ณด๋‹ค ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์šฐ์„ ํ•œ๋‹ค. +- **YAGNI (You Aren't Gonna Need It)**: ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ๊ฒฝ๊ณ„ํ•œ๋‹ค. + +### 3. Clean Code ์‹ค๋ฌด +- **๊ฐ€๋…์„ฑ ์šฐ์„ **: ์ฝ”๋“œ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ๊ธฐ ์œ„ํ•จ์ด ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ๋‹ค. ๋ช…ํ™•ํ•œ ๋ณ€์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ํฌ๊ธฐ ์กฐ์ ˆ์ด ํ•„์ˆ˜์ ์ด๋‹ค. +- **๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ**: ์›์น™์„ ์ค€์ˆ˜ํ•œ ์ฝ”๋“œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด(Testable) ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **DRY vs KISS**: ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฌด๋ฆฌํ•œ ์ถ”์ƒํ™”๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)'๊ฐ€ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ด๋‹ค. +- **YAGNI vs ํ™•์žฅ์„ฑ**: ๋ฏธ๋ž˜๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค. YAGNI๋Š” '๊ธฐ๋Šฅ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ณ , SOLID๋Š” '๊ตฌ์กฐ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Legacy React Migration & Refactoring Standard]], [[Custom Hooks]], [[Feature-Sliced Design]] +- **Raw Source**: [[00_Raw/DRY]], [[00_Raw/KISS]], [[00_Raw/YAGNI]], [[00_Raw/Single Responsibility Principle]], [[00_Raw/Clean Code and SOLID Principles]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Core Engineering Principles (SOLID, DRY, KISS, YAGNI)"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics/Development/Git_Workflows.md b/10_Wiki/Topics/Development/Git_Workflows.md new file mode 100644 index 00000000..252c9a01 --- /dev/null +++ b/10_Wiki/Topics/Development/Git_Workflows.md @@ -0,0 +1,43 @@ +--- +id: b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [git, workflow, branching, github-flow, git-flow, trunk-based-development, devops] +last_reinforced: 2026-05-01 +github_commit: "wikification-git-workflow" +--- + +# [[Modern Git Workflows & Branching Strategies]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ํšจ์œจ์ ์ธ Git ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํŒ€์˜ ๊ทœ๋ชจ์™€ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ์— ๋งž์ถฐ ์„ ํƒ๋˜์–ด์•ผ ํ•˜๋ฉฐ, Trunk-based Development์™€ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ์˜ Feature Branch๋ฅผ ํ†ตํ•ด ์ง€์†์  ํ†ตํ•ฉ(CI)์˜ ๊ฐ€์น˜๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ์ฃผ์š” ์ „๋žต๋ณ„ ํŠน์ง• +- **Git Flow**: ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ. `master`, `develop`, `feature`, `release`, `hotfix` ๋ธŒ๋žœ์น˜๋ฅผ ์—„๊ฒฉํžˆ ๊ด€๋ฆฌํ•œ๋‹ค. +- **GitHub Flow**: ์ง€์†์  ๋ฐฐํฌ(CD)์— ์ตœ์ ํ™”๋œ ๋‹จ์ˆœํ•œ ๋ชจ๋ธ. `main` ๋ธŒ๋žœ์น˜์™€ ์งง์€ ์ˆ˜๋ช…์˜ `feature` ๋ธŒ๋žœ์น˜๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, PR์„ ํ†ตํ•ด ์ƒ์‹œ ๋ฐฐํฌํ•œ๋‹ค. +- **Trunk-based Development**: ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋ฃจ์—๋„ ์—ฌ๋Ÿฌ ๋ฒˆ `main`์— ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹. ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค. + +### 2. ํ˜‘์—… ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ +- **Pull Request (PR)**: ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ํ•„์ˆ˜ ๊ด€๋ฌธ. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์˜๋„๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ๋ณ‘ํ•ฉ๋œ๋‹ค. +- **Conventional Commits**: `feat:`, `fix:`, `refactor:` ๋“ฑ ๊ทœ๊ฒฉํ™”๋œ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค. +- **Atomic Commits**: ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ๋งŒ ๋‹ด์•„์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋กค๋ฐฑ๊ณผ ๋””๋ฒ„๊น…(bisect)์„ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค. + +### 3. ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์„ ์œ„ํ•œ ์ „๋žต +- **์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ**: ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฉฐ์น ์”ฉ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๋น ๋ฅด๊ฒŒ `main`์— ํ†ตํ•ฉํ•˜์—ฌ 'Merge Hell'์„ ๋ฐฉ์ง€ํ•œ๋‹ค. +- **Feature Flags**: ๋Œ€๊ทœ๋ชจ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฝ”๋“œ๋Š” ๋ณ‘ํ•ฉํ•˜๋˜ ๋Ÿฐํƒ€์ž„์— ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ Trunk-based ๋ฐฉ์‹์„ ์ง€์›ํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **๋ณต์žก๋„ vs ์ œ์–ด**: Git Flow๋Š” ์•ˆ์ „ํ•˜์ง€๋งŒ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๋น„์šฉ์ด ํฌ๋ฉฐ, GitHub Flow๋Š” ๋น ๋ฅด์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ํŒ€์˜ ๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ๊ฐ€ ๋‚œํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. +- **Merge vs Rebase**: Rebase๋Š” ๊นจ๋—ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ฐ•์ œ ํ‘ธ์‹œ(force push) ์œ„ํ—˜์ด ์žˆ๊ณ , Merge๋Š” ๋ณด์ˆ˜์ ์ด์ง€๋งŒ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ํŒ€์˜ ์ปจ๋ฒค์…˜ ํ•ฉ์˜๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]], [[CI-CD Pipeline Integration]] +- **Raw Source**: [[00_Raw/Git Flow]], [[00_Raw/Git Workflow]], [[00_Raw/GitHub Flow]], [[00_Raw/Branching Strategies]], [[00_Raw/Trunk-based Development]], [[00_Raw/Atomic Commits]], [[00_Raw/Pull Request (PR)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Modern Git Workflows and Branching Strategies"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics/Development/Legacy_React_Migration.md b/10_Wiki/Topics/Development/Legacy_React_Migration.md new file mode 100644 index 00000000..d926bb28 --- /dev/null +++ b/10_Wiki/Topics/Development/Legacy_React_Migration.md @@ -0,0 +1,47 @@ +--- +id: 7f8e9d2c-b1a3-4e5f-a0b2-c1d2e3f4a5b6 +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [react, legacy, migration, refactoring, incremental-migration, architecture, frontend] +last_reinforced: 2026-05-01 +github_commit: "wikification-legacy-react" +--- + +# [[Legacy React Migration & Refactoring Standard]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ˜„๋Œ€ํ™”๋Š” '์ „๋ฉด ์žฌ์ž‘์„ฑ(Rewrite)'์ด ์•„๋‹Œ '์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง(Incremental Refactor)'์„ ์›์น™์œผ๋กœ ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ์•ˆ์ „๋ง ๊ตฌ์ถ•, ์ปค์Šคํ…€ ํ›…์„ ํ†ตํ•œ ๋กœ์ง ๋ถ„๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…์„ ํ†ตํ•ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ๋ฆฌํŒฉํ† ๋ง์˜ ํ™ฉ๊ธˆ๋ฅ : Refactor, Do Not Rewrite +- **์•ˆ์ „๋ง ์„ ๊ตฌ์ถ•**: ์ฝ”๋“œ ์ˆ˜์ • ์ „ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋ฐ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Storybook, Chromatic ๋“ฑ)๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. +- **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜**: ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋ฐ”๊พธ๋Š” ๋Œ€์‹ , ์•Œ๋ฆผ์ด๋‚˜ ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์Šคํ† ์–ด๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ตœ์‹  ์ƒํƒœ(Zustand, TanStack Query ๋“ฑ)๋กœ ์ „ํ™˜ํ•œ๋‹ค. + +### 2. ์ปดํฌ๋„ŒํŠธ ๋ฐ ์–ธ์–ด์˜ ํ˜„๋Œ€ํ™” +- **ํ•จ์ˆ˜ํ˜• ์ „ํ™˜**: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks) ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ `useEffect` ์•ˆํ‹ฐํŒจํ„ด์„ ์ œ๊ฑฐํ•œ๋‹ค. +- **TypeScript ๋„์ž…**: ์ •์  ํƒ€์ดํ•‘์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋ฉฐ, ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•œ๋‹ค. +- **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ**: ๋น„๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ(300์ค„ ์ด์ƒ)์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ **์ปค์Šคํ…€ ํ›…**์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ UI์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + +### 3. ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๊ฐœํŽธ +- **์ƒํƒœ ๋ถ„ํ• **: ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ(TanStack Query), ์ „์—ญ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ(Zustand), URL ์ƒํƒœ ๋“ฑ์œผ๋กœ ๋ชฉ์ ์— ๋งž๊ฒŒ ํŒŒํŽธํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. +- **FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…**: ๊ธฐ์ˆ ์  ํŒŒ์ผ ์œ ํ˜•(Type-based) ๊ตฌ์กฐ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ **Feature-Sliced Design**์œผ๋กœ ๊ฐœํŽธํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์ธ๋‹ค. + +### 4. ์ฝ”๋“œ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฐ ํ‘œ์ค€ํ™” +- **๋„ค์ด๋ฐ ๊ทœ์น™**: `kebab-case`(ํŒŒ์ผ๋ช…/ํด๋”๋ช…), `PascalCase`(์ปดํฌ๋„ŒํŠธ), `camelCase`(ํ›…/๋ณ€์ˆ˜) ๋“ฑ ์šด์˜์ฒด์ œ ๋ฐ ํŒ€ ํ˜‘์—… ํ‘œ์ค€์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. +- **์ž๋™ํ™”**: ESLint, Prettier, Husky๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ์‹œ์ ์— ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ์œ„๋ฐ˜ ๋ฐ ํฌ๋งทํŒ…์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ถ”์ƒํ™”์˜ ํ•จ์ • (DRY vs KISS)**: ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ๋ธ”๋ž™๋ฐ•์Šคํ™”ํ•˜์—ฌ ๋””๋ฒ„๊น…์„ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)' ์›์น™์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. +- **๊ณผ๋„๊ธฐ์  ๋ณต์žก์„ฑ**: ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘์—๋Š” ๋ ˆ๊ฑฐ์‹œ์™€ ์‹ ๊ทœ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ๊ณต์กดํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต์„ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•œ๋‹ค. +- **์ดˆ๊ธฐ ์˜ค๋ฒ„ํ—ค๋“œ**: FSD ๋“ฑ์˜ ์—„๊ฒฉํ•œ ๊ตฌ์กฐ๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ณผ๋„ํ•œ ์„ค๊ณ„(Overkill)๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋งž์ถฐ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Feature-Sliced Design]], [[TanStack Query]], [[Zustand]], [[Unit Testing]], [[SOLID Principles]] +- **Raw Source**: [[00_Raw/๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜]], [[00_Raw/Incremental Migration]], [[00_Raw/Legacy React Codebase Modernization]], [[00_Raw/Legacy React Codebase Refactoring]], [[00_Raw/React Codebase Refactoring]], [[00_Raw/แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ แ„…แ…ตแ„‘แ…ขแ†จแ„แ…ฉแ„…แ…ตแ†ผ แ„†แ…ตแ†พ แ„แ…ฉแ„ƒแ…ณ แ„‹แ…ฒแ„Œแ…ตแ„‡แ…ฉแ„‰แ…ฎ]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Legacy React Migration & Refactoring Standard"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Biz/A2A.md b/10_Wiki/Topics_Biz/A2A.md new file mode 100644 index 00000000..dbc63bcc --- /dev/null +++ b/10_Wiki/Topics_Biz/A2A.md @@ -0,0 +1,41 @@ +--- +id: b3c4d5e6-f7a8-4b9c-0d1e-2f3a4b5c6d7e +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.97 +tags: [a2a, agent, protocol, multi-agent, communication, infrastructure] +last_reinforced: 2026-05-01 +github_commit: "wikification-a2a" +--- + +# [[Agent-to-Agent (A2A)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> A2A๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ•˜๋„ค์Šค๋‚˜ ์›๊ฒฉ์ง€์— ์œ„์น˜ํ•œ ์—์ด์ „ํŠธ๋“ค์ด ์ž‘์—…์„ ์œ„์ž„ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ƒํ˜ธ์šด์šฉ์„ฑ ๋„คํŠธ์›Œํฌ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. A2A์˜ ์ •์˜ ๋ฐ ๋ชฉ์  +- **์—์ด์ „ํŠธ ๊ฐ„ ํ†ต์‹ ๋ง**: ๋‹จ์ผ ํ•˜๋„ค์Šค๋ฅผ ๋„˜์–ด ๋ถ„์‚ฐ๋œ ์—์ด์ „ํŠธ ์ƒํƒœ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. +- **์ž‘์—… ์œ„์ž„(Delegation)**: ์ƒ์œ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ์—์ด์ „ํŠธ๊ฐ€ ํŠน์ • ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€ ์—์ด์ „ํŠธ์—๊ฒŒ ํ•˜์œ„ ์ž‘์—…์„ ๋งก๊ธฐ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ทœ๊ฒฉํ™”ํ•œ๋‹ค. + +### 2. ์ฃผ์š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ +- **๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ…**: ์š”์ฒญ-์‘๋‹ต(Request-Response) ๋ฐ ์ด๋ฒคํŠธ ๋ฐœํ–‰-๊ตฌ๋…(Pub-Sub) ๋ชจ๋ธ์„ ํ†ตํ•ด ์—์ด์ „ํŠธ ๊ฐ„ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. +- **์ปจํ…์ŠคํŠธ ์ „ํŒŒ**: ์ž‘์—…์„ ์œ„์ž„ํ•  ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ฌธ๋งฅ(Context)๊ณผ ๊ถŒํ•œ(Authorization)์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. +- **์—ญํ•  ์ •์˜**: ์†ก์‹ ์ž(Requester)์™€ ์ˆ˜์‹ ์ž(Worker) ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์ฑ…์ž„ ๋ฒ”์œ„๋ฅผ ๋ช…์‹œํ•œ๋‹ค. + +### 3. MCP์™€์˜ ๊ด€๊ณ„ +- **์ˆ˜ํ‰์ /์ˆ˜์ง์  ํ™•์žฅ**: MCP๊ฐ€ '์—์ด์ „ํŠธ-๋„๊ตฌ' ๊ฐ„์˜ ์ˆ˜์ง์  ํ†ตํ•ฉ์„ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, A2A๋Š” '์—์ด์ „ํŠธ-์—์ด์ „ํŠธ' ๊ฐ„์˜ ์ˆ˜ํ‰์  ํ˜‘์—…์„ ๋‹ด๋‹นํ•˜์—ฌ ์™„์ „ํ•œ ํ†ต์‹  ์Šคํƒ์„ ํ˜•์„ฑํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **๋ณด์•ˆ ๊ฒฝ๊ณ„**: ์›๊ฒฉ ์—์ด์ „ํŠธ ํ˜ธ์ถœ ์‹œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ์ž…๋  ์œ„ํ—˜์ด ์žˆ์œผ๋ฉฐ, ๊ต์ฐจ ์ธ์ฆ ๋ฐ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๊ณ„์ธต์ด ํ•„์ˆ˜์ ์ด๋‹ค. +- **์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ณต์žก์„ฑ**: ์—์ด์ „ํŠธ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ†ต์‹  ์ง€์—ฐ๊ณผ ์ƒํƒœ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ์„ค๊ณ„๊ฐ€ ์š”๊ตฌ๋œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Model Context Protocol (MCP)]], [[Agentic Software Engineering]] +- **Raw Source**: [[00_Raw/Agent-to-Agent (A2A)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Agent-to-Agent (A2A) Protocol"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Biz/ACI.md b/10_Wiki/Topics_Biz/ACI.md new file mode 100644 index 00000000..23cbbc26 --- /dev/null +++ b/10_Wiki/Topics_Biz/ACI.md @@ -0,0 +1,42 @@ +--- +id: a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.98 +tags: [aci, agent, interface, llm, infrastructure, harness] +last_reinforced: 2026-05-01 +github_commit: "wikification-aci" +--- + +# [[Agent-Computer Interface (ACI)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ACI๋Š” ์ธ๊ฐ„ ์ค‘์‹ฌ์˜ UI๋ฅผ ๋„˜์–ด, LLM ์—์ด์ „ํŠธ๊ฐ€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ(OS, ํŒŒ์ผ, ๋„๊ตฌ)์„ ํšจ์œจ์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, ์—์ด์ „ํŠธ์˜ ๊ด€์ฐฐ(Observation) ๋ฐ ํ–‰๋™(Action) ๊ณต๊ฐ„์˜ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ์š”์†Œ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ACI์˜ ์ •์˜ ๋ฐ ํ•„์š”์„ฑ +- **๋ชจ๋ธ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค**: ์ธ๊ฐ„์—๊ฒŒ๋Š” ์‹œ๊ฐ์  UI(GUI)๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ์—์ด์ „ํŠธ์—๊ฒŒ๋Š” ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ(JSON, XML)๋‚˜ ๊ฐ„๊ฒฐํ•œ ํ…์ŠคํŠธ ์ถœ๋ ฅ์ด ๋” ํšจ์œจ์ ์ด๋‹ค. +- **์ธ์ง€ ๋ถ€ํ•˜ ๊ฐ์†Œ**: ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ์  ๋…ธ์ด์ฆˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์—์ด์ „ํŠธ๊ฐ€ ํ–‰๋™์˜ ๊ฒฐ๊ณผ์™€ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ณด๋ฅผ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค. + +### 2. ACI ์„ค๊ณ„ ์›์น™ +- **๊ตฌ์กฐ์  ๋ช…ํ™•์„ฑ**: ๋„๊ตฌ์˜ ์ธ์ž ์Šคํ‚ค๋งˆ(Schema)์™€ ๋ฐ˜ํ™˜๊ฐ’ ํ˜•์‹์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ๋ชจ๋ธ์˜ ํŒŒ์‹ฑ ์˜ค๋ฅ˜๋ฅผ ์ค„์ธ๋‹ค. +- **์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์˜ ํ’๋ถ€ํ•จ**: ๋‹จ์ˆœํ•œ ์‹คํŒจ ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋‹Œ, ๋ชจ๋ธ์ด ๋‹ค์Œ ํ–‰๋™์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ํžŒํŠธ(์˜ˆ: "ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค...")๋ฅผ ์ œ๊ณตํ•œ๋‹ค. +- **์ƒํƒœ์˜ ๊ฐ€์‹œ์„ฑ**: ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ, ์ƒŒ๋“œ๋ฐ•์Šค ์ƒํƒœ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ ์—์ด์ „ํŠธ๊ฐ€ ์ถ”๋ก ์— ํ•„์š”ํ•œ ๋ฌธ๋งฅ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋…ธ์ถœํ•œ๋‹ค. + +### 3. ํ•˜๋„ค์Šค ๋‚ด์—์„œ์˜ ์—ญํ•  +- **์ž…์ถœ๋ ฅ ๋ž˜ํผ**: ํ•˜๋„ค์Šค๋Š” ์ปดํ“จํ„ฐ์˜ ์›์‹œ ์ถœ๋ ฅ์„ ACI ํ‘œ์ค€์— ๋งž์ถฐ ๊ฐ€๊ณตํ•˜์—ฌ ๋ชจ๋ธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋ฉฐ, ๋ชจ๋ธ์˜ ์ž์—ฐ์–ด ์š”์ฒญ์„ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. +- **์ธํ„ฐํŽ˜์ด์Šค ์ตœ์ ํ™”**: ํŠน์ • ๋ชจ๋ธ์˜ ํŠน์„ฑ(์˜ˆ: ๊ธด JSON์— ๊ฐ•ํ•จ, ํŠน์ • ํƒœ๊ทธ ํ˜•์‹ ์„ ํ˜ธ)์— ๋งž์ถฐ ACI๋ฅผ ํŠœ๋‹ํ•˜์—ฌ ์ž‘์—… ์„ฑ๊ณต๋ฅ (Pass@1)์„ ๋†’์ธ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ถ”์ƒํ™” vs ์ œ์–ด๊ถŒ**: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„ˆ๋ฌด ๊ณ ์ˆ˜์ค€์œผ๋กœ ์ถ”์ƒํ™”ํ•˜๋ฉด ์—์ด์ „ํŠธ์˜ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ๋„ˆ๋ฌด ์ €์ˆ˜์ค€(์˜ˆ: raw byte stream)์œผ๋กœ ๋‘๋ฉด ์ธ์ง€ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰์ฆํ•œ๋‹ค. +- **๋ฒ”์šฉ ํ‘œ์ค€์˜ ๋ถ€์žฌ**: ๊ฐ ํ•˜๋„ค์Šค๋งˆ๋‹ค ACI ์„ค๊ณ„๊ฐ€ ์ƒ์ดํ•˜์—ฌ ์—์ด์ „ํŠธ์˜ ํ–‰๋™ ํŒจํ„ด์ด ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค์— ๊ณ ์ฐฉํ™”(Coupling)๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Model Context Protocol (MCP)]], [[Context Engineering]] +- **Raw Source**: [[00_Raw/Agent-Computer Interfaces (ACI)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Agent-Computer Interface (ACI) Design Principle"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Biz/Context_Engineering.md b/10_Wiki/Topics_Biz/Context_Engineering.md new file mode 100644 index 00000000..0c7b0062 --- /dev/null +++ b/10_Wiki/Topics_Biz/Context_Engineering.md @@ -0,0 +1,41 @@ +--- +id: d5e6f7a8-b9c0-4d1e-2f3a-4b5c6d7e8f9a +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.99 +tags: [context, engineering, llm, optimization, token-management, agent] +last_reinforced: 2026-05-01 +github_commit: "wikification-context-engineering" +--- + +# [[Context Engineering]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ์ปจํ…์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์€ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ์„ ๋„˜์–ด, ์—์ด์ „ํŠธ์˜ ์ œํ•œ๋œ ์ธ์ง€ ์ž์›(Context Window)์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๋ฅผ ํ•„ํ„ฐ๋ง, ์••์ถ•, ์šฐ์„ ์ˆœ์œ„ํ™”ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ถ”๋ก  ์ถฉ์‹ค๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ •๊ตํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ํ”„๋กฌํ”„ํŠธ์—์„œ ์ปจํ…์ŠคํŠธ๋กœ์˜ ์ง„ํ™” +- **์ •์ ์—์„œ ๋™์ ์œผ๋กœ**: ๊ณ ์ •๋œ ์ง€์‹œ๋ฌธ(Prompt) ์ž‘์„ฑ์—์„œ, ๋Ÿฐํƒ€์ž„ ์ƒํ™ฉ์— ๋งž์ถฐ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์ฃผ์ž…ํ•˜๋Š” ๋™์  ๊ด€๋ฆฌ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ „ํ™˜๋˜์—ˆ๋‹ค. +- **์ธ์ง€ ๋ถ€ํ•˜ ์ œ์–ด**: ๋ชจ๋ธ์ด ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋ณด๊ฒŒ ํ•˜๋Š” ๋Œ€์‹ , ํ˜„์žฌ ์ž‘์—…์— ๊ฒฐ์ •์ ์ธ ์ •๋ณด(Salient Information)๋งŒ ๋…ธ์ถœํ•˜์—ฌ ์ถ”๋ก ์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ธ๋‹ค. + +### 2. ํ•ต์‹ฌ ๊ธฐ์ˆ  ๋ฐ ์ „๋žต +- **์„ ํƒ์  ์ฃผ์ž… (Selective Injection)**: RAG ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ค‘ ๊ด€๋ จ์„ฑ ๋†’์€ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ์ปจํ…์ŠคํŠธ์— ํฌํ•จ์‹œํ‚จ๋‹ค. +- **์ ์‘ํ˜• ์••์ถ• (Adaptive Compaction)**: ๊ณผ๊ฑฐ ๋Œ€ํ™”๋‚˜ ์ž‘์—… ์ด๋ ฅ์„ ์š”์•ฝ(Summary)ํ•˜๊ฑฐ๋‚˜ ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ํ† ํฐ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•œ๋‹ค. +- **์šฐ์„ ์ˆœ์œ„ํ™” (Prioritization)**: ์‹œ์Šคํ…œ ์ง€์‹œ์–ด, ์ตœ๊ทผ ๋„๊ตฌ ๊ฒฐ๊ณผ, ์žฅ๊ธฐ ๊ธฐ์–ต ๋“ฑ์„ ๋ ˆ์ด์–ด๋ณ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ์กฐ์ •ํ•œ๋‹ค. + +### 3. ํ•˜๋„ค์Šค์˜ C-์ปดํฌ๋„ŒํŠธ +- ํ•˜๋„ค์Šค๋Š” ๋ชจ๋ธ์ด ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” '์ฐฝ(Window)'์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ปจํ…์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์€ ์ด ์ฐฝ ๋‚ด๋ถ€๋ฅผ ์ฑ„์šฐ๋Š” ์ •์ฑ…(Policy)๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ด๋‹นํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ปจํ…์ŠคํŠธ ๋ถ€ํŒจ (Context Rot)**: ์ •๋ณด๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์œ ์ง€ํ•˜๋ฉด ์ฃผ์˜ ๋ถ„์‚ฐ(Attention Dilution)์ด ๋ฐœ์ƒํ•˜๊ณ , ๋„ˆ๋ฌด ์ ๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ์ •๋ณด ์ƒ์‹ค๋กœ ์ธํ•œ ์ถ”๋ก  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +- **ํ† ํฐ ๊ฒฝ์ œ์„ฑ**: ๊ธด ์ปจํ…์ŠคํŠธ ๋ชจ๋ธ์ด ๋“ฑ์žฅํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์—ฐ์‚ฐ ๋น„์šฉ๊ณผ ์ง€์—ฐ ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ํšจ์œจ์ ์ธ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ๋Š” ํ•„์ˆ˜์ ์ธ ์ตœ์ ํ™” ์˜์—ญ์ด๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[RAG (Retrieval-Augmented Generation)]], [[Agent State Store]] +- **Raw Source**: [[00_Raw/Context Engineering]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Context Engineering Strategies"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Biz/Engineering_Principles.md b/10_Wiki/Topics_Biz/Engineering_Principles.md new file mode 100644 index 00000000..efc71f74 --- /dev/null +++ b/10_Wiki/Topics_Biz/Engineering_Principles.md @@ -0,0 +1,45 @@ +--- +id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.99 +tags: [engineering-principles, solid, dry, kiss, yagni, clean-code, software-engineering] +last_reinforced: 2026-05-01 +github_commit: "wikification-engineering-principles" +--- + +# [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์›์น™๋“ค์€ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ํ†ต์ œํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋ฉฐ, ํŠนํžˆ SOLID์™€ DRY/KISS/YAGNI๋Š” '๋‹จ์ˆœํ•จ'๊ณผ '์œ ์—ฐํ•จ' ์‚ฌ์ด์˜ ์ตœ์ ์˜ ๊ท ํ˜•์ ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ง€์นจ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. SOLID ์›์น™ (Object-Oriented Design) +- **SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)**: ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ/์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ฑ…์ž„(๋ณ€๊ฒฝ ์ด์œ )๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. React์—์„œ๋Š” ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ชผ๊ฐœ๋Š” ํ•ต์‹ฌ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค. +- **OCP (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ๋‹ค. +- **LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)**: ์ž์‹ ํด๋ž˜์Šค(๋˜๋Š” ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ)๋Š” ๋ถ€๋ชจ์˜ ์—ญํ• ์„ ์˜จ์ „ํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. +- **ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)**: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค(Props)์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์ž˜๊ฒŒ ์ชผ๊ฐ ๋‹ค. +- **DIP (์˜์กด์„ฑ ์—ญ์ „ ์›์น™)**: ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค. + +### 2. Pragmatic Principles (DRY, KISS, YAGNI) +- **DRY (Don't Repeat Yourself)**: ์ง€์‹์˜ ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ์ถ”์ถœํ•œ๋‹ค. +- **KISS (Keep It Simple, Stupid)**: ๋‹จ์ˆœํ•จ์ด ๊ถ๊ทน์˜ ์ •๊ตํ•จ์ด๋‹ค. ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ณด๋‹ค ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์šฐ์„ ํ•œ๋‹ค. +- **YAGNI (You Aren't Gonna Need It)**: ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ๊ฒฝ๊ณ„ํ•œ๋‹ค. + +### 3. Clean Code ์‹ค๋ฌด +- **๊ฐ€๋…์„ฑ ์šฐ์„ **: ์ฝ”๋“œ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ๊ธฐ ์œ„ํ•จ์ด ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ๋‹ค. ๋ช…ํ™•ํ•œ ๋ณ€์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ํฌ๊ธฐ ์กฐ์ ˆ์ด ํ•„์ˆ˜์ ์ด๋‹ค. +- **๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ**: ์›์น™์„ ์ค€์ˆ˜ํ•œ ์ฝ”๋“œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด(Testable) ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **DRY vs KISS**: ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฌด๋ฆฌํ•œ ์ถ”์ƒํ™”๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)'๊ฐ€ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ด๋‹ค. +- **YAGNI vs ํ™•์žฅ์„ฑ**: ๋ฏธ๋ž˜๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค. YAGNI๋Š” '๊ธฐ๋Šฅ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ณ , SOLID๋Š” '๊ตฌ์กฐ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Legacy React Migration & Refactoring Standard]], [[Custom Hooks]], [[Feature-Sliced Design]] +- **Raw Source**: [[00_Raw/DRY]], [[00_Raw/KISS]], [[00_Raw/YAGNI]], [[00_Raw/Single Responsibility Principle]], [[00_Raw/Clean Code and SOLID Principles]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Core Engineering Principles (SOLID, DRY, KISS, YAGNI)"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Biz/Git_Workflows.md b/10_Wiki/Topics_Biz/Git_Workflows.md new file mode 100644 index 00000000..252c9a01 --- /dev/null +++ b/10_Wiki/Topics_Biz/Git_Workflows.md @@ -0,0 +1,43 @@ +--- +id: b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [git, workflow, branching, github-flow, git-flow, trunk-based-development, devops] +last_reinforced: 2026-05-01 +github_commit: "wikification-git-workflow" +--- + +# [[Modern Git Workflows & Branching Strategies]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ํšจ์œจ์ ์ธ Git ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํŒ€์˜ ๊ทœ๋ชจ์™€ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ์— ๋งž์ถฐ ์„ ํƒ๋˜์–ด์•ผ ํ•˜๋ฉฐ, Trunk-based Development์™€ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ์˜ Feature Branch๋ฅผ ํ†ตํ•ด ์ง€์†์  ํ†ตํ•ฉ(CI)์˜ ๊ฐ€์น˜๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ์ฃผ์š” ์ „๋žต๋ณ„ ํŠน์ง• +- **Git Flow**: ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ. `master`, `develop`, `feature`, `release`, `hotfix` ๋ธŒ๋žœ์น˜๋ฅผ ์—„๊ฒฉํžˆ ๊ด€๋ฆฌํ•œ๋‹ค. +- **GitHub Flow**: ์ง€์†์  ๋ฐฐํฌ(CD)์— ์ตœ์ ํ™”๋œ ๋‹จ์ˆœํ•œ ๋ชจ๋ธ. `main` ๋ธŒ๋žœ์น˜์™€ ์งง์€ ์ˆ˜๋ช…์˜ `feature` ๋ธŒ๋žœ์น˜๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, PR์„ ํ†ตํ•ด ์ƒ์‹œ ๋ฐฐํฌํ•œ๋‹ค. +- **Trunk-based Development**: ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋ฃจ์—๋„ ์—ฌ๋Ÿฌ ๋ฒˆ `main`์— ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹. ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค. + +### 2. ํ˜‘์—… ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ +- **Pull Request (PR)**: ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ํ•„์ˆ˜ ๊ด€๋ฌธ. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์˜๋„๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ๋ณ‘ํ•ฉ๋œ๋‹ค. +- **Conventional Commits**: `feat:`, `fix:`, `refactor:` ๋“ฑ ๊ทœ๊ฒฉํ™”๋œ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค. +- **Atomic Commits**: ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ๋งŒ ๋‹ด์•„์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋กค๋ฐฑ๊ณผ ๋””๋ฒ„๊น…(bisect)์„ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค. + +### 3. ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์„ ์œ„ํ•œ ์ „๋žต +- **์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ**: ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฉฐ์น ์”ฉ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๋น ๋ฅด๊ฒŒ `main`์— ํ†ตํ•ฉํ•˜์—ฌ 'Merge Hell'์„ ๋ฐฉ์ง€ํ•œ๋‹ค. +- **Feature Flags**: ๋Œ€๊ทœ๋ชจ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฝ”๋“œ๋Š” ๋ณ‘ํ•ฉํ•˜๋˜ ๋Ÿฐํƒ€์ž„์— ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ Trunk-based ๋ฐฉ์‹์„ ์ง€์›ํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **๋ณต์žก๋„ vs ์ œ์–ด**: Git Flow๋Š” ์•ˆ์ „ํ•˜์ง€๋งŒ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๋น„์šฉ์ด ํฌ๋ฉฐ, GitHub Flow๋Š” ๋น ๋ฅด์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ํŒ€์˜ ๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ๊ฐ€ ๋‚œํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. +- **Merge vs Rebase**: Rebase๋Š” ๊นจ๋—ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ฐ•์ œ ํ‘ธ์‹œ(force push) ์œ„ํ—˜์ด ์žˆ๊ณ , Merge๋Š” ๋ณด์ˆ˜์ ์ด์ง€๋งŒ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ํŒ€์˜ ์ปจ๋ฒค์…˜ ํ•ฉ์˜๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]], [[CI-CD Pipeline Integration]] +- **Raw Source**: [[00_Raw/Git Flow]], [[00_Raw/Git Workflow]], [[00_Raw/GitHub Flow]], [[00_Raw/Branching Strategies]], [[00_Raw/Trunk-based Development]], [[00_Raw/Atomic Commits]], [[00_Raw/Pull Request (PR)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Modern Git Workflows and Branching Strategies"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Biz/Legacy_React_Migration.md b/10_Wiki/Topics_Biz/Legacy_React_Migration.md new file mode 100644 index 00000000..d926bb28 --- /dev/null +++ b/10_Wiki/Topics_Biz/Legacy_React_Migration.md @@ -0,0 +1,47 @@ +--- +id: 7f8e9d2c-b1a3-4e5f-a0b2-c1d2e3f4a5b6 +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [react, legacy, migration, refactoring, incremental-migration, architecture, frontend] +last_reinforced: 2026-05-01 +github_commit: "wikification-legacy-react" +--- + +# [[Legacy React Migration & Refactoring Standard]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ˜„๋Œ€ํ™”๋Š” '์ „๋ฉด ์žฌ์ž‘์„ฑ(Rewrite)'์ด ์•„๋‹Œ '์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง(Incremental Refactor)'์„ ์›์น™์œผ๋กœ ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ์•ˆ์ „๋ง ๊ตฌ์ถ•, ์ปค์Šคํ…€ ํ›…์„ ํ†ตํ•œ ๋กœ์ง ๋ถ„๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…์„ ํ†ตํ•ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ๋ฆฌํŒฉํ† ๋ง์˜ ํ™ฉ๊ธˆ๋ฅ : Refactor, Do Not Rewrite +- **์•ˆ์ „๋ง ์„ ๊ตฌ์ถ•**: ์ฝ”๋“œ ์ˆ˜์ • ์ „ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋ฐ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Storybook, Chromatic ๋“ฑ)๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. +- **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜**: ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋ฐ”๊พธ๋Š” ๋Œ€์‹ , ์•Œ๋ฆผ์ด๋‚˜ ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์Šคํ† ์–ด๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ตœ์‹  ์ƒํƒœ(Zustand, TanStack Query ๋“ฑ)๋กœ ์ „ํ™˜ํ•œ๋‹ค. + +### 2. ์ปดํฌ๋„ŒํŠธ ๋ฐ ์–ธ์–ด์˜ ํ˜„๋Œ€ํ™” +- **ํ•จ์ˆ˜ํ˜• ์ „ํ™˜**: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks) ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ `useEffect` ์•ˆํ‹ฐํŒจํ„ด์„ ์ œ๊ฑฐํ•œ๋‹ค. +- **TypeScript ๋„์ž…**: ์ •์  ํƒ€์ดํ•‘์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋ฉฐ, ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•œ๋‹ค. +- **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ**: ๋น„๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ(300์ค„ ์ด์ƒ)์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ **์ปค์Šคํ…€ ํ›…**์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ UI์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + +### 3. ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๊ฐœํŽธ +- **์ƒํƒœ ๋ถ„ํ• **: ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ(TanStack Query), ์ „์—ญ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ(Zustand), URL ์ƒํƒœ ๋“ฑ์œผ๋กœ ๋ชฉ์ ์— ๋งž๊ฒŒ ํŒŒํŽธํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. +- **FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…**: ๊ธฐ์ˆ ์  ํŒŒ์ผ ์œ ํ˜•(Type-based) ๊ตฌ์กฐ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ **Feature-Sliced Design**์œผ๋กœ ๊ฐœํŽธํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์ธ๋‹ค. + +### 4. ์ฝ”๋“œ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฐ ํ‘œ์ค€ํ™” +- **๋„ค์ด๋ฐ ๊ทœ์น™**: `kebab-case`(ํŒŒ์ผ๋ช…/ํด๋”๋ช…), `PascalCase`(์ปดํฌ๋„ŒํŠธ), `camelCase`(ํ›…/๋ณ€์ˆ˜) ๋“ฑ ์šด์˜์ฒด์ œ ๋ฐ ํŒ€ ํ˜‘์—… ํ‘œ์ค€์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. +- **์ž๋™ํ™”**: ESLint, Prettier, Husky๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ์‹œ์ ์— ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ์œ„๋ฐ˜ ๋ฐ ํฌ๋งทํŒ…์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ถ”์ƒํ™”์˜ ํ•จ์ • (DRY vs KISS)**: ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ๋ธ”๋ž™๋ฐ•์Šคํ™”ํ•˜์—ฌ ๋””๋ฒ„๊น…์„ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)' ์›์น™์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. +- **๊ณผ๋„๊ธฐ์  ๋ณต์žก์„ฑ**: ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘์—๋Š” ๋ ˆ๊ฑฐ์‹œ์™€ ์‹ ๊ทœ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ๊ณต์กดํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต์„ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•œ๋‹ค. +- **์ดˆ๊ธฐ ์˜ค๋ฒ„ํ—ค๋“œ**: FSD ๋“ฑ์˜ ์—„๊ฒฉํ•œ ๊ตฌ์กฐ๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ณผ๋„ํ•œ ์„ค๊ณ„(Overkill)๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋งž์ถฐ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Feature-Sliced Design]], [[TanStack Query]], [[Zustand]], [[Unit Testing]], [[SOLID Principles]] +- **Raw Source**: [[00_Raw/๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜]], [[00_Raw/Incremental Migration]], [[00_Raw/Legacy React Codebase Modernization]], [[00_Raw/Legacy React Codebase Refactoring]], [[00_Raw/React Codebase Refactoring]], [[00_Raw/แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ แ„…แ…ตแ„‘แ…ขแ†จแ„แ…ฉแ„…แ…ตแ†ผ แ„†แ…ตแ†พ แ„แ…ฉแ„ƒแ…ณ แ„‹แ…ฒแ„Œแ…ตแ„‡แ…ฉแ„‰แ…ฎ]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Legacy React Migration & Refactoring Standard"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Biz/PEV_Loop.md b/10_Wiki/Topics_Biz/PEV_Loop.md new file mode 100644 index 00000000..3fb9b85a --- /dev/null +++ b/10_Wiki/Topics_Biz/PEV_Loop.md @@ -0,0 +1,41 @@ +--- +id: e6f7a8b9-c0d1-4e2f-3a4b-5c6d7e8f9a0b +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.99 +tags: [pev-loop, execution, verification, agent, harness, reliability] +last_reinforced: 2026-05-01 +github_commit: "wikification-pev-loop" +--- + +# [[Plan-Execute-Verify (PEV) Loop]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> PEV ๋ฃจํ”„๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ฆ‰ํฅ์ ์œผ๋กœ ํ–‰๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„ํš, ์ œํ•œ๋œ ์‹คํ–‰, ์—„๊ฒฉํ•œ ๊ฒ€์ฆ์˜ 3๋‹จ๊ณ„๋ฅผ ๊ฐ•์ œํ•˜์—ฌ ์ž์œจ ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์•„ํ‚คํ…์ฒ˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์‹คํ–‰ ํŒจํ„ด์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. 3๋‹จ๊ณ„ ์‹คํ–‰ ํŒŒ์ดํ”„๋ผ์ธ +- **Plan (๊ณ„ํš)**: ๋ฌธ์ œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ์ˆ˜์šฉ ๊ธฐ์ค€(Acceptance Criteria)์„ ํฌํ•จํ•œ ์ƒ์„ธ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. ์ด๋Š” ์ถ”๋ก ์˜ ๋น„๊ฒฐ์ •์„ฑ ๋ฌธ์ œ๋ฅผ ์ค„์ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. +- **Execute (์‹คํ–‰)**: ์ˆ˜๋ฆฝ๋œ ๊ณ„ํš์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์‹คํ–‰ ์ „ ๊ฒŒ์ดํŠธ(Pre-execution gates)๊ฐ€ ๊ฐœ์ž…ํ•˜์—ฌ ์ธ์ž ์œ ํšจ์„ฑ ๋ฐ ๊ถŒํ•œ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ†ต์ œํ•œ๋‹ค. +- **Verify (๊ฒ€์ฆ)**: ๋‹จ์ˆœ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋„˜์–ด ๊ณ„ํš๊ณผ์˜ ์ผ์น˜์„ฑ(Plan Alignment)์„ ํ‰๊ฐ€ํ•œ๋‹ค. ์‹คํŒจ ์‹œ ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์„ ์ถ”๋ก  ๋ฃจํ”„๋กœ ๋Œ๋ ค๋ณด๋‚ด ์ž๊ฐ€ ์ˆ˜์ •์„ ์œ ๋„ํ•œ๋‹ค. + +### 2. ํ•˜๋„ค์Šค ๊ฒŒ์ดํŠธ (Harness Gates) +- **Pre-execution gates**: ๋„๊ตฌ ํ˜ธ์ถœ ์ „ ์ž‘์—… ๊ณต๊ฐ„ ๋ฐ ๊ถŒํ•œ์„ ํ™•์ธํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ํ–‰๋™์„ ์›์ฒœ ์ฐจ๋‹จํ•œ๋‹ค. +- **Post-execution verification**: ๋ฆฐํ„ฐ, ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ, ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ๊ฒ€์‚ฌ ๋“ฑ์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์„ ๋ณด์ฆํ•œ๋‹ค. + +### 3. ์‹ ๋ขฐ์„ฑ ์ค‘์‹ฌ ์„ค๊ณ„ +- '์ผ๋‹จ ํ•ด๋ณด๊ณ  ํ™•์ธํ•˜๊ธฐ(Generate-and-Check)' ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , ํ•˜๋„ค์Šค ๊ณ„์ธต์—์„œ ๊ฒฐ์ •๋ก ์  ๊ทœ์น™์„ ๊ฐ•์ œํ•จ์œผ๋กœ์จ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธ‰์˜ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ง€์—ฐ ์‹œ๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ**: ๋‹จ๊ณ„๋ฅผ ๊ฐ•์ œํ•จ์— ๋”ฐ๋ผ ๊ฐ„๋‹จํ•œ ์ž‘์—…์—์„œ๋„ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋ฉฐ ํ† ํฐ ์†Œ๋ชจ๋Ÿ‰์ด ๋Š˜์–ด๋‚œ๋‹ค. +- **๊ฒ€์ฆ ๋กœ์ง์˜ ๋ณต์žก์„ฑ**: ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€๋ฅผ ๋„˜์–ด ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” '๊ณ„ํš ์ผ์น˜์„ฑ' ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„์— ๋†’์€ ๊ธฐ์ˆ ์  ๋‚œ์ด๋„๊ฐ€ ๋”ฐ๋ฅธ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Pre-execution gates]], [[Plan alignment]], [[Generate-and-Check]] +- **Raw Source**: [[00_Raw/Plan-Execute-Verify (PEV) Loop]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Plan-Execute-Verify (PEV) Loop Architecture"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Blog/A2A.md b/10_Wiki/Topics_Blog/A2A.md new file mode 100644 index 00000000..dbc63bcc --- /dev/null +++ b/10_Wiki/Topics_Blog/A2A.md @@ -0,0 +1,41 @@ +--- +id: b3c4d5e6-f7a8-4b9c-0d1e-2f3a4b5c6d7e +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.97 +tags: [a2a, agent, protocol, multi-agent, communication, infrastructure] +last_reinforced: 2026-05-01 +github_commit: "wikification-a2a" +--- + +# [[Agent-to-Agent (A2A)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> A2A๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ•˜๋„ค์Šค๋‚˜ ์›๊ฒฉ์ง€์— ์œ„์น˜ํ•œ ์—์ด์ „ํŠธ๋“ค์ด ์ž‘์—…์„ ์œ„์ž„ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ƒํ˜ธ์šด์šฉ์„ฑ ๋„คํŠธ์›Œํฌ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. A2A์˜ ์ •์˜ ๋ฐ ๋ชฉ์  +- **์—์ด์ „ํŠธ ๊ฐ„ ํ†ต์‹ ๋ง**: ๋‹จ์ผ ํ•˜๋„ค์Šค๋ฅผ ๋„˜์–ด ๋ถ„์‚ฐ๋œ ์—์ด์ „ํŠธ ์ƒํƒœ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. +- **์ž‘์—… ์œ„์ž„(Delegation)**: ์ƒ์œ„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ์—์ด์ „ํŠธ๊ฐ€ ํŠน์ • ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€ ์—์ด์ „ํŠธ์—๊ฒŒ ํ•˜์œ„ ์ž‘์—…์„ ๋งก๊ธฐ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ทœ๊ฒฉํ™”ํ•œ๋‹ค. + +### 2. ์ฃผ์š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ +- **๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ…**: ์š”์ฒญ-์‘๋‹ต(Request-Response) ๋ฐ ์ด๋ฒคํŠธ ๋ฐœํ–‰-๊ตฌ๋…(Pub-Sub) ๋ชจ๋ธ์„ ํ†ตํ•ด ์—์ด์ „ํŠธ ๊ฐ„ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. +- **์ปจํ…์ŠคํŠธ ์ „ํŒŒ**: ์ž‘์—…์„ ์œ„์ž„ํ•  ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ฌธ๋งฅ(Context)๊ณผ ๊ถŒํ•œ(Authorization)์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. +- **์—ญํ•  ์ •์˜**: ์†ก์‹ ์ž(Requester)์™€ ์ˆ˜์‹ ์ž(Worker) ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์ฑ…์ž„ ๋ฒ”์œ„๋ฅผ ๋ช…์‹œํ•œ๋‹ค. + +### 3. MCP์™€์˜ ๊ด€๊ณ„ +- **์ˆ˜ํ‰์ /์ˆ˜์ง์  ํ™•์žฅ**: MCP๊ฐ€ '์—์ด์ „ํŠธ-๋„๊ตฌ' ๊ฐ„์˜ ์ˆ˜์ง์  ํ†ตํ•ฉ์„ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, A2A๋Š” '์—์ด์ „ํŠธ-์—์ด์ „ํŠธ' ๊ฐ„์˜ ์ˆ˜ํ‰์  ํ˜‘์—…์„ ๋‹ด๋‹นํ•˜์—ฌ ์™„์ „ํ•œ ํ†ต์‹  ์Šคํƒ์„ ํ˜•์„ฑํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **๋ณด์•ˆ ๊ฒฝ๊ณ„**: ์›๊ฒฉ ์—์ด์ „ํŠธ ํ˜ธ์ถœ ์‹œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ์ž…๋  ์œ„ํ—˜์ด ์žˆ์œผ๋ฉฐ, ๊ต์ฐจ ์ธ์ฆ ๋ฐ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๊ณ„์ธต์ด ํ•„์ˆ˜์ ์ด๋‹ค. +- **์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ณต์žก์„ฑ**: ์—์ด์ „ํŠธ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ†ต์‹  ์ง€์—ฐ๊ณผ ์ƒํƒœ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ์„ค๊ณ„๊ฐ€ ์š”๊ตฌ๋œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Model Context Protocol (MCP)]], [[Agentic Software Engineering]] +- **Raw Source**: [[00_Raw/Agent-to-Agent (A2A)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Agent-to-Agent (A2A) Protocol"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Blog/ACI.md b/10_Wiki/Topics_Blog/ACI.md new file mode 100644 index 00000000..23cbbc26 --- /dev/null +++ b/10_Wiki/Topics_Blog/ACI.md @@ -0,0 +1,42 @@ +--- +id: a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.98 +tags: [aci, agent, interface, llm, infrastructure, harness] +last_reinforced: 2026-05-01 +github_commit: "wikification-aci" +--- + +# [[Agent-Computer Interface (ACI)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ACI๋Š” ์ธ๊ฐ„ ์ค‘์‹ฌ์˜ UI๋ฅผ ๋„˜์–ด, LLM ์—์ด์ „ํŠธ๊ฐ€ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ(OS, ํŒŒ์ผ, ๋„๊ตฌ)์„ ํšจ์œจ์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, ์—์ด์ „ํŠธ์˜ ๊ด€์ฐฐ(Observation) ๋ฐ ํ–‰๋™(Action) ๊ณต๊ฐ„์˜ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ์š”์†Œ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ACI์˜ ์ •์˜ ๋ฐ ํ•„์š”์„ฑ +- **๋ชจ๋ธ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค**: ์ธ๊ฐ„์—๊ฒŒ๋Š” ์‹œ๊ฐ์  UI(GUI)๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ์—์ด์ „ํŠธ์—๊ฒŒ๋Š” ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ(JSON, XML)๋‚˜ ๊ฐ„๊ฒฐํ•œ ํ…์ŠคํŠธ ์ถœ๋ ฅ์ด ๋” ํšจ์œจ์ ์ด๋‹ค. +- **์ธ์ง€ ๋ถ€ํ•˜ ๊ฐ์†Œ**: ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ์  ๋…ธ์ด์ฆˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์—์ด์ „ํŠธ๊ฐ€ ํ–‰๋™์˜ ๊ฒฐ๊ณผ์™€ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ณด๋ฅผ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค. + +### 2. ACI ์„ค๊ณ„ ์›์น™ +- **๊ตฌ์กฐ์  ๋ช…ํ™•์„ฑ**: ๋„๊ตฌ์˜ ์ธ์ž ์Šคํ‚ค๋งˆ(Schema)์™€ ๋ฐ˜ํ™˜๊ฐ’ ํ˜•์‹์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ๋ชจ๋ธ์˜ ํŒŒ์‹ฑ ์˜ค๋ฅ˜๋ฅผ ์ค„์ธ๋‹ค. +- **์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์˜ ํ’๋ถ€ํ•จ**: ๋‹จ์ˆœํ•œ ์‹คํŒจ ๋ฉ”์‹œ์ง€๊ฐ€ ์•„๋‹Œ, ๋ชจ๋ธ์ด ๋‹ค์Œ ํ–‰๋™์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ํžŒํŠธ(์˜ˆ: "ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค...")๋ฅผ ์ œ๊ณตํ•œ๋‹ค. +- **์ƒํƒœ์˜ ๊ฐ€์‹œ์„ฑ**: ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ, ์ƒŒ๋“œ๋ฐ•์Šค ์ƒํƒœ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ ์—์ด์ „ํŠธ๊ฐ€ ์ถ”๋ก ์— ํ•„์š”ํ•œ ๋ฌธ๋งฅ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋…ธ์ถœํ•œ๋‹ค. + +### 3. ํ•˜๋„ค์Šค ๋‚ด์—์„œ์˜ ์—ญํ•  +- **์ž…์ถœ๋ ฅ ๋ž˜ํผ**: ํ•˜๋„ค์Šค๋Š” ์ปดํ“จํ„ฐ์˜ ์›์‹œ ์ถœ๋ ฅ์„ ACI ํ‘œ์ค€์— ๋งž์ถฐ ๊ฐ€๊ณตํ•˜์—ฌ ๋ชจ๋ธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋ฉฐ, ๋ชจ๋ธ์˜ ์ž์—ฐ์–ด ์š”์ฒญ์„ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. +- **์ธํ„ฐํŽ˜์ด์Šค ์ตœ์ ํ™”**: ํŠน์ • ๋ชจ๋ธ์˜ ํŠน์„ฑ(์˜ˆ: ๊ธด JSON์— ๊ฐ•ํ•จ, ํŠน์ • ํƒœ๊ทธ ํ˜•์‹ ์„ ํ˜ธ)์— ๋งž์ถฐ ACI๋ฅผ ํŠœ๋‹ํ•˜์—ฌ ์ž‘์—… ์„ฑ๊ณต๋ฅ (Pass@1)์„ ๋†’์ธ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ถ”์ƒํ™” vs ์ œ์–ด๊ถŒ**: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„ˆ๋ฌด ๊ณ ์ˆ˜์ค€์œผ๋กœ ์ถ”์ƒํ™”ํ•˜๋ฉด ์—์ด์ „ํŠธ์˜ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ๋„ˆ๋ฌด ์ €์ˆ˜์ค€(์˜ˆ: raw byte stream)์œผ๋กœ ๋‘๋ฉด ์ธ์ง€ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰์ฆํ•œ๋‹ค. +- **๋ฒ”์šฉ ํ‘œ์ค€์˜ ๋ถ€์žฌ**: ๊ฐ ํ•˜๋„ค์Šค๋งˆ๋‹ค ACI ์„ค๊ณ„๊ฐ€ ์ƒ์ดํ•˜์—ฌ ์—์ด์ „ํŠธ์˜ ํ–‰๋™ ํŒจํ„ด์ด ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค์— ๊ณ ์ฐฉํ™”(Coupling)๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Model Context Protocol (MCP)]], [[Context Engineering]] +- **Raw Source**: [[00_Raw/Agent-Computer Interfaces (ACI)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Agent-Computer Interface (ACI) Design Principle"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Blog/Context_Engineering.md b/10_Wiki/Topics_Blog/Context_Engineering.md new file mode 100644 index 00000000..0c7b0062 --- /dev/null +++ b/10_Wiki/Topics_Blog/Context_Engineering.md @@ -0,0 +1,41 @@ +--- +id: d5e6f7a8-b9c0-4d1e-2f3a-4b5c6d7e8f9a +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.99 +tags: [context, engineering, llm, optimization, token-management, agent] +last_reinforced: 2026-05-01 +github_commit: "wikification-context-engineering" +--- + +# [[Context Engineering]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ์ปจํ…์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์€ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ์„ ๋„˜์–ด, ์—์ด์ „ํŠธ์˜ ์ œํ•œ๋œ ์ธ์ง€ ์ž์›(Context Window)์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๋ฅผ ํ•„ํ„ฐ๋ง, ์••์ถ•, ์šฐ์„ ์ˆœ์œ„ํ™”ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ถ”๋ก  ์ถฉ์‹ค๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ •๊ตํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ํ”„๋กฌํ”„ํŠธ์—์„œ ์ปจํ…์ŠคํŠธ๋กœ์˜ ์ง„ํ™” +- **์ •์ ์—์„œ ๋™์ ์œผ๋กœ**: ๊ณ ์ •๋œ ์ง€์‹œ๋ฌธ(Prompt) ์ž‘์„ฑ์—์„œ, ๋Ÿฐํƒ€์ž„ ์ƒํ™ฉ์— ๋งž์ถฐ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์ฃผ์ž…ํ•˜๋Š” ๋™์  ๊ด€๋ฆฌ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ „ํ™˜๋˜์—ˆ๋‹ค. +- **์ธ์ง€ ๋ถ€ํ•˜ ์ œ์–ด**: ๋ชจ๋ธ์ด ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋ณด๊ฒŒ ํ•˜๋Š” ๋Œ€์‹ , ํ˜„์žฌ ์ž‘์—…์— ๊ฒฐ์ •์ ์ธ ์ •๋ณด(Salient Information)๋งŒ ๋…ธ์ถœํ•˜์—ฌ ์ถ”๋ก ์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ธ๋‹ค. + +### 2. ํ•ต์‹ฌ ๊ธฐ์ˆ  ๋ฐ ์ „๋žต +- **์„ ํƒ์  ์ฃผ์ž… (Selective Injection)**: RAG ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ค‘ ๊ด€๋ จ์„ฑ ๋†’์€ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ์ปจํ…์ŠคํŠธ์— ํฌํ•จ์‹œํ‚จ๋‹ค. +- **์ ์‘ํ˜• ์••์ถ• (Adaptive Compaction)**: ๊ณผ๊ฑฐ ๋Œ€ํ™”๋‚˜ ์ž‘์—… ์ด๋ ฅ์„ ์š”์•ฝ(Summary)ํ•˜๊ฑฐ๋‚˜ ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ํ† ํฐ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•œ๋‹ค. +- **์šฐ์„ ์ˆœ์œ„ํ™” (Prioritization)**: ์‹œ์Šคํ…œ ์ง€์‹œ์–ด, ์ตœ๊ทผ ๋„๊ตฌ ๊ฒฐ๊ณผ, ์žฅ๊ธฐ ๊ธฐ์–ต ๋“ฑ์„ ๋ ˆ์ด์–ด๋ณ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ์กฐ์ •ํ•œ๋‹ค. + +### 3. ํ•˜๋„ค์Šค์˜ C-์ปดํฌ๋„ŒํŠธ +- ํ•˜๋„ค์Šค๋Š” ๋ชจ๋ธ์ด ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” '์ฐฝ(Window)'์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ปจํ…์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์€ ์ด ์ฐฝ ๋‚ด๋ถ€๋ฅผ ์ฑ„์šฐ๋Š” ์ •์ฑ…(Policy)๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ด๋‹นํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ปจํ…์ŠคํŠธ ๋ถ€ํŒจ (Context Rot)**: ์ •๋ณด๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์œ ์ง€ํ•˜๋ฉด ์ฃผ์˜ ๋ถ„์‚ฐ(Attention Dilution)์ด ๋ฐœ์ƒํ•˜๊ณ , ๋„ˆ๋ฌด ์ ๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ์ •๋ณด ์ƒ์‹ค๋กœ ์ธํ•œ ์ถ”๋ก  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +- **ํ† ํฐ ๊ฒฝ์ œ์„ฑ**: ๊ธด ์ปจํ…์ŠคํŠธ ๋ชจ๋ธ์ด ๋“ฑ์žฅํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์—ฐ์‚ฐ ๋น„์šฉ๊ณผ ์ง€์—ฐ ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ํšจ์œจ์ ์ธ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ๋Š” ํ•„์ˆ˜์ ์ธ ์ตœ์ ํ™” ์˜์—ญ์ด๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[RAG (Retrieval-Augmented Generation)]], [[Agent State Store]] +- **Raw Source**: [[00_Raw/Context Engineering]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Context Engineering Strategies"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Blog/Engineering_Principles.md b/10_Wiki/Topics_Blog/Engineering_Principles.md new file mode 100644 index 00000000..efc71f74 --- /dev/null +++ b/10_Wiki/Topics_Blog/Engineering_Principles.md @@ -0,0 +1,45 @@ +--- +id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.99 +tags: [engineering-principles, solid, dry, kiss, yagni, clean-code, software-engineering] +last_reinforced: 2026-05-01 +github_commit: "wikification-engineering-principles" +--- + +# [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์›์น™๋“ค์€ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ํ†ต์ œํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋ฉฐ, ํŠนํžˆ SOLID์™€ DRY/KISS/YAGNI๋Š” '๋‹จ์ˆœํ•จ'๊ณผ '์œ ์—ฐํ•จ' ์‚ฌ์ด์˜ ์ตœ์ ์˜ ๊ท ํ˜•์ ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ง€์นจ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. SOLID ์›์น™ (Object-Oriented Design) +- **SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)**: ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ/์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ฑ…์ž„(๋ณ€๊ฒฝ ์ด์œ )๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. React์—์„œ๋Š” ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ชผ๊ฐœ๋Š” ํ•ต์‹ฌ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค. +- **OCP (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ๋‹ค. +- **LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)**: ์ž์‹ ํด๋ž˜์Šค(๋˜๋Š” ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ)๋Š” ๋ถ€๋ชจ์˜ ์—ญํ• ์„ ์˜จ์ „ํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. +- **ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)**: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค(Props)์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์ž˜๊ฒŒ ์ชผ๊ฐ ๋‹ค. +- **DIP (์˜์กด์„ฑ ์—ญ์ „ ์›์น™)**: ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค. + +### 2. Pragmatic Principles (DRY, KISS, YAGNI) +- **DRY (Don't Repeat Yourself)**: ์ง€์‹์˜ ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ์ถ”์ถœํ•œ๋‹ค. +- **KISS (Keep It Simple, Stupid)**: ๋‹จ์ˆœํ•จ์ด ๊ถ๊ทน์˜ ์ •๊ตํ•จ์ด๋‹ค. ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ณด๋‹ค ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์šฐ์„ ํ•œ๋‹ค. +- **YAGNI (You Aren't Gonna Need It)**: ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ๊ฒฝ๊ณ„ํ•œ๋‹ค. + +### 3. Clean Code ์‹ค๋ฌด +- **๊ฐ€๋…์„ฑ ์šฐ์„ **: ์ฝ”๋“œ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ๊ธฐ ์œ„ํ•จ์ด ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ๋‹ค. ๋ช…ํ™•ํ•œ ๋ณ€์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ํฌ๊ธฐ ์กฐ์ ˆ์ด ํ•„์ˆ˜์ ์ด๋‹ค. +- **๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ**: ์›์น™์„ ์ค€์ˆ˜ํ•œ ์ฝ”๋“œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด(Testable) ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **DRY vs KISS**: ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฌด๋ฆฌํ•œ ์ถ”์ƒํ™”๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)'๊ฐ€ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ด๋‹ค. +- **YAGNI vs ํ™•์žฅ์„ฑ**: ๋ฏธ๋ž˜๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค. YAGNI๋Š” '๊ธฐ๋Šฅ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ณ , SOLID๋Š” '๊ตฌ์กฐ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Legacy React Migration & Refactoring Standard]], [[Custom Hooks]], [[Feature-Sliced Design]] +- **Raw Source**: [[00_Raw/DRY]], [[00_Raw/KISS]], [[00_Raw/YAGNI]], [[00_Raw/Single Responsibility Principle]], [[00_Raw/Clean Code and SOLID Principles]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Core Engineering Principles (SOLID, DRY, KISS, YAGNI)"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Blog/Git_Workflows.md b/10_Wiki/Topics_Blog/Git_Workflows.md new file mode 100644 index 00000000..252c9a01 --- /dev/null +++ b/10_Wiki/Topics_Blog/Git_Workflows.md @@ -0,0 +1,43 @@ +--- +id: b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [git, workflow, branching, github-flow, git-flow, trunk-based-development, devops] +last_reinforced: 2026-05-01 +github_commit: "wikification-git-workflow" +--- + +# [[Modern Git Workflows & Branching Strategies]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ํšจ์œจ์ ์ธ Git ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํŒ€์˜ ๊ทœ๋ชจ์™€ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ์— ๋งž์ถฐ ์„ ํƒ๋˜์–ด์•ผ ํ•˜๋ฉฐ, Trunk-based Development์™€ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ์˜ Feature Branch๋ฅผ ํ†ตํ•ด ์ง€์†์  ํ†ตํ•ฉ(CI)์˜ ๊ฐ€์น˜๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ์ฃผ์š” ์ „๋žต๋ณ„ ํŠน์ง• +- **Git Flow**: ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ. `master`, `develop`, `feature`, `release`, `hotfix` ๋ธŒ๋žœ์น˜๋ฅผ ์—„๊ฒฉํžˆ ๊ด€๋ฆฌํ•œ๋‹ค. +- **GitHub Flow**: ์ง€์†์  ๋ฐฐํฌ(CD)์— ์ตœ์ ํ™”๋œ ๋‹จ์ˆœํ•œ ๋ชจ๋ธ. `main` ๋ธŒ๋žœ์น˜์™€ ์งง์€ ์ˆ˜๋ช…์˜ `feature` ๋ธŒ๋žœ์น˜๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, PR์„ ํ†ตํ•ด ์ƒ์‹œ ๋ฐฐํฌํ•œ๋‹ค. +- **Trunk-based Development**: ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋ฃจ์—๋„ ์—ฌ๋Ÿฌ ๋ฒˆ `main`์— ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹. ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค. + +### 2. ํ˜‘์—… ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ +- **Pull Request (PR)**: ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ํ•„์ˆ˜ ๊ด€๋ฌธ. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์˜๋„๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ๋ณ‘ํ•ฉ๋œ๋‹ค. +- **Conventional Commits**: `feat:`, `fix:`, `refactor:` ๋“ฑ ๊ทœ๊ฒฉํ™”๋œ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค. +- **Atomic Commits**: ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ๋งŒ ๋‹ด์•„์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋กค๋ฐฑ๊ณผ ๋””๋ฒ„๊น…(bisect)์„ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค. + +### 3. ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์„ ์œ„ํ•œ ์ „๋žต +- **์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ**: ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฉฐ์น ์”ฉ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๋น ๋ฅด๊ฒŒ `main`์— ํ†ตํ•ฉํ•˜์—ฌ 'Merge Hell'์„ ๋ฐฉ์ง€ํ•œ๋‹ค. +- **Feature Flags**: ๋Œ€๊ทœ๋ชจ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฝ”๋“œ๋Š” ๋ณ‘ํ•ฉํ•˜๋˜ ๋Ÿฐํƒ€์ž„์— ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ Trunk-based ๋ฐฉ์‹์„ ์ง€์›ํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **๋ณต์žก๋„ vs ์ œ์–ด**: Git Flow๋Š” ์•ˆ์ „ํ•˜์ง€๋งŒ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๋น„์šฉ์ด ํฌ๋ฉฐ, GitHub Flow๋Š” ๋น ๋ฅด์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ํŒ€์˜ ๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ๊ฐ€ ๋‚œํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. +- **Merge vs Rebase**: Rebase๋Š” ๊นจ๋—ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ฐ•์ œ ํ‘ธ์‹œ(force push) ์œ„ํ—˜์ด ์žˆ๊ณ , Merge๋Š” ๋ณด์ˆ˜์ ์ด์ง€๋งŒ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ํŒ€์˜ ์ปจ๋ฒค์…˜ ํ•ฉ์˜๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]], [[CI-CD Pipeline Integration]] +- **Raw Source**: [[00_Raw/Git Flow]], [[00_Raw/Git Workflow]], [[00_Raw/GitHub Flow]], [[00_Raw/Branching Strategies]], [[00_Raw/Trunk-based Development]], [[00_Raw/Atomic Commits]], [[00_Raw/Pull Request (PR)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Modern Git Workflows and Branching Strategies"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Blog/Legacy_React_Migration.md b/10_Wiki/Topics_Blog/Legacy_React_Migration.md new file mode 100644 index 00000000..d926bb28 --- /dev/null +++ b/10_Wiki/Topics_Blog/Legacy_React_Migration.md @@ -0,0 +1,47 @@ +--- +id: 7f8e9d2c-b1a3-4e5f-a0b2-c1d2e3f4a5b6 +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [react, legacy, migration, refactoring, incremental-migration, architecture, frontend] +last_reinforced: 2026-05-01 +github_commit: "wikification-legacy-react" +--- + +# [[Legacy React Migration & Refactoring Standard]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ˜„๋Œ€ํ™”๋Š” '์ „๋ฉด ์žฌ์ž‘์„ฑ(Rewrite)'์ด ์•„๋‹Œ '์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง(Incremental Refactor)'์„ ์›์น™์œผ๋กœ ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ์•ˆ์ „๋ง ๊ตฌ์ถ•, ์ปค์Šคํ…€ ํ›…์„ ํ†ตํ•œ ๋กœ์ง ๋ถ„๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…์„ ํ†ตํ•ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ๋ฆฌํŒฉํ† ๋ง์˜ ํ™ฉ๊ธˆ๋ฅ : Refactor, Do Not Rewrite +- **์•ˆ์ „๋ง ์„ ๊ตฌ์ถ•**: ์ฝ”๋“œ ์ˆ˜์ • ์ „ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋ฐ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Storybook, Chromatic ๋“ฑ)๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. +- **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜**: ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋ฐ”๊พธ๋Š” ๋Œ€์‹ , ์•Œ๋ฆผ์ด๋‚˜ ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์Šคํ† ์–ด๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ตœ์‹  ์ƒํƒœ(Zustand, TanStack Query ๋“ฑ)๋กœ ์ „ํ™˜ํ•œ๋‹ค. + +### 2. ์ปดํฌ๋„ŒํŠธ ๋ฐ ์–ธ์–ด์˜ ํ˜„๋Œ€ํ™” +- **ํ•จ์ˆ˜ํ˜• ์ „ํ™˜**: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks) ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ `useEffect` ์•ˆํ‹ฐํŒจํ„ด์„ ์ œ๊ฑฐํ•œ๋‹ค. +- **TypeScript ๋„์ž…**: ์ •์  ํƒ€์ดํ•‘์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋ฉฐ, ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•œ๋‹ค. +- **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ**: ๋น„๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ(300์ค„ ์ด์ƒ)์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ **์ปค์Šคํ…€ ํ›…**์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ UI์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + +### 3. ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๊ฐœํŽธ +- **์ƒํƒœ ๋ถ„ํ• **: ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ(TanStack Query), ์ „์—ญ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ(Zustand), URL ์ƒํƒœ ๋“ฑ์œผ๋กœ ๋ชฉ์ ์— ๋งž๊ฒŒ ํŒŒํŽธํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. +- **FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…**: ๊ธฐ์ˆ ์  ํŒŒ์ผ ์œ ํ˜•(Type-based) ๊ตฌ์กฐ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ **Feature-Sliced Design**์œผ๋กœ ๊ฐœํŽธํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์ธ๋‹ค. + +### 4. ์ฝ”๋“œ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฐ ํ‘œ์ค€ํ™” +- **๋„ค์ด๋ฐ ๊ทœ์น™**: `kebab-case`(ํŒŒ์ผ๋ช…/ํด๋”๋ช…), `PascalCase`(์ปดํฌ๋„ŒํŠธ), `camelCase`(ํ›…/๋ณ€์ˆ˜) ๋“ฑ ์šด์˜์ฒด์ œ ๋ฐ ํŒ€ ํ˜‘์—… ํ‘œ์ค€์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. +- **์ž๋™ํ™”**: ESLint, Prettier, Husky๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ์‹œ์ ์— ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ์œ„๋ฐ˜ ๋ฐ ํฌ๋งทํŒ…์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ถ”์ƒํ™”์˜ ํ•จ์ • (DRY vs KISS)**: ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ๋ธ”๋ž™๋ฐ•์Šคํ™”ํ•˜์—ฌ ๋””๋ฒ„๊น…์„ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)' ์›์น™์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. +- **๊ณผ๋„๊ธฐ์  ๋ณต์žก์„ฑ**: ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘์—๋Š” ๋ ˆ๊ฑฐ์‹œ์™€ ์‹ ๊ทœ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ๊ณต์กดํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต์„ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•œ๋‹ค. +- **์ดˆ๊ธฐ ์˜ค๋ฒ„ํ—ค๋“œ**: FSD ๋“ฑ์˜ ์—„๊ฒฉํ•œ ๊ตฌ์กฐ๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ณผ๋„ํ•œ ์„ค๊ณ„(Overkill)๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋งž์ถฐ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Feature-Sliced Design]], [[TanStack Query]], [[Zustand]], [[Unit Testing]], [[SOLID Principles]] +- **Raw Source**: [[00_Raw/๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜]], [[00_Raw/Incremental Migration]], [[00_Raw/Legacy React Codebase Modernization]], [[00_Raw/Legacy React Codebase Refactoring]], [[00_Raw/React Codebase Refactoring]], [[00_Raw/แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ แ„…แ…ตแ„‘แ…ขแ†จแ„แ…ฉแ„…แ…ตแ†ผ แ„†แ…ตแ†พ แ„แ…ฉแ„ƒแ…ณ แ„‹แ…ฒแ„Œแ…ตแ„‡แ…ฉแ„‰แ…ฎ]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Legacy React Migration & Refactoring Standard"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_Blog/PEV_Loop.md b/10_Wiki/Topics_Blog/PEV_Loop.md new file mode 100644 index 00000000..3fb9b85a --- /dev/null +++ b/10_Wiki/Topics_Blog/PEV_Loop.md @@ -0,0 +1,41 @@ +--- +id: e6f7a8b9-c0d1-4e2f-3a4b-5c6d7e8f9a0b +category: "[[10_Wiki/Topics/AI]]" +confidence_score: 0.99 +tags: [pev-loop, execution, verification, agent, harness, reliability] +last_reinforced: 2026-05-01 +github_commit: "wikification-pev-loop" +--- + +# [[Plan-Execute-Verify (PEV) Loop]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> PEV ๋ฃจํ”„๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ฆ‰ํฅ์ ์œผ๋กœ ํ–‰๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„ํš, ์ œํ•œ๋œ ์‹คํ–‰, ์—„๊ฒฉํ•œ ๊ฒ€์ฆ์˜ 3๋‹จ๊ณ„๋ฅผ ๊ฐ•์ œํ•˜์—ฌ ์ž์œจ ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์•„ํ‚คํ…์ฒ˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์‹คํ–‰ ํŒจํ„ด์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. 3๋‹จ๊ณ„ ์‹คํ–‰ ํŒŒ์ดํ”„๋ผ์ธ +- **Plan (๊ณ„ํš)**: ๋ฌธ์ œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ์ˆ˜์šฉ ๊ธฐ์ค€(Acceptance Criteria)์„ ํฌํ•จํ•œ ์ƒ์„ธ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. ์ด๋Š” ์ถ”๋ก ์˜ ๋น„๊ฒฐ์ •์„ฑ ๋ฌธ์ œ๋ฅผ ์ค„์ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. +- **Execute (์‹คํ–‰)**: ์ˆ˜๋ฆฝ๋œ ๊ณ„ํš์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์‹คํ–‰ ์ „ ๊ฒŒ์ดํŠธ(Pre-execution gates)๊ฐ€ ๊ฐœ์ž…ํ•˜์—ฌ ์ธ์ž ์œ ํšจ์„ฑ ๋ฐ ๊ถŒํ•œ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ†ต์ œํ•œ๋‹ค. +- **Verify (๊ฒ€์ฆ)**: ๋‹จ์ˆœ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋„˜์–ด ๊ณ„ํš๊ณผ์˜ ์ผ์น˜์„ฑ(Plan Alignment)์„ ํ‰๊ฐ€ํ•œ๋‹ค. ์‹คํŒจ ์‹œ ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์„ ์ถ”๋ก  ๋ฃจํ”„๋กœ ๋Œ๋ ค๋ณด๋‚ด ์ž๊ฐ€ ์ˆ˜์ •์„ ์œ ๋„ํ•œ๋‹ค. + +### 2. ํ•˜๋„ค์Šค ๊ฒŒ์ดํŠธ (Harness Gates) +- **Pre-execution gates**: ๋„๊ตฌ ํ˜ธ์ถœ ์ „ ์ž‘์—… ๊ณต๊ฐ„ ๋ฐ ๊ถŒํ•œ์„ ํ™•์ธํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ํ–‰๋™์„ ์›์ฒœ ์ฐจ๋‹จํ•œ๋‹ค. +- **Post-execution verification**: ๋ฆฐํ„ฐ, ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ, ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ๊ฒ€์‚ฌ ๋“ฑ์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์„ ๋ณด์ฆํ•œ๋‹ค. + +### 3. ์‹ ๋ขฐ์„ฑ ์ค‘์‹ฌ ์„ค๊ณ„ +- '์ผ๋‹จ ํ•ด๋ณด๊ณ  ํ™•์ธํ•˜๊ธฐ(Generate-and-Check)' ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , ํ•˜๋„ค์Šค ๊ณ„์ธต์—์„œ ๊ฒฐ์ •๋ก ์  ๊ทœ์น™์„ ๊ฐ•์ œํ•จ์œผ๋กœ์จ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธ‰์˜ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ง€์—ฐ ์‹œ๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ**: ๋‹จ๊ณ„๋ฅผ ๊ฐ•์ œํ•จ์— ๋”ฐ๋ผ ๊ฐ„๋‹จํ•œ ์ž‘์—…์—์„œ๋„ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋ฉฐ ํ† ํฐ ์†Œ๋ชจ๋Ÿ‰์ด ๋Š˜์–ด๋‚œ๋‹ค. +- **๊ฒ€์ฆ ๋กœ์ง์˜ ๋ณต์žก์„ฑ**: ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€๋ฅผ ๋„˜์–ด ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” '๊ณ„ํš ์ผ์น˜์„ฑ' ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„์— ๋†’์€ ๊ธฐ์ˆ ์  ๋‚œ์ด๋„๊ฐ€ ๋”ฐ๋ฅธ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/AI]] +- **Related**: [[Agent Harness]], [[Pre-execution gates]], [[Plan alignment]], [[Generate-and-Check]] +- **Raw Source**: [[00_Raw/Plan-Execute-Verify (PEV) Loop]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Plan-Execute-Verify (PEV) Loop Architecture"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_GD/Engineering_Principles.md b/10_Wiki/Topics_GD/Engineering_Principles.md new file mode 100644 index 00000000..efc71f74 --- /dev/null +++ b/10_Wiki/Topics_GD/Engineering_Principles.md @@ -0,0 +1,45 @@ +--- +id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.99 +tags: [engineering-principles, solid, dry, kiss, yagni, clean-code, software-engineering] +last_reinforced: 2026-05-01 +github_commit: "wikification-engineering-principles" +--- + +# [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์›์น™๋“ค์€ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ํ†ต์ œํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋ฉฐ, ํŠนํžˆ SOLID์™€ DRY/KISS/YAGNI๋Š” '๋‹จ์ˆœํ•จ'๊ณผ '์œ ์—ฐํ•จ' ์‚ฌ์ด์˜ ์ตœ์ ์˜ ๊ท ํ˜•์ ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ง€์นจ์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. SOLID ์›์น™ (Object-Oriented Design) +- **SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)**: ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ/์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ฑ…์ž„(๋ณ€๊ฒฝ ์ด์œ )๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. React์—์„œ๋Š” ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ชผ๊ฐœ๋Š” ํ•ต์‹ฌ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค. +- **OCP (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ๋‹ค. +- **LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)**: ์ž์‹ ํด๋ž˜์Šค(๋˜๋Š” ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ)๋Š” ๋ถ€๋ชจ์˜ ์—ญํ• ์„ ์˜จ์ „ํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. +- **ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)**: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค(Props)์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์ž˜๊ฒŒ ์ชผ๊ฐ ๋‹ค. +- **DIP (์˜์กด์„ฑ ์—ญ์ „ ์›์น™)**: ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค. + +### 2. Pragmatic Principles (DRY, KISS, YAGNI) +- **DRY (Don't Repeat Yourself)**: ์ง€์‹์˜ ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ์ถ”์ถœํ•œ๋‹ค. +- **KISS (Keep It Simple, Stupid)**: ๋‹จ์ˆœํ•จ์ด ๊ถ๊ทน์˜ ์ •๊ตํ•จ์ด๋‹ค. ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ณด๋‹ค ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์šฐ์„ ํ•œ๋‹ค. +- **YAGNI (You Aren't Gonna Need It)**: ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ๊ฒฝ๊ณ„ํ•œ๋‹ค. + +### 3. Clean Code ์‹ค๋ฌด +- **๊ฐ€๋…์„ฑ ์šฐ์„ **: ์ฝ”๋“œ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ๊ธฐ ์œ„ํ•จ์ด ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ๋‹ค. ๋ช…ํ™•ํ•œ ๋ณ€์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ํฌ๊ธฐ ์กฐ์ ˆ์ด ํ•„์ˆ˜์ ์ด๋‹ค. +- **๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ**: ์›์น™์„ ์ค€์ˆ˜ํ•œ ์ฝ”๋“œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด(Testable) ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **DRY vs KISS**: ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฌด๋ฆฌํ•œ ์ถ”์ƒํ™”๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)'๊ฐ€ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ด๋‹ค. +- **YAGNI vs ํ™•์žฅ์„ฑ**: ๋ฏธ๋ž˜๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค. YAGNI๋Š” '๊ธฐ๋Šฅ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ณ , SOLID๋Š” '๊ตฌ์กฐ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Legacy React Migration & Refactoring Standard]], [[Custom Hooks]], [[Feature-Sliced Design]] +- **Raw Source**: [[00_Raw/DRY]], [[00_Raw/KISS]], [[00_Raw/YAGNI]], [[00_Raw/Single Responsibility Principle]], [[00_Raw/Clean Code and SOLID Principles]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Core Engineering Principles (SOLID, DRY, KISS, YAGNI)"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_GD/Git_Workflows.md b/10_Wiki/Topics_GD/Git_Workflows.md new file mode 100644 index 00000000..252c9a01 --- /dev/null +++ b/10_Wiki/Topics_GD/Git_Workflows.md @@ -0,0 +1,43 @@ +--- +id: b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [git, workflow, branching, github-flow, git-flow, trunk-based-development, devops] +last_reinforced: 2026-05-01 +github_commit: "wikification-git-workflow" +--- + +# [[Modern Git Workflows & Branching Strategies]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ํšจ์œจ์ ์ธ Git ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํŒ€์˜ ๊ทœ๋ชจ์™€ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ์— ๋งž์ถฐ ์„ ํƒ๋˜์–ด์•ผ ํ•˜๋ฉฐ, Trunk-based Development์™€ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ์˜ Feature Branch๋ฅผ ํ†ตํ•ด ์ง€์†์  ํ†ตํ•ฉ(CI)์˜ ๊ฐ€์น˜๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ์ฃผ์š” ์ „๋žต๋ณ„ ํŠน์ง• +- **Git Flow**: ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ. `master`, `develop`, `feature`, `release`, `hotfix` ๋ธŒ๋žœ์น˜๋ฅผ ์—„๊ฒฉํžˆ ๊ด€๋ฆฌํ•œ๋‹ค. +- **GitHub Flow**: ์ง€์†์  ๋ฐฐํฌ(CD)์— ์ตœ์ ํ™”๋œ ๋‹จ์ˆœํ•œ ๋ชจ๋ธ. `main` ๋ธŒ๋žœ์น˜์™€ ์งง์€ ์ˆ˜๋ช…์˜ `feature` ๋ธŒ๋žœ์น˜๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ, PR์„ ํ†ตํ•ด ์ƒ์‹œ ๋ฐฐํฌํ•œ๋‹ค. +- **Trunk-based Development**: ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋ฃจ์—๋„ ์—ฌ๋Ÿฌ ๋ฒˆ `main`์— ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹. ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค. + +### 2. ํ˜‘์—… ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ +- **Pull Request (PR)**: ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ํ•„์ˆ˜ ๊ด€๋ฌธ. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์˜๋„๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ๋ณ‘ํ•ฉ๋œ๋‹ค. +- **Conventional Commits**: `feat:`, `fix:`, `refactor:` ๋“ฑ ๊ทœ๊ฒฉํ™”๋œ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค. +- **Atomic Commits**: ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ๋งŒ ๋‹ด์•„์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋กค๋ฐฑ๊ณผ ๋””๋ฒ„๊น…(bisect)์„ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค. + +### 3. ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์„ ์œ„ํ•œ ์ „๋žต +- **์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ**: ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฉฐ์น ์”ฉ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๋น ๋ฅด๊ฒŒ `main`์— ํ†ตํ•ฉํ•˜์—ฌ 'Merge Hell'์„ ๋ฐฉ์ง€ํ•œ๋‹ค. +- **Feature Flags**: ๋Œ€๊ทœ๋ชจ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฝ”๋“œ๋Š” ๋ณ‘ํ•ฉํ•˜๋˜ ๋Ÿฐํƒ€์ž„์— ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ Trunk-based ๋ฐฉ์‹์„ ์ง€์›ํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **๋ณต์žก๋„ vs ์ œ์–ด**: Git Flow๋Š” ์•ˆ์ „ํ•˜์ง€๋งŒ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๋น„์šฉ์ด ํฌ๋ฉฐ, GitHub Flow๋Š” ๋น ๋ฅด์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ํŒ€์˜ ๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ๊ฐ€ ๋‚œํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. +- **Merge vs Rebase**: Rebase๋Š” ๊นจ๋—ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ฐ•์ œ ํ‘ธ์‹œ(force push) ์œ„ํ—˜์ด ์žˆ๊ณ , Merge๋Š” ๋ณด์ˆ˜์ ์ด์ง€๋งŒ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ํŒ€์˜ ์ปจ๋ฒค์…˜ ํ•ฉ์˜๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]], [[CI-CD Pipeline Integration]] +- **Raw Source**: [[00_Raw/Git Flow]], [[00_Raw/Git Workflow]], [[00_Raw/GitHub Flow]], [[00_Raw/Branching Strategies]], [[00_Raw/Trunk-based Development]], [[00_Raw/Atomic Commits]], [[00_Raw/Pull Request (PR)]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Modern Git Workflows and Branching Strategies"` +3. Push: `git push origin main` diff --git a/10_Wiki/Topics_GD/Legacy_React_Migration.md b/10_Wiki/Topics_GD/Legacy_React_Migration.md new file mode 100644 index 00000000..d926bb28 --- /dev/null +++ b/10_Wiki/Topics_GD/Legacy_React_Migration.md @@ -0,0 +1,47 @@ +--- +id: 7f8e9d2c-b1a3-4e5f-a0b2-c1d2e3f4a5b6 +category: "[[10_Wiki/Topics/Development]]" +confidence_score: 0.98 +tags: [react, legacy, migration, refactoring, incremental-migration, architecture, frontend] +last_reinforced: 2026-05-01 +github_commit: "wikification-legacy-react" +--- + +# [[Legacy React Migration & Refactoring Standard]] + +## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) +> ๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ˜„๋Œ€ํ™”๋Š” '์ „๋ฉด ์žฌ์ž‘์„ฑ(Rewrite)'์ด ์•„๋‹Œ '์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง(Incremental Refactor)'์„ ์›์น™์œผ๋กœ ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ์•ˆ์ „๋ง ๊ตฌ์ถ•, ์ปค์Šคํ…€ ํ›…์„ ํ†ตํ•œ ๋กœ์ง ๋ถ„๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…์„ ํ†ตํ•ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. + +## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) + +### 1. ๋ฆฌํŒฉํ† ๋ง์˜ ํ™ฉ๊ธˆ๋ฅ : Refactor, Do Not Rewrite +- **์•ˆ์ „๋ง ์„ ๊ตฌ์ถ•**: ์ฝ”๋“œ ์ˆ˜์ • ์ „ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋ฐ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Storybook, Chromatic ๋“ฑ)๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. +- **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜**: ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋ฐ”๊พธ๋Š” ๋Œ€์‹ , ์•Œ๋ฆผ์ด๋‚˜ ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์Šคํ† ์–ด๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ตœ์‹  ์ƒํƒœ(Zustand, TanStack Query ๋“ฑ)๋กœ ์ „ํ™˜ํ•œ๋‹ค. + +### 2. ์ปดํฌ๋„ŒํŠธ ๋ฐ ์–ธ์–ด์˜ ํ˜„๋Œ€ํ™” +- **ํ•จ์ˆ˜ํ˜• ์ „ํ™˜**: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํ›…(Hooks) ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ `useEffect` ์•ˆํ‹ฐํŒจํ„ด์„ ์ œ๊ฑฐํ•œ๋‹ค. +- **TypeScript ๋„์ž…**: ์ •์  ํƒ€์ดํ•‘์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋ฉฐ, ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•œ๋‹ค. +- **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ**: ๋น„๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ(300์ค„ ์ด์ƒ)์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ **์ปค์Šคํ…€ ํ›…**์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ UI์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + +### 3. ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๊ฐœํŽธ +- **์ƒํƒœ ๋ถ„ํ• **: ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ(TanStack Query), ์ „์—ญ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ(Zustand), URL ์ƒํƒœ ๋“ฑ์œผ๋กœ ๋ชฉ์ ์— ๋งž๊ฒŒ ํŒŒํŽธํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. +- **FSD ์•„ํ‚คํ…์ฒ˜ ๋„์ž…**: ๊ธฐ์ˆ ์  ํŒŒ์ผ ์œ ํ˜•(Type-based) ๊ตฌ์กฐ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ **Feature-Sliced Design**์œผ๋กœ ๊ฐœํŽธํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์ธ๋‹ค. + +### 4. ์ฝ”๋“œ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฐ ํ‘œ์ค€ํ™” +- **๋„ค์ด๋ฐ ๊ทœ์น™**: `kebab-case`(ํŒŒ์ผ๋ช…/ํด๋”๋ช…), `PascalCase`(์ปดํฌ๋„ŒํŠธ), `camelCase`(ํ›…/๋ณ€์ˆ˜) ๋“ฑ ์šด์˜์ฒด์ œ ๋ฐ ํŒ€ ํ˜‘์—… ํ‘œ์ค€์„ ์ˆ˜๋ฆฝํ•œ๋‹ค. +- **์ž๋™ํ™”**: ESLint, Prettier, Husky๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ ์‹œ์ ์— ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ์œ„๋ฐ˜ ๋ฐ ํฌ๋งทํŒ…์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค. + +## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) +- **์ถ”์ƒํ™”์˜ ํ•จ์ • (DRY vs KISS)**: ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ๋ธ”๋ž™๋ฐ•์Šคํ™”ํ•˜์—ฌ ๋””๋ฒ„๊น…์„ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)' ์›์น™์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. +- **๊ณผ๋„๊ธฐ์  ๋ณต์žก์„ฑ**: ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค‘์—๋Š” ๋ ˆ๊ฑฐ์‹œ์™€ ์‹ ๊ทœ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ๊ณต์กดํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต์„ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•œ๋‹ค. +- **์ดˆ๊ธฐ ์˜ค๋ฒ„ํ—ค๋“œ**: FSD ๋“ฑ์˜ ์—„๊ฒฉํ•œ ๊ตฌ์กฐ๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ณผ๋„ํ•œ ์„ค๊ณ„(Overkill)๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋งž์ถฐ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•œ๋‹ค. + +## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) +- **Parent**: [[10_Wiki/Topics/Development]] +- **Related**: [[Feature-Sliced Design]], [[TanStack Query]], [[Zustand]], [[Unit Testing]], [[SOLID Principles]] +- **Raw Source**: [[00_Raw/๋ ˆ๊ฑฐ์‹œ React ์ฝ”๋“œ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜]], [[00_Raw/Incremental Migration]], [[00_Raw/Legacy React Codebase Modernization]], [[00_Raw/Legacy React Codebase Refactoring]], [[00_Raw/React Codebase Refactoring]], [[00_Raw/แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ แ„…แ…ตแ„‘แ…ขแ†จแ„แ…ฉแ„…แ…ตแ†ผ แ„†แ…ตแ†พ แ„แ…ฉแ„ƒแ…ณ แ„‹แ…ฒแ„Œแ…ตแ„‡แ…ฉแ„‰แ…ฎ]] + +## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ +1. Stage: git add . +2. Commit: `git commit -m "[P-Reinforce] Wikify Legacy React Migration & Refactoring Standard"` +3. Push: `git push origin main`