diff --git a/10_Wiki/Decisions/Index.md b/10_Wiki/Decisions/Index.md deleted file mode 100644 index aafb18a1..00000000 --- a/10_Wiki/Decisions/Index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Index: Decisions - -## ๐Ÿ“ Subcategories -- Skybound - diff --git a/10_Wiki/Decisions/Skybound/Index.md b/10_Wiki/Decisions/Skybound/Index.md deleted file mode 100644 index 5a3b1def..00000000 --- a/10_Wiki/Decisions/Skybound/Index.md +++ /dev/null @@ -1,6 +0,0 @@ -# Index: Decisions > Skybound - -## ๐Ÿ“ Documents -- [[Combat_Balance_Buff|Combat_Balance_Buff]] -- [[Frame_Type_Restoration|Frame_Type_Restoration]] -- [[IDE_Stability_Fix|IDE_Stability_Fix]] diff --git a/10_Wiki/Development/Index.md b/10_Wiki/Development/Index.md deleted file mode 100644 index b03aa5f6..00000000 --- a/10_Wiki/Development/Index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Index: Development - -## ๐Ÿ“ Subcategories -- UI_Components - -## ๐Ÿ“ Documents -- [[Homepage_React_Best_Practices|Homepage_React_Best_Practices]] diff --git a/10_Wiki/Development/UI_Components/Index.md b/10_Wiki/Development/UI_Components/Index.md deleted file mode 100644 index 93fe9891..00000000 --- a/10_Wiki/Development/UI_Components/Index.md +++ /dev/null @@ -1,4 +0,0 @@ -# Index: Development > UI_Components - -## ๐Ÿ“ Documents -- [[Accordion|Accordion]] diff --git a/10_Wiki/Management/Code Review.md b/10_Wiki/Management/Code Review.md deleted file mode 100644 index e8ba29f5..00000000 --- a/10_Wiki/Management/Code Review.md +++ /dev/null @@ -1,56 +0,0 @@ -# [[Code Review|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)|Pull Request (PR)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ ์š”์ฒญ๋˜๊ณ , ๊ฒ€ํ†  ํ”ผ๋“œ๋ฐฑ์ด ์˜ค๊ฐ€๋Š” ํ•ต์‹ฌ ํ”Œ๋žซํผ์ด์ž ๋‹จ์œ„์ž…๋‹ˆ๋‹ค [1, 2]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ ์ „ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๊ฒŒ์ดํŠธ๋กœ์„œ์˜ ๊ธฐ๋Šฅ๊ณผ ์งง๊ณ  ๋ช…ํ™•ํ•œ ์ž‘์—… ๋‹จ์œ„ ๋ถ„ํ• ์˜ ์ค‘์š”์„ฑ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -- Feature Branch Workflow - - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ์Šคํ…œ์„ ์‰ฝ๊ฒŒ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ์ถฉ๋Œ์ด ์ ์€ ๋ธŒ๋žœ์น˜ ์ „๋žต์ž…๋‹ˆ๋‹ค [14, 15]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ, ๊ฐ๊ฐ์˜ ํƒœ์Šคํฌ๋ฅผ ๋…๋ฆฝ๋œ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๊ณ  ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆํ•˜๋Š” ์ „์ฒด ํ๋ฆ„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [์ž๋™ํ™” ๋ฐ ํ’ˆ์งˆ ๊ฒ€์ฆ ๋„๊ตฌ] -- [[Visual Regression Testing|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)|Continuous Integration (CI)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: PR์ด ์˜ฌ๋ผ์™”์„ ๋•Œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์‚ฌ์ „์— ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์—ฌ๋ถ€, ๋นŒ๋“œ ์„ฑ๊ณต ์—ฌ๋ถ€ ๋“ฑ์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•ด์ฃผ๋Š” ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ตฌ์ถ•์— ๋Œ€ํ•ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 19]. - ---- -*Last updated: 2026-04-30* \ No newline at end of file diff --git a/10_Wiki/Management/Index.md b/10_Wiki/Management/Index.md deleted file mode 100644 index f06399ff..00000000 --- a/10_Wiki/Management/Index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Index: Management - -## ๐Ÿ“ Subcategories -- System - diff --git a/10_Wiki/Management/System/Index.md b/10_Wiki/Management/System/Index.md deleted file mode 100644 index f25d45e4..00000000 --- a/10_Wiki/Management/System/Index.md +++ /dev/null @@ -1,4 +0,0 @@ -# Index: Management > System - -## ๐Ÿ“ Documents -- [[Antigravity_Agent_System_v1|Antigravity_Agent_System_v1]] diff --git a/10_Wiki/Projects/Index.md b/10_Wiki/Projects/Index.md deleted file mode 100644 index 152a0fa0..00000000 --- a/10_Wiki/Projects/Index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Index: Projects - -## ๐Ÿ“ Subcategories -- Skybound - diff --git a/10_Wiki/Projects/Skybound/Index.md b/10_Wiki/Projects/Skybound/Index.md deleted file mode 100644 index bc42e401..00000000 --- a/10_Wiki/Projects/Skybound/Index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Index: Projects > Skybound - -## ๐Ÿ“ Documents -- [[Architecture_Refactor|Architecture_Refactor]] -- [[HUD_UI_Refinement|HUD_UI_Refinement]] diff --git a/10_Wiki/Skills/BuildSystem/Index.md b/10_Wiki/Skills/BuildSystem/Index.md deleted file mode 100644 index 4b19bf60..00000000 --- a/10_Wiki/Skills/BuildSystem/Index.md +++ /dev/null @@ -1,4 +0,0 @@ -# Index: Skills > BuildSystem - -## ๐Ÿ“ Documents -- [[Incremental_Build|Incremental_Build]] diff --git a/10_Wiki/Skills/Index.md b/10_Wiki/Skills/Index.md deleted file mode 100644 index 4f6254a3..00000000 --- a/10_Wiki/Skills/Index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Index: Skills - -## ๐Ÿ“ Subcategories -- BuildSystem - -## ๐Ÿ“ Documents -- [[P-Reinforce_Skill|P-Reinforce_Skill]] diff --git a/10_Wiki/Technical_Reports/Index.md b/10_Wiki/Technical_Reports/Index.md deleted file mode 100644 index 91ea53a4..00000000 --- a/10_Wiki/Technical_Reports/Index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Index: Technical_Reports - -## ๐Ÿ“ Documents -- [[2026-04-22_Boss_Battle_System_Implementation|2026-04-22_Boss_Battle_System_Implementation]] -- [[2026-04-22_Boss_Spawn_Logic_Fix|2026-04-22_Boss_Spawn_Logic_Fix]] diff --git a/10_Wiki/Topics/.gitignore b/10_Wiki/Topics/.gitignore deleted file mode 100644 index 5d136e73..00000000 --- a/10_Wiki/Topics/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# ์ž๋™ ์ƒ์„ฑ โ€” Connect AI 1์ธ ๊ธฐ์—… ๋ชจ๋“œ -# ์‹œํฌ๋ฆฟยทAPI ํ‚ค ๋ณดํ˜ธ -_agents/*/config.md - -# ์™ธ๋ถ€ API ์‘๋‹ต ์บ์‹œ (์žฌํ˜„ ๊ฐ€๋Šฅ) -_cache/ - -# ๋Œ€์šฉ๋Ÿ‰ ์ž„์‹œ ์‚ฐ์ถœ๋ฌผ -_tmp/ -*.log diff --git a/10_Wiki/Topics/.obsidian/app.json b/10_Wiki/Topics/.obsidian/app.json deleted file mode 100644 index 9e26dfee..00000000 --- a/10_Wiki/Topics/.obsidian/app.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/10_Wiki/Topics/.obsidian/appearance.json b/10_Wiki/Topics/.obsidian/appearance.json deleted file mode 100644 index 9e26dfee..00000000 --- a/10_Wiki/Topics/.obsidian/appearance.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/10_Wiki/Topics/.obsidian/core-plugins.json b/10_Wiki/Topics/.obsidian/core-plugins.json deleted file mode 100644 index 639b90da..00000000 --- a/10_Wiki/Topics/.obsidian/core-plugins.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "file-explorer": true, - "global-search": true, - "switcher": true, - "graph": true, - "backlink": true, - "canvas": true, - "outgoing-link": true, - "tag-pane": true, - "footnotes": false, - "properties": true, - "page-preview": true, - "daily-notes": true, - "templates": true, - "note-composer": true, - "command-palette": true, - "slash-command": false, - "editor-status": true, - "bookmarks": true, - "markdown-importer": false, - "zk-prefixer": false, - "random-note": false, - "outline": true, - "word-count": true, - "slides": false, - "audio-recorder": false, - "workspaces": false, - "file-recovery": true, - "publish": false, - "sync": true, - "bases": true, - "webviewer": false -} \ No newline at end of file diff --git a/10_Wiki/Topics/.obsidian/graph.json b/10_Wiki/Topics/.obsidian/graph.json deleted file mode 100644 index 51769675..00000000 --- a/10_Wiki/Topics/.obsidian/graph.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "collapse-filter": true, - "search": "", - "showTags": false, - "showAttachments": false, - "hideUnresolved": false, - "showOrphans": true, - "collapse-color-groups": true, - "colorGroups": [], - "collapse-display": true, - "showArrow": false, - "textFadeMultiplier": 0, - "nodeSizeMultiplier": 1, - "lineSizeMultiplier": 1, - "collapse-forces": false, - "centerStrength": 0.518713248970312, - "repelStrength": 10, - "linkStrength": 1, - "linkDistance": 250, - "scale": 0.07596443649899076, - "close": true -} \ No newline at end of file diff --git a/10_Wiki/Topics/.obsidian/workspace.json b/10_Wiki/Topics/.obsidian/workspace.json deleted file mode 100644 index d6bee4c7..00000000 --- a/10_Wiki/Topics/.obsidian/workspace.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "main": { - "id": "3fc76d379d004b0c", - "type": "split", - "children": [ - { - "id": "ed6b7013899a2c11", - "type": "tabs", - "children": [ - { - "id": "e84fb23982481828", - "type": "leaf", - "state": { - "type": "graph", - "state": {}, - "icon": "lucide-git-fork", - "title": "๊ทธ๋ž˜ํ”„ ๋ทฐ" - } - } - ] - } - ], - "direction": "vertical" - }, - "left": { - "id": "14420f71c8e463c7", - "type": "split", - "children": [ - { - "id": "026126c5779ef0d1", - "type": "tabs", - "children": [ - { - "id": "3c4f676663de108b", - "type": "leaf", - "state": { - "type": "file-explorer", - "state": { - "sortOrder": "alphabetical", - "autoReveal": false - }, - "icon": "lucide-folder-closed", - "title": "ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ" - } - }, - { - "id": "c85f7eceb7d2fd98", - "type": "leaf", - "state": { - "type": "search", - "state": { - "query": "", - "matchingCase": false, - "explainSearch": false, - "collapseAll": false, - "extraContext": false, - "sortOrder": "alphabetical" - }, - "icon": "lucide-search", - "title": "๊ฒ€์ƒ‰" - } - }, - { - "id": "0aab514d3887d1f0", - "type": "leaf", - "state": { - "type": "bookmarks", - "state": {}, - "icon": "lucide-bookmark", - "title": "๋ถ๋งˆํฌ" - } - } - ] - } - ], - "direction": "horizontal", - "width": 300 - }, - "right": { - "id": "8e81aaf0af24f2a0", - "type": "split", - "children": [ - { - "id": "3283f5452e0c7734", - "type": "tabs", - "children": [ - { - "id": "2768a7df58e67cf4", - "type": "leaf", - "state": { - "type": "backlink", - "state": { - "file": "Focal Loss (ํฌ์ปฌ ์†์‹ค).md", - "collapseAll": false, - "extraContext": false, - "sortOrder": "alphabetical", - "showSearch": false, - "searchQuery": "", - "backlinkCollapsed": false, - "unlinkedCollapsed": true - }, - "icon": "links-coming-in", - "title": "Focal Loss (ํฌ์ปฌ ์†์‹ค) ์˜ ๋ฐฑ๋งํฌ" - } - }, - { - "id": "e32c536fe9411952", - "type": "leaf", - "state": { - "type": "outgoing-link", - "state": { - "file": "Focal Loss (ํฌ์ปฌ ์†์‹ค).md", - "linksCollapsed": false, - "unlinkedCollapsed": true - }, - "icon": "links-going-out", - "title": "Focal Loss (ํฌ์ปฌ ์†์‹ค) ์˜ ๋‚˜๊ฐ€๋Š” ๋งํฌ" - } - }, - { - "id": "e4e179d925740b8d", - "type": "leaf", - "state": { - "type": "tag", - "state": { - "sortOrder": "frequency", - "useHierarchy": true, - "showSearch": false, - "searchQuery": "" - }, - "icon": "lucide-tags", - "title": "ํƒœ๊ทธ" - } - }, - { - "id": "259c52e79205779b", - "type": "leaf", - "state": { - "type": "all-properties", - "state": { - "sortOrder": "frequency", - "showSearch": false, - "searchQuery": "" - }, - "icon": "lucide-archive", - "title": "๋ชจ๋“  ์†์„ฑ" - } - }, - { - "id": "75330b282fdbce70", - "type": "leaf", - "state": { - "type": "outline", - "state": { - "file": "Focal Loss (ํฌ์ปฌ ์†์‹ค).md", - "followCursor": false, - "showSearch": false, - "searchQuery": "" - }, - "icon": "lucide-list", - "title": "Focal Loss (ํฌ์ปฌ ์†์‹ค) ์˜ ๊ฐœ์š”" - } - } - ] - } - ], - "direction": "horizontal", - "width": 300, - "collapsed": true - }, - "left-ribbon": { - "hiddenItems": { - "switcher:๋น ๋ฅธ ์ „ํ™˜๊ธฐ ์—ด๊ธฐ": false, - "graph:๊ทธ๋ž˜ํ”„ ๋ทฐ ์—ด๊ธฐ": false, - "canvas:์ƒˆ ์บ”๋ฒ„์Šค ๋งŒ๋“ค๊ธฐ": false, - "daily-notes:์˜ค๋Š˜์˜ ์ผ์ผ ๋…ธํŠธ ์—ด๊ธฐ": false, - "templates:ํ…œํ”Œ๋ฆฟ ์‚ฝ์ž…": false, - "command-palette:๋ช…๋ น์–ด ํŒ”๋ ˆํŠธ ์—ด๊ธฐ": false, - "bases:์ƒˆ ๋ฒ ์ด์Šค ์ƒ์„ฑํ•˜๊ธฐ": false - } - }, - "active": "e84fb23982481828", - "lastOpenFiles": [ - "02_Software_Engineering/ํ–‰๋™ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ๋ถ„์„ (Behavioral Code Analysis).md", - "01_Process_Methodology/ํ•˜ํ–ฅ์‹ ๋ฐ ์ƒํ–ฅ์‹ ์ ‘๊ทผ๋ฒ• (Top-Down and Bottom-Up Approaches).md", - "02_Software_Engineering/ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ „๋žต (Hybrid Strategy).md", - "02_Software_Engineering/์ฝ”๋“œ๋ฒ ์ด์Šค ์ฝ๊ธฐ ์ง€์‹.md", - "02_Software_Engineering/์ฝ”๋“œ๋ฒ ์ด์Šค ๋งต (Codebase Map).md", - "02_Software_Engineering/์ฝ”๋“œ ์•…์ทจ (Code Smells).md", - "01_Process_Methodology/์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (Code Refactoring).md", - "01_Process_Methodology/์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค (Code Review Process).md", - "02_Software_Engineering/์ปจํ…์ŠคํŠธ ์—”์ง„ (Context Engine).md", - "02_Software_Engineering/์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ (AST, Abstract Syntax Tree).md", - "02_Software_Engineering/์ง„์ž…์  (Entry Points).md", - "03_DevOps_Environment/์ง€์†์  ๋ณด์•ˆ(DevSecOps)๊ณผ CI-CD ํ†ตํ•ฉ.md", - "02_Software_Engineering/์ค‘๋‹จ์  (Breakpoints).md", - "02_Software_Engineering/์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ (Static Code Analysis Tools).md", - "02_Software_Engineering/์ •์  ์ฝ”๋“œ ๋ถ„์„ (Static Code Analysis).md", - "02_Software_Engineering/์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ (SAST).md", - "02_Software_Engineering/์ž์—ฐ์–ด ์•„ํ‹ฐํŒฉํŠธ (Natural Language Artifacts).md", - "Agent & AI/์ธ๊ณต์ง€๋Šฅ ์ฝ”๋“œ ๋ถ„์„ (AI-Powered Codebase Analysis).md", - "02_Architecture_Principles/์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ ๋ฐ ๋””์ž์ธ ํŒจํ„ด (Architectural Styles & Design Patterns).md", - "02_Architecture_Principles/์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ (Architecture Diagrams).md", - "02_Architecture_Principles/์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์‹œ๊ฐํ™” (System Architecture Visualization).md", - "02_Software_Engineering/์Šคํƒ ํŠธ๋ ˆ์ด์Šค (Stack Trace).md", - "02_Software_Engineering/์†Œํ”„ํŠธ์›จ์–ด ๋ฌธ์„œํ™” (Software Documentation).md", - "02_Software_Engineering/๋ฒ„์ „ ๊ด€๋ฆฌ ์ปจํ…์ŠคํŠธ (Version Control Context).md", - "02_Software_Engineering/๋ฒ„์ „ ๊ด€๋ฆฌ ์ถ”์  ๋ถ„์„ (Version Control Tracking).md", - "02_Software_Engineering/๋ฒ„์ „ ๊ด€๋ฆฌ ์ด๋ ฅ ๋ถ„์„ (Version Control History Analysis).md", - "๋ฌด์ œ 1.canvas", - "๋ฌด์ œ.canvas", - "sessions/2026-05-01T12-09", - "sessions/2026-04-30T07-07", - "sessions", - "company_state.json", - "_shared", - "_agents/youtube/tools/youtube_account.py", - "_agents/youtube/tools/youtube_account.json", - "_agents/youtube/tools/trend_sniper.py", - "_agents/youtube/tools/trend_sniper.json", - "_agents/youtube/tools/telegram_notify.py" - ] -} \ No newline at end of file diff --git a/10_Wiki/Topics/01_Frontend_Mastery/Index.md b/10_Wiki/Topics/01_Frontend_Mastery/Index.md deleted file mode 100644 index afc0758c..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/Index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Index: Topics > 01_Frontend_Mastery - -## ๐Ÿ“ Documents -- [[React_Clean_Code_Best_Practices|React_Clean_Code_Best_Practices]] -- [[React_Hooks_Deep_Dive|React_Hooks_Deep_Dive]] -- [[React_Mental_Model|React_Mental_Model]] -- [[React_Performance_Optimization|React_Performance_Optimization]] -- [[React_State_Management_Strategy|React_State_Management_Strategy]] -- [[React_Testing_Strategy|React_Testing_Strategy]] -- [[TypeScript_Type_Safety|TypeScript_Type_Safety]] -- [[WebWorker_Performance|WebWorker_Performance]] diff --git a/10_Wiki/Topics/01_Frontend_Mastery/React_Clean_Code_Best_Practices.md b/10_Wiki/Topics/01_Frontend_Mastery/React_Clean_Code_Best_Practices.md deleted file mode 100644 index c26ad0e3..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/React_Clean_Code_Best_Practices.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: ๋ฆฌ์•กํŠธ ํด๋ฆฐ ์ฝ”๋“œ ๋ฐ ๊ฐœ๋ฐœ ์—ํ‹ฐ์ผ“ -category: Software [[Architecture|Architecture]] -tags: [Clean Code, Etiquette, Best Practice, Readable Code] -created: 2026-04-20 ---- - -# [[React_Clean_Code_Best_Practices|React_Clean_Code_Best_Practices]] (๋ฆฌ์•กํŠธ ํด๋ฆฐ ์ฝ”๋“œ) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ๊ฐ€๋…์„ฑ ์ข‹์€ ์ฝ”๋“œ๋Š” '์ปดํ“จํ„ฐ'๊ฐ€ ์ดํ•ดํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ, '๋‚˜์ค‘์— ์ด ์ฝ”๋“œ๋ฅผ ๊ณ ์น  ๋™๋ฃŒ(ํ˜น์€ ๋ฏธ๋ž˜์˜ ๋‚˜)'๊ฐ€ ์ˆจ ์‰ฌ๋“ฏ ์ฝ์–ด๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Early Return ํŒจํ„ด**: - - ์ค‘์ฒฉ๋œ `if-else`๋Š” ์ง€์˜ฅ์ด๋‹ค. ์˜ˆ์™ธ ์ƒํ™ฉ(Loading, Error)์„ ๋จผ์ € `return`์œผ๋กœ ์ณ๋‚ด๋ฉด, ํ•จ์ˆ˜์˜ ๋ณธ์ฒด๋Š” ํ•ญ์ƒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋กœ์ง๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค. -- **Props Destructuring (๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น)**: - - `props.user.name` ์ฒ˜๋Ÿผ ๊ฒฝ๋กœ๋ฅผ ๊ธธ๊ฒŒ ์“ฐ๋Š” ๋Œ€์‹ , ํ•จ์ˆ˜์˜ ์ธ์ž ๋‹จ๊ณ„์—์„œ `{ user: { name } }` ์ฒ˜๋Ÿผ ๋ถ„ํ•ดํ•˜๋ผ. ์ฝ”๋“œ๊ฐ€ ์ˆจ์„ ์‰ฌ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. -- **Explicit Naming (๋ช…์‹œ์  ๋„ค์ด๋ฐ)**: - - ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋Š” `handle[Action]` (์˜ˆ: `handle[[Search|Search]]`), ๋น„์ฆˆ๋‹ˆ์Šค ํ•จ์ˆ˜๋Š” `on[Action]` (์˜ˆ: `onSearchSubmit`)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฑ…์ž„ ์†Œ์žฌ๋ฅผ ๋ช…ํ™•ํžˆ ํ•œ๋‹ค. -- **์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ์—ํ‹ฐ์ผ“**: - - `&&` ์—ฐ์‚ฐ์ž ๋Œ€์‹  ์‚ผํ•ญ ์—ฐ์‚ฐ์ž(`? :`)๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค. ํŠนํžˆ `0 && ` ์‹œ ํ™”๋ฉด์— ์ˆซ์ž 0์ด ์ถœ๋ ฅ๋˜๋Š” ๋Œ€์ฐธ์‚ฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ์˜คํžˆ๋ ค ๋…์ด๋‹ค. ์ฝ”๋“œ๊ฐ€ 3์ค„์ธ๋ฐ ํ•จ์ˆ˜ 5๊ฐœ๋กœ ์ชผ๊ฐœ๋Š” ๊ฒƒ์€ ๊ฐ€๋…์„ฑ์„ ํ•ด์นœ๋‹ค. '์ง๊ด€์„ฑ'์ด '๋ถ„๋ฆฌ'๋ณด๋‹ค ์šฐ์„ ํ•  ๋•Œ๊ฐ€ ์žˆ์Œ์„ ๋ช…์‹ฌํ•˜๋ผ. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[Collaboration_Governance|Collaboration_Governance]] , [[System_Debugging_Protocol|System_Debugging_Protocol]] -- Foundation: [[React_Mental_Model|React_Mental_Model]] diff --git a/10_Wiki/Topics/01_Frontend_Mastery/React_Hooks_Deep_Dive.md b/10_Wiki/Topics/01_Frontend_Mastery/React_Hooks_Deep_Dive.md deleted file mode 100644 index 75d92ce0..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/React_Hooks_Deep_Dive.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ๋ฆฌ์•กํŠธ ํ›…(Hooks) ์‹ฌ์ธต ๋ถ„์„ ๋ฐ ํ™œ์šฉ -category: Software [[Architecture|Architecture]] -tags: [React, Hooks, useEffect, Custom Hooks] -created: 2026-04-20 ---- - -# [[React_Hooks_Deep_Dive|React_Hooks_Deep_Dive]] (๋ฆฌ์•กํŠธ ํ›… ์‹ฌํ™”) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ํ›…์€ ๋‹จ์ˆœํžˆ ํ•จ์ˆ˜๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์•  ์ฃผ๊ธฐ์™€ ๋…ผ๋ฆฌ๋ฅผ '์„ ์–ธ์ '์œผ๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๊ณ ๋„์˜ ๋™๊ธฐํ™” ๊ธฐ์ œ๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **useEffect์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ด€์ **: - - "๋งˆ์šดํŠธ๋  ๋•Œ ์‹คํ–‰"์ด๋ผ๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด ์‚ฌ๊ณ ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜๋ผ. `useEffect`๋Š” **์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๊ฐ’๊ณผ ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€ ์‹œ์Šคํ…œ(API, DOM ๋“ฑ)์„ ๋™๊ธฐํ™”**ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. -- **Custom Hooks (์ถ”์ƒํ™”์˜ ๊ฝƒ)**: - - ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(์˜ˆ: ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ํƒ€์ด๋จธ ๊ด€๋ฆฌ)์„ `useMy[[Logic|Logic]]` ์ฒ˜๋Ÿผ ๋”ฐ๋กœ ๋นผ๋‚ด์–ด ์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง UI ์„ ์–ธ์—๋งŒ ์ง‘์ค‘ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ด๊ฒƒ์ด ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ€๋…์„ฑ์„ ํญ๋ฐœ์‹œํ‚ค๋Š” ๋น„๊ฒฐ์ด๋‹ค. -- **Rules of Hooks**: - - ๋ฐ˜๋“œ์‹œ ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„์—์„œ๋งŒ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ๋ฆฌ์•กํŠธ๊ฐ€ ํ›…์˜ ์ƒํƒœ๋ฅผ ์œ ํ•œ ์ƒํƒœ ๋จธ์‹ ์ฒ˜๋Ÿผ ์ •ํ™•ํ•œ ์ˆœ์„œ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- `useEffect` ๋‚ด์—์„œ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋ฌดํ•œ ๋ฃจํ”„๋‚˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด `useMemo`๋‚˜ `useCallback`์œผ๋กœ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ฑฐ๋‚˜, ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ `useReducer`๋กœ ์œ„์ž„ํ•˜๋ผ. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[React_Performance_Optimization|React_Performance_Optimization]] , React_State_Management_Strategy -- Context: [[WebWorker_Performance|WebWorker_Performance]] diff --git a/10_Wiki/Topics/01_Frontend_Mastery/React_Mental_Model.md b/10_Wiki/Topics/01_Frontend_Mastery/React_Mental_Model.md deleted file mode 100644 index 250093cf..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/React_Mental_Model.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ๋ฆฌ์•กํŠธ ํ•ต์‹ฌ ๋ฉ˜ํƒˆ ๋ชจ๋ธ (UI as a Function of [[State|State]]) -category: Software [[Architecture|Architecture]] -tags: [React, State, Mental Model, Immutability] -created: 2026-04-20 ---- - -# [[React_Mental_Model|React_Mental_Model]] (๋ฆฌ์•กํŠธ ๋ฉ˜ํƒˆ ๋ชจ๋ธ) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์€ DOM์„ '์กฐ์ž‘(Manipulate)'ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ธ '์ƒํƒœ(State)'๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์„ ํ™”๋ฉด์— '์„ ์–ธ(Declare)'ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **UI = f(State)**: - - ํ™”๋ฉด์€ ์ƒํƒœ์˜ ๊ฒฐ๊ณผ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค. ๋ช…๋ นํ˜•(Imperative)์œผ๋กœ "์ด ๋ฒ„ํŠผ์˜ ๊ธ€์ž๋ฅผ ๋ฐ”๊ฟ”๋ผ"๋ผ๊ณ  ํ•˜๋Š” ์ˆœ๊ฐ„ ๋ฆฌ์•กํŠธ์˜ ์งˆ์„œ๋Š” ๋ฌด๋„ˆ์ง„๋‹ค. ์˜ค์ง ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๊ณ  ๋ฆฌ์•กํŠธ๊ฐ€ ์•Œ์•„์„œ ๊ทธ๋ฆฌ๊ฒŒ ํ•˜๋ผ. -- **Immutability (๋ถˆ๋ณ€์„ฑ)**: - - ๋ฆฌ์•กํŠธ๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๋งŒ ๋ Œ๋”๋ง์„ ์‹œ๋„ํ•œ๋‹ค. `arr.push(1)`์ด ์•„๋‹ˆ๋ผ `setArr([...arr, 1])`์ฒ˜๋Ÿผ **์ƒˆ๋กœ์šด ์›๋ณธ**์„ ๋ณต์ œํ•˜์—ฌ ๊ฐ€์ƒ DOM([[Virtual DOM|Virtual DOM]])์ด ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋•๋Š”๋‹ค. -- **Virtual DOM Diffing**: - - ๋ฆฌ์•กํŠธ๋Š” ์‹ค์ œ DOM์„ ์ง์ ‘ ๊ฑด๋“œ๋ฆฌ๊ธฐ ์ „์— ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ๊ฐ€์ƒ DOM์—์„œ ์ด์ „ ์ƒํƒœ์™€ ๋น„๊ต(Diffing)ํ•˜์—ฌ, ๊ผญ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ ํ™”๋ฉด์— ๋ฐ˜์˜(Commit)ํ•œ๋‹ค. ์ด๊ฒƒ์ด ๊ณ ์„ฑ๋Šฅ ์›น์˜ ๋น„๊ฒฐ์ด๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ๋ถˆ๋ณ€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋งค๋ฒˆ ๊ฑฐ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋•Œ๋กœ ์†ํ•ด๋‹ค. `Immer` ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๊ฑฐ๋‚˜, ์ƒํƒœ์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ์–ด([[Normalization|Normalization]]) ์—…๋ฐ์ดํŠธ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์ „๋žต์ด ์ค‘๊ธ‰ ๊ฐœ๋ฐœ์ž์˜ ์—ญ๋Ÿ‰์ด๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[React_Hooks_Deep_Dive|React_Hooks_Deep_Dive]] , [[Component_Design_Patterns|Component_Design_Patterns]] -- Foundation: [[System_Protocol_Standard|System_Protocol_Standard]] diff --git a/10_Wiki/Topics/01_Frontend_Mastery/React_Performance_Optimization.md b/10_Wiki/Topics/01_Frontend_Mastery/React_Performance_Optimization.md deleted file mode 100644 index 79372506..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/React_Performance_Optimization.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: ๋ฆฌ์•กํŠธ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์ „๋žต -category: Software [[Architecture|Architecture]] -tags: [Performance, Memoization, React.memo, [[Optimization|Optimization]]] -created: 2026-04-20 ---- - -# [[React_Performance_Optimization|React_Performance_Optimization]] (๋ฆฌ์•กํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ๊ฐ€์žฅ ๋น ๋ฅธ ๋ Œ๋”๋ง์€ 'ํ•˜์ง€ ์•Š๋Š” ๋ Œ๋”๋ง'์ด๋‹ค. ํ•„์š” ์—†๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅผ ๋•Œ๋งŒ ํ™”๋ฉด์ด ์ถœ๋ ์ด๊ฒŒ ํ•˜๋ผ. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Memoization (๋ฉ”๋ชจ์ด์ œ์ด์…˜)**: - - **React.memo**: ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณ€ํ•ด๋„ ๋‚ด Props๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•œ๋‹ค. - - **useMemo**: ๋น„์šฉ์ด ํฐ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ(์˜ˆ: ๋ณต์žกํ•œ ํ•„ํ„ฐ๋ง)๋ฅผ ์ €์žฅํ•ด๋‘๊ณ  ์žฌ์‚ฌ์šฉํ•œ๋‹ค. - - **useCallback**: ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ๋ณ€๋™์„ ๋ง‰์•„ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•œ๋‹ค. -- **Windowing (๊ฐ€์ƒ ๋ฆฌ์ŠคํŠธ)**: - - ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ์ด ์žˆ์–ด๋„ ์‚ฌ์šฉ์ž์˜ ๋ˆˆ์— ๋ณด์ด๋Š” ์ˆ˜์‹ญ ๊ฐœ๋งŒ ์‹ค์ œ DOM์— ๋ Œ๋”๋งํ•œ๋‹ค. (์˜ˆ: `react-window`, `react-virtualized`). -- **์ƒํƒœ์˜ ์œ„์น˜ ์„ ์ • ([[State|State]] Colocation)**: - - ์ „์—ญ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์•ฑ ์ „์ฒด๊ฐ€ ๋“ค์ฉ์ด์ง€ ์•Š๊ฒŒ ํ•˜๋ผ. ์ƒํƒœ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ๊ทผ์ฒ˜๋กœ ๋‚ด๋ ค๋ผ. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ๋ชจ๋“  ๊ณณ์— `memo`๋ฅผ ์“ฐ๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋‹ค. ๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์€ ์ด๋ฏธ ๋งค์šฐ ๋›ฐ์–ด๋‚˜๋‹ค. ๋ณ‘๋ชฉ ํ˜„์ƒ์ด '์‹ค์ œ๋กœ ๊ด€์ธก'๋  ๋•Œ๋งŒ ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์›์น™์ด๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[WebWorker_Performance|WebWorker_Performance]] , [[System_Debugging_Protocol|System_Debugging_Protocol]] -- Foundation: [[React_Mental_Model|React_Mental_Model]] diff --git a/10_Wiki/Topics/01_Frontend_Mastery/React_State_Management_Strategy.md b/10_Wiki/Topics/01_Frontend_Mastery/React_State_Management_Strategy.md deleted file mode 100644 index 31b687f9..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/React_State_Management_Strategy.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: ์ „๋žต์  ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ (Global & Server [[State|State]]) -category: Software [[Architecture|Architecture]] -tags: [State [[Management|Management]], React Query, SSOT, Architecture] -created: 2026-04-20 ---- - -# [[React_State_Management_Strategy|React_State_Management_Strategy]] (์ƒํƒœ ๊ด€๋ฆฌ ์ „๋žต) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ์ƒํƒœ๋Š” '์–ด๋””๋“ ' ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, '์•„๋ฌด๋ฐ๋‚˜' ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ์ƒํƒœ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์ „ํŒŒ ๋ฒ”์œ„์— ๋”ฐ๋ผ ๋ช…ํ™•ํ•œ ๊ฑฐ์ฃผ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ผ. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **์ƒํƒœ์˜ 3๋Œ€ ๊ฑฐ์ฃผ์ง€**: - 1. **Local State (๊ฑฐ์ฃผํ˜•)**: `useState`. ํŠน์ • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋งŒ ์•Œ๊ณ  ์žˆ๋Š” '์‚ฌ์ƒํ™œ' (์˜ˆ: ๋“œ๋กญ๋‹ค์šด ์—ด๋ฆผ ์—ฌ๋ถ€). - 2. **Global State (๊ณต์šฉ)**: `Zustand`, `Redux`. ์˜จ ๋™๋„ค๊ฐ€ ์•Œ์•„์•ผ ํ•˜๋Š” '๊ณต๊ณต ์ •๋ณด' (์˜ˆ: ๋กœ๊ทธ์ธ ์œ ์ €, ๋‹คํฌ๋ชจ๋“œ). - 3. **Server State (๋นŒ๋ ค์˜จ ๊ฒƒ)**: `React Query`. ์„œ๋ฒ„์—์„œ ์ž ์‹œ ๋นŒ๋ ค์™€์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” '์™ธ๋ถ€ ๋ฐ์ดํ„ฐ'. -- **Server State์˜ ๋…๋ฆฝ**: - - ๊ณผ๊ฑฐ์—” Redux์— ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์œผ๋ ค ํ–ˆ์œผ๋‚˜, ์ด์ œ๋Š” ์บ์‹ฑ, ์žฌ์‹œ๋„, ๋กœ๋”ฉ ๊ด€๋ฆฌ๋ฅผ ์ „๋‹ดํ•˜๋Š” **React Query/SWR**๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์„ธ๊ณ„์ ์ธ ์ถ”์„ธ๋‹ค. -- **์ƒํƒœ์˜ ์ตœ์†Œํ™” ์›์น™**: - - ๋‹ค๋ฅธ ์ƒํƒœ๋กœ๋ถ€ํ„ฐ ๊ณ„์‚ฐ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’(์˜ˆ: `firstName`+`lastName` = `fullName`)์€ ์ ˆ๋Œ€ '์ƒํƒœ'๋กœ ๋งŒ๋“ค์ง€ ๋งˆ๋ผ. ๋ Œ๋”๋ง ์‹œ์ ์— ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์ •ํ•ฉ์„ฑ ์œ ์ง€์˜ ํ•ต์‹ฌ์ด๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ๋ฌด์กฐ๊ฑด์ ์ธ ์ „์—ญ ์ƒํƒœ ์ง€์ƒ์ฃผ์˜๋Š” '[[Prop Drilling|Prop Drilling]]'๋ณด๋‹ค ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์•”์‹œ์ ์œผ๋กœ ์–ฝํžˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ƒํƒœ๋Š” ๋˜๋„๋ก ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊น๊ฒŒ ์œ„์น˜์‹œ์ผœ๋ผ. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[Single_Source_of_Truth|Single_Source_of_Truth]] , [[API_Communication_Patterns|API_Communication_Patterns]] -- Foundation: [[React_Hooks_Deep_Dive|React_Hooks_Deep_Dive]] diff --git a/10_Wiki/Topics/01_Frontend_Mastery/React_Testing_Strategy.md b/10_Wiki/Topics/01_Frontend_Mastery/React_Testing_Strategy.md deleted file mode 100644 index cf1950eb..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/React_Testing_Strategy.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ ์ „๋žต -category: Software [[Architecture|Architecture]] -tags: [[Testing|[Testing]], Vitest, RTL, Unit Test, QA] -created: 2026-04-20 ---- - -# [[React_Testing_Strategy|React_Testing_Strategy]] (๋ฆฌ์•กํŠธ ํ…Œ์ŠคํŠธ ์ „๋žต) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ํ…Œ์ŠคํŠธ๋Š” '๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ'๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, '์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฝํ—˜ํ•  ๊ฐ€์น˜'๊ฐ€ ์œ ์ง€๋˜๊ณ  ์žˆ๋Š”์ง€ ์ˆ˜ํ•™์ ์œผ๋กœ ์ฆ๋ช…ํ•˜๋Š” ๋ณดํ—˜์ด๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Unit Testing (๋‹จ์œ„ ํ…Œ์ŠคํŠธ)**: - - `Vitest` ์‚ฌ์šฉ. ์ˆœ์ˆ˜ ํ•จ์ˆ˜, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์— ์ •ํ™•ํ•œ ์ถœ๋ ฅ์„ ๋‚ด๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค. -- **Integration Testing (ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ)**: - - `React Testing Library (RTL)`์˜ ์ฒ ํ•™: "์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋“ฏ ํ…Œ์ŠคํŠธํ•˜๋ผ." ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ™”๋ฉด์ด ๋ณ€ํ•˜๋Š”์ง€, ์œ ์ €์˜ ์ธํ„ฐ๋ž™์…˜์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•œ๋‹ค. -- **Mocking (๋ชจํ‚น)**: - - ์„œ๋ฒ„ API ํ˜ธ์ถœ(`msw`)์ด๋‚˜ ๋ฌด๊ฑฐ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์งœ(Mock)๋กœ ๋Œ€์ฒดํ•˜์—ฌ ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ์•ˆ์ •์ ์ธ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•œ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 100% ์ง‘์ฐฉ์€ ์ƒ์‚ฐ์„ฑ์„ ๊ฐ‰์•„๋จน๋Š”๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ํ•ต์‹ฌ ๋กœ์ง๊ณผ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” '๋ฉ”์ธ ์‹œ๋‚˜๋ฆฌ์˜ค'๋ถ€ํ„ฐ ๊ฒฌ๊ณ ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜๋Š” ์ง€ํ˜œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[System_Debugging_Protocol|System_Debugging_Protocol]] , [[Reliability_Safety_First|Reliability_Safety_First]] -- Tool: [[Modern_Environment_Ecosystem|Modern_Environment_Ecosystem]] diff --git a/10_Wiki/Topics/01_Frontend_Mastery/TypeScript_Type_Safety.md b/10_Wiki/Topics/01_Frontend_Mastery/TypeScript_Type_Safety.md deleted file mode 100644 index 7ff64b3e..00000000 --- a/10_Wiki/Topics/01_Frontend_Mastery/TypeScript_Type_Safety.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ ์•ˆ์ •์  ๊ฐœ๋ฐœ (Type Safety) -category: Software [[Architecture|Architecture]] -tags: [TypeScript, Interface, Type Safety, Generic] -created: 2026-04-20 ---- - -# [[TypeScript_Type_Safety|TypeScript_Type_Safety]] (ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ •์„) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹น์‹ ์„ ๊ท€์ฐฎ๊ฒŒ ํ•˜๋Š” '์ž”์†Œ๋ฆฌ๊พผ'์ด ์•„๋‹ˆ๋ผ, ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ผ๋Š” '๋‚ญ๋– ๋Ÿฌ์ง€' ์•ž์—์„œ ๋‹น์‹ ์„ ๋ถ™์žก์•„์ฃผ๋Š” '์ƒ๋ช…์ค„'์ด๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Non-Nullable & Narrowing**: - - ๋ฐ์ดํ„ฐ๊ฐ€ `null`์ด๊ฑฐ๋‚˜ `undefined`์ผ ์ˆ˜ ์žˆ์Œ์„ ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ๊ฐ•์ œ๋กœ ์ธ์ง€์‹œ์ผœ, ๋Ÿฐํƒ€์ž„์—์„œ ๋ฐœ์ƒํ•˜๋Š” 'TypeError'๋ฅผ 90% ์ด์ƒ ์‚ฌ์ „ ์ฐจ๋‹จํ•œ๋‹ค. -- **Generics (์ถ”์ƒํ™”์˜ ๋ํŒ์™•)**: - - ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์€ ๋‚˜์ค‘์— ์ •ํ•˜์ง€๋งŒ, ๊ทธ ๊ตฌ์กฐ์˜ ์ผ๊ด€์„ฑ์€ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘์˜ ํ•„์ˆ˜ ์š”๊ฑด์ด๋‹ค. -- **Interface & Alias**: - - ์‹œ์Šคํ…œ ์ „์ฒด์— ํ๋ฅด๋Š” ๋ฐ์ดํ„ฐ์˜ 'ํ˜•ํƒœ(Shape)'๋ฅผ ์ •์˜ํ•˜๋ผ. ํƒ€์ž… ์ •์˜๋งŒ ์ž˜ ๋˜์–ด ์žˆ์–ด๋„ ์ฝ”๋“œ๋Š” ์Šค์Šค๋กœ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ํ›Œ๋ฅญํ•œ ๋ฌธ์„œ๊ฐ€ ๋œ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- `any`๋ฅผ ๋‚จ๋ฐœํ•˜๋Š” ์ˆœ๊ฐ„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ์ด์ ์€ ์‚ฌ๋ผ์ง„๋‹ค. ์ฐจ๋ผ๋ฆฌ `unknown`์„ ์“ฐ๊ณ  ํƒ€์ž…์„ ์ขํžˆ๋Š”(Narrowing) ๋ฐฉ์‹์„ ํƒํ•˜๋ผ. ํƒ€์ž… ์ •์˜์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ๋บ๊ธฐ๋Š” 'ํƒ€์ž… ํ—ฌ(Type Hell)'์„ ๊ฒฝ๊ณ„ํ•˜๊ณ  ์ ์ ˆํ•œ ํƒ€ํ˜‘์ ์„ ์ฐพ์•„๋ผ. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[React_Clean_Code_Best_Practices|React_Clean_Code_Best_Practices]] , [[React_Hooks_Deep_Dive|React_Hooks_Deep_Dive]] -- Foundation: [[System_Protocol_Standard|System_Protocol_Standard]] diff --git a/10_Wiki/Topics/01_Process_Methodology/Refactoring.md b/10_Wiki/Topics/01_Process_Methodology/Refactoring.md deleted file mode 100644 index 30baa419..00000000 --- a/10_Wiki/Topics/01_Process_Methodology/Refactoring.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: P-REINFORCE-WIKI-3576D819 -category: "10_Wiki/๐Ÿ’ก Topics/01_Process_Methodology" -confidence_score: 0.95 -tags: ['refactoring', 'strangler-fig-pattern', 'ports-and-adapters-(hexagonal-architecture)', 'software-architecture-erosion', 'technical-debt', 'process-methodology'] -last_reinforced: 2026-05-02 ---- - -# [[Refactoring]] - -## ๐Ÿ“Œ Brief ์‹ Summary -๋ฆฌํŒฉํ† ๋ง(Refactoring)์€ ๋ณ€ํ™”ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์‹œ์Šคํ…œ ํ™•์žฅ์— ๋Œ€์‘ํ•˜๊ณ  ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ธฐ์กด ์ฝ”๋“œ๋‚˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์ง„์ ์œผ๋กœ ์žฌ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ดˆ๊ธฐ MVP ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์„ ํƒํ•œ ๋‹จ์ˆœํ•œ ์•„ํ‚คํ…์ฒ˜(์˜ˆ: ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜)๊ฐ€ ์‹œ์Šคํ…œ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ํ•œ๊ณ„์— ๋ถ€๋”ชํž ๋•Œ, ๋ณด๋‹ค ๋ชจ๋“ˆํ™”๋˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜(์˜ˆ: ํ—ฅ์‚ฌ๊ณ ๋‚ , ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค)๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ์ง„ํ™” ๋‹จ๊ณ„๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [2-4]. - -## ๐Ÿ“– Core Content -- **์•„ํ‚คํ…์ฒ˜ ์ง„ํ™”์™€ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ํ•ด์†Œ:** ์Šคํƒ€ํŠธ์—…์ด๋‚˜ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋Š” ๋น ๋ฅธ ์ถœ์‹œ๋ฅผ ์œ„ํ•ด ๋‹จ์ˆœํ•œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)๋‚˜ ๋ชจ๋†€๋ฆฌ์‹(Monolithic) ๊ตฌ์กฐ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค [4, 5]. ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์ด ์„ฑ์žฅํ•˜๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•  ๋•Œ, ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์‹ฌ๊ฐํ•œ ๊ธฐ์ˆ  ๋ถ€์ฑ„์™€ ๋ณด์•ˆ ๋ถ€์ฑ„๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ—ฅ์‚ฌ๊ณ ๋‚ (Hexagonal)์ด๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ๋ฆฌํŒฉํ† ๋ง์ด ๋ถˆ๊ฐ€ํ”ผํ•ฉ๋‹ˆ๋‹ค [1, 3]. -- **์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(Incremental Refactoring):** ์•„ํ‚คํ…์ฒ˜ ๋ฆฌํŒฉํ† ๋ง์€ ์œ„ํ—˜์„ฑ์ด ํฐ "๋น…๋ฑ…(Big bang)" ๋ฐฉ์‹์˜ ์ „๋ฉด ์žฌ๊ตฌ์ถ•์„ ํ”ผํ•˜๊ณ  ์ ์ง„์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค [6]. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ(Ports/Adapters)๋ฅผ ๋„์ž…ํ•˜์—ฌ ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์„œ์„œํžˆ ๋‚ฎ์ถ”๊ฑฐ๋‚˜ [6, 7], ์ŠคํŠธ๋žญ๊ธ€๋Ÿฌ ํ”ผ๊ทธ ํŒจํ„ด(Strangler Fig Pattern)์„ ํ™œ์šฉํ•ด ๋ชจ๋†€๋ฆฌ์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์„œ๋ฒ„๋ฆฌ์Šค ์„œ๋น„์Šค๋กœ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [8]. -- **์•ˆ์ „ํ•œ ๋ฆฌํŒฉํ† ๋ง์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„:** ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture)๋‚˜ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์™€ ๊ฐ™์ด ๋„๋ฉ”์ธ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋Š”, ๊ธฐ์ˆ ์ด๋‚˜ ํ”„๋กœํ† ์ฝœ์— ๊ด€๊ณ„์—†์ด ๋‚ด๋ถ€ ๋กœ์ง์„ ๋ณดํ˜ธํ•˜๋ฏ€๋กœ ์ตœ์†Œํ•œ์˜ ์œ„ํ—˜์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [9]. -- **์•„ํ‚คํ…์ฒ˜ ์นจ์‹(Architecture Erosion)์— ๋Œ€ํ•œ ์น˜๋ฃŒ์  ์กฐ์น˜:** ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์˜๋„๋œ ์„ค๊ณ„์™€ ์‹ค์ œ ๊ตฌํ˜„ ์‚ฌ์ด์— ๊ฒฉ์ฐจ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” '์•„ํ‚คํ…์ฒ˜ ์นจ์‹'์„ ๊ฒช๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [10]. ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋ˆ„์  ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ด๋Ÿฌํ•œ ์นจ์‹์„ ํ•ด๊ฒฐํ•˜๊ณ  ์‹œ์Šคํ…œ์„ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ์น˜๋ฃŒ์  ์กฐ์น˜(Remedial measures)๋กœ ๋ฆฌํŒฉํ† ๋ง๊ณผ ์žฌ์„ค๊ณ„(Redesign)๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค [11]. - -## โš–๏ธ Trade-offs & Caveats -- **๊ฐœ๋ฐœ ์ค‘ยทํ›„๋ฐ˜๋ถ€์˜ ๋†’์€ ๋ณต์žก์„ฑ:** ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํฐ ๊ทœ๋ชจ์˜ ๋ฆฌํŒฉํ† ๋ง์„ ๊ฐœ๋ฐœ ์ค‘ยทํ›„๋ฐ˜๋ถ€์— ์‹œ๋„ํ•  ๊ฒฝ์šฐ, ์ด๋ฏธ ๊ตฌ์ถ•๋œ ์˜์กด์„ฑ๊ณผ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ์ƒ๋‹นํ•œ ๊ณ ํ†ต๊ณผ ๋ง‰๋Œ€ํ•œ ๋…ธ๋ ฅ์ด ์ˆ˜๋ฐ˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 12]. -- **๊ฐ•ํ•œ ๊ฒฐํ•ฉ(Tight Coupling) ํ™˜๊ฒฝ์—์„œ์˜ ๋ฆฌํŒฉํ† ๋ง ์ทจ์•ฝ์„ฑ:** ๊ฒฝ๊ณ„๊ฐ€ ๋ถˆ๋ถ„๋ช…ํ•ด์ง„ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋‚˜ ๊ตฌ์กฐ๊ฐ€ ์—‰ํ‚จ ๋ชจ๋†€๋ฆฌ์‹ ์‹œ์Šคํ…œ์—์„œ๋Š”, ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ์ธํ•ด ๋ฆฌํŒฉํ† ๋ง ์‹œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๊ธฐ ์‰ฝ๊ณ (brittle), ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์—ฐ์‡„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ํฝ๋‹ˆ๋‹ค [13, 14]. -- **๋น„์šฉ๊ณผ ์‹œ๊ฐ„์˜ ์ œ์•ฝ:** ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ƒํ™˜ํ•˜๊ณ  ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜์ง€๋งŒ, ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์„œ๋น„์Šค ๋ถ„๋ฆฌ(์˜ˆ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค)๋ฅผ ์—ผ๋‘์— ๋‘์ง€ ์•Š๊ณ  ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋†€๋ฆฌ์‹ ์‹œ์Šคํ…œ์„ ๋ถ„ํ•ดํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํ•œ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„๊ณผ ์šด์˜ ์ธํ”„๋ผ ๋ณ€๊ฒฝ ๋น„์šฉ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค [2, 15]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๋งˆ์ด๊ทธ๋ ˆ์ด์…˜/์ „ํ™˜ ์ „๋žต] -- [[Strangler Fig Pattern]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ธฐ์กด ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋ฒ„๋ฆฌ์Šค๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์˜ ๊ฐ€์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์•„ํ‚คํ…์ฒ˜ ๋ถ€์ฑ„๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ถ„ํ•  ๋ฐ ์ƒํ™˜ํ•˜๋Š” ์‹ค๋ฌด์ ์ธ ๋ฆฌํŒฉํ† ๋ง ๋ฐฉ๋ฒ•๋ก ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Ports and Adapters (Hexagonal Architecture)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ ์‹œ์Šคํ…œ์„ ๋””์ปคํ”Œ๋งํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์™ธ๋ถ€ ์ธํ”„๋ผ์˜ ์˜์กด์„ฑ์„ ์—ญ์ „์‹œ์ผœ ๋ฆฌํŒฉํ† ๋ง์— ๋”ฐ๋ฅธ ๋ถ€์ž‘์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ตฌ์กฐ์  ์›๋ฆฌ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### [์•„ํ‚คํ…์ฒ˜ ํ’ˆ์งˆ ๋ฐ ๋ถ€์ฑ„] -- [[Software Architecture Erosion]] - - ์—ฐ๊ฒฐ ์ด์œ : ์•„ํ‚คํ…์ฒ˜ ์นจ์‹์€ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ์›์ธ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ๋ฆฌํŒฉํ† ๋ง์€ ์ด๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์น˜๋ฃŒ์  ์กฐ์น˜๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค [10, 11]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์™œ ์ดˆ๊ธฐ์— ์ž˜ ์„ค๊ณ„๋œ ์‹œ์Šคํ…œ์ด๋ผ๋„ ์ง€์†์ ์ธ ๋ฆฌํŒฉํ† ๋ง ์—†์ด๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฌด๋„ˆ์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ๊ธ‰์ฆํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Technical Debt]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋†€๋ฆฌ์Šค๋‚˜ ๋‹จ์ˆœ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ™•์žฅ์„ ๋งž์ดํ•  ๋•Œ ์ถ•์ ๋˜๋Š” ๋ถ€์ฑ„์ด๋ฉฐ, ์ด๋ฅผ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค [1, 15]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์‹œ์— ๋ฆฌํŒฉํ† ๋งํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ๊ณผ ๊ฐœ๋ฐœ ์†๋„์— ๋ฏธ์น˜๋Š” ์•…์˜ํ–ฅ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions - -- ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)๊ฐ€ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ(Tight Coupling) ์ƒํƒœ๋กœ ๋ณ€์งˆ๋˜์—ˆ์„ ๋•Œ, ์ด๋ฅผ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ ์œ„ํ•œ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ ๋„์ž…์˜ ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์ŠคํŠธ๋žญ๊ธ€๋Ÿฌ ํ”ผ๊ทธ ํŒจํ„ด(Strangler Fig Pattern)์„ ์ ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์•„ํ‚คํ…์ฒ˜ ์นจ์‹(Architecture Erosion)์„ ์กฐ๊ธฐ์— ์‹๋ณ„ํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ์ด์–ด์ง€๊ธฐ ์ „์— ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ํ™”๋œ ์•„ํ‚คํ…์ฒ˜ ์ ํ•ฉ์„ฑ ๊ฒ€์‚ฌ(Architecture Conformance Check) ๊ธฐ๋ฒ•์€ ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€? -- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด UI๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ธต์— ๋ถ„์‚ฐ๋˜์–ด ๋ˆ„์ˆ˜(Leak)๋œ ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ, ๋„๋ฉ”์ธ ์ค‘์‹ฌ ์„ค๊ณ„(DDD) ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ๊ฒช๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋Š” ๋ฌด์—‡์ธ๊ฐ€? -- ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ • ์ค‘ ๋ถˆ๊ฐ€ํ”ผํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ, ์‹œ์Šคํ…œ์˜ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๋ฐ ์ด์ „ ๊ธฐ๋Šฅ๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ API ๋ฒ„์ €๋‹ ๋ฐ ๋ผ์šฐํŒ… ์ „๋žต์€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ๋ชจ๋†€๋ฆฌ์‹ ์‹œ์Šคํ…œ์˜ ํŠน์ • ๋ชจ๋“ˆ์„ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋กœ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜, ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋‚ด๋ถ€์— ์ธํ„ฐํŽ˜์ด์Šค(ํฌํŠธ)๋ฅผ ์ •์˜ํ•˜์—ฌ ์™ธ๋ถ€ ์˜์กด์„ฑ(์–ด๋Œ‘ํ„ฐ)์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•  ๋•Œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. -- **System Design:** ์ดˆ๊ธฐ ์‹œ์Šคํ…œ์€ ๋น ๋ฅธ ์†๋„๋ฅผ ์œ„ํ•ด ๋‹จ์ˆœํ•œ ๋ชจ๋“ˆ๋Ÿฌ ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith)๋กœ ์„ค๊ณ„ํ•˜๋˜, ํ–ฅํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ํญ์ฆํ•  ๋•Œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์‰ฝ๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„๋ฉ”์ธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋ฏธ๋ฆฌ ๋‚ฎ์ถ”๋Š” ์ „๋žต์„ ์ทจํ•  ๋•Œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. -- **Operation / Maintenance:** ์ฝ”๋“œ ์ •์  ๋ถ„์„์ด๋‚˜ ์•„ํ‚คํ…์ฒ˜ ์ ํ•ฉ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ์•„ํ‚คํ…์ฒ˜ ์นจ์‹ ๋ฐ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜ ์ฃผ๊ธฐ๋งˆ๋‹ค ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌํŒฉํ† ๋ง ์Šคํ”„๋ฆฐํŠธ๋ฅผ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค. -- **Learning Path:** ๊ธฐ๋ณธ ๊ณ„์ธตํ˜• ํŒจํ„ด ๊ตฌ์ถ• -> ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋ฐ ๊ตฌ์กฐ์  ํ•œ๊ณ„ ์ฒด๊ฐ -> ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(SOLID, Clean Architecture) ํ•™์Šต -> ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ณด๋Š” ๊ณผ์ •์œผ๋กœ ํ•™์Šต์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. -- **My Project Relevance:** ํ˜„์žฌ ๊ตฌ์ถ• ์ค‘์ธ MVP ํ”„๋กœ์ ํŠธ๊ฐ€ ํ–ฅํ›„ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ(Cloud-Native) ํ™˜๊ฒฝ์œผ๋กœ ์Šค์ผ€์ผ์—…๋  ๊ฒƒ์„ ๋Œ€๋น„ํ•˜์—ฌ, ๋ฌด๋ฆฌํ•œ ๋น…๋ฑ… ๋ฐฉ์‹์˜ ์ „ํ™˜์„ ํ”ผํ•˜๊ณ  ์ ์ง„์ ์ธ ๋ฆฌํŒฉํ† ๋ง์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ๊ฒฝ๊ณ„๋ฅผ ์‚ฌ์ „์— ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค. - -### Adjacent Topics - -- [[Domain-Driven Design (DDD)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์•„ํ‚คํ…์ฒ˜ ๋ฆฌํŒฉํ† ๋ง ์‹œ, ๋ชจ๋†€๋ฆฌ์‹ ์‹œ์Šคํ…œ์„ ๋ถ„ํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ๊ณ„(Bounded Context)๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ •์˜ํ•˜๋Š” ๊ธฐ์ค€์ ์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [[Microservices Decomposition]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„œ๋น„์Šค๋ณ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Database per Service)๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์‚ฌ๊ฐ€(Saga) ํŒจํ„ด์ด๋‚˜ CQRS๋ฅผ ๋„์ž…ํ•˜๋Š” ์‹ค๋ฌด์ ์ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ธฐ๋ฒ•์œผ๋กœ ํƒ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-05-02* \ No newline at end of file diff --git a/10_Wiki/Topics/02_Architecture_Principles/API_Communication_Patterns.md b/10_Wiki/Topics/02_Architecture_Principles/API_Communication_Patterns.md deleted file mode 100644 index 55668e02..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/API_Communication_Patterns.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ํšจ์œจ์ ์ธ API ํ†ต์‹  ํŒจํ„ด (Axios & Interceptors) -category: Software [[Architecture|Architecture]] -tags: [API, Axios, Interceptor, Error Handling, Network] -created: 2026-04-20 ---- - -# [[API_Communication_Patterns|API_Communication_Patterns]] (API ํ†ต์‹  ํŒจํ„ด) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ์„œ๋ฒ„์™€์˜ ๋Œ€ํ™”๋Š” ํ•ญ์ƒ '์ •์ค‘ํ•˜๋˜ ์˜์‹ฌํ•˜๋ฉฐ' ์ฒ˜๋ฆฌํ•˜๋ผ. ๋ชจ๋“  ์š”์ฒญ์€ ์ค‘์•™ ํ†ต์ œ์†Œ(Interceptor)๋ฅผ ๊ฑฐ์น˜๊ณ  ๋ชจ๋“  ์—๋Ÿฌ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Service Layer (์„œ๋น„์Šค ๋ ˆ์ด์–ด) ์ถ”์ƒํ™”**: - - ์ปดํฌ๋„ŒํŠธ ๋‚ด์— `axios` ์ฝ”๋“œ๋ฅผ ๊ธฐ์ƒ์‹œํ‚ค์ง€ ๋งˆ๋ผ. `userService.js`, `productApi.js` ์ฒ˜๋Ÿผ API๋ณ„๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง 'ํ•จ์ˆ˜ ํ˜ธ์ถœ'๋งŒ ์•Œ๊ฒŒ ํ•˜๋ผ. -- **Axios Interceptors (์‹ฌ์‚ฌ ํ†ต๋กœ)**: - - ๋ชจ๋“  ์š”์ฒญ์— ์ธ์ฆ ํ† ํฐ์„ ์ž๋™์œผ๋กœ ๋ถ™์ด๊ฑฐ๋‚˜, ๋ฐฑ์—”๋“œ์—์„œ ๋‚ด๋ ค์˜ค๋Š” 401 ์—๋Ÿฌ๋ฅผ ๊ฐ€๋กœ์ฑ„์„œ ์ž๋™์œผ๋กœ ํ† ํฐ์„ ๊ฐฑ์‹ (Silent Refresh)ํ•˜๋Š” ๋กœ์ง์„ ์ค‘์•™ ์ง‘๊ถŒํ™”ํ•œ๋‹ค. -- **Error Scenario Planning**: - - 400(์ž˜๋ชป๋œ ์š”์ฒญ), 403(๊ถŒํ•œ ์—†์Œ), 500(์„œ๋ฒ„ ์ฃฝ์Œ) ๋“ฑ ๊ฐ ์—๋Ÿฌ ์ฝ”๋“œ๋ณ„๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฝํ—˜ํ•  UI ์ฒ˜๋ฆฌ ๋ฐฉ์นจ์„ ๋ฏธ๋ฆฌ ์•ฝ์†ํ•˜๋ผ. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ๋ชจ๋“  ํ†ต์‹ ์— Axios๊ฐ€ ์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ์ธ `fetch`๋กœ๋„ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์„ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด ๊ฐ€๋ฒผ์šด ์•ฑ์„ ๋งŒ๋“œ๋Š” ์ฒซ๊ฑธ์Œ์ผ ์ˆ˜ ์žˆ๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[System_Protocol_Standard|System_Protocol_Standard]] , React_State_Management_Strategy -- Foundation: [[Reliability_Safety_First|Reliability_Safety_First]] diff --git a/10_Wiki/Topics/02_Architecture_Principles/CQRS.md b/10_Wiki/Topics/02_Architecture_Principles/CQRS.md deleted file mode 100644 index 809bd012..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/CQRS.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -id: P-REINFORCE-WIKI-73312AB3 -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -confidence_score: 0.95 -tags: ['cqrs', 'event-sourcing-pattern', 'microservices-architecture', 'event-driven-architecture', 'message-brokers-(e.g.,-kafka)', 'architecture-principles'] -last_reinforced: 2026-05-02 ---- - -# [[CQRS]] - -## ๐Ÿ“Œ Brief Summary -CQRS(Command Query Responsibility Segregation)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ๊ธฐ(Query) ์ž‘์—…๊ณผ ์“ฐ๊ธฐ(Command) ์ž‘์—…์„ ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ๋ณ„๋„์˜ ๋ชจ๋ธ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๋‹ค [1]. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ง‘์•ฝ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ์ฝ๊ธฐ ์ž‘์—…์ด ์“ฐ๊ธฐ ์ž‘์—…๋ณด๋‹ค ์••๋„์ ์œผ๋กœ ๋งŽ์€ ํ™˜๊ฒฝ(์˜ˆ: 10๋ฐฐ ์ด์ƒ)์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค [1, 2]. ์ตœ๊ทผ์—๋Š” ๊ฐœ์ธํ™”๋œ ๋””์ง€ํ„ธ ํ™˜๊ฒฝ์—์„œ AI ํ†ตํ•ฉ ์„œ๋น„์Šค๋‚˜ ๋ฐ์ดํ„ฐ ๋ฐ ๋ถ„์„ ์„œ๋น„์Šค ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ด ํŒจํ„ด์˜ ๋„์ž… ํ•„์š”์„ฑ์ด ๋”์šฑ ์ปค์ง€๊ณ  ์žˆ๋‹ค [1]. - -## ๐Ÿ“– Core ์†Œ์Šค์— ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด "์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋ช…์‹œํ•˜์‹œ์˜ค. Content -- **์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋ชจ๋ธ์˜ ์—„๊ฒฉํ•œ ๋ถ„๋ฆฌ:** - CQRS์˜ ํ•ต์‹ฌ์€ ์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” '๋ช…๋ น(Command)'๊ณผ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” '์กฐํšŒ(Query)'์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค [1]. ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์ผ์ˆ˜๋ก ์กฐํšŒ์™€ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ณผ์ •์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, CQRS๋Š” ์ด๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ๊ฐ์— ๋งž๋Š” ๋ชจ๋ธ์„ ์ƒ์„ฑํ•œ๋‹ค [2]. -- **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ๊ธฐ์ˆ  ์Šคํƒ์˜ ๋…๋ฆฝ์  ์ตœ์ ํ™”:** - ์ฝ๊ธฐ ์ž‘์—…์€ ๋ณต์žกํ•œ ์กฐ์ธ ์—ฐ์‚ฐ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด **์—ญ์ •๊ทœํ™”(denormalized)๋œ ๋ฐ์ดํ„ฐ**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ๋น ๋ฅธ ์ฟผ๋ฆฌ ์†๋„๋ฅผ ๋‹ฌ์„ฑํ•œ๋‹ค [3]. ๊ตฌ์กฐ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ **์“ฐ๊ธฐ ์ž‘์—…์—๋Š” ์•ˆ์ „ํ•œ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ, ์ฝ๊ธฐ ์ž‘์—…์—๋Š” ๊ณ ์† ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ ์šฉํ•˜๋Š” ๋“ฑ ์œ ์—ฐํ•œ ์Šคํ† ๋ฆฌ์ง€ ๊ธฐ์ˆ  ์„ ํƒ์ด ๊ฐ€๋Šฅ**ํ•˜๋‹ค [3]. -- **ํŒ€์˜ ๋…๋ฆฝ์„ฑ๊ณผ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ:** - ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ํŒ€์ด ์ฝ๊ธฐ ๋ชจ๋ธ๊ณผ ์“ฐ๊ธฐ ๋ชจ๋ธ์„ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜์—ฌ ์ „์ฒด์ ์ธ ํŒ€ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ธ๋‹ค [3]. -- **๋ถ„์‚ฐ ์ฟผ๋ฆฌ์™€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ ์ ์šฉ:** - ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)์—์„œ๋Š” ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๊ฑธ์นœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ์–ด๋ ต๋‹ค. ์ด๋•Œ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•์„ ํ™œ์šฉํ•ด ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ ์ „์šฉ ๋ณต์ œ๋ณธ(Replica)์œผ๋กœ ๋ชจ์•„๋‘๋Š” CQRS ํŒจํ„ด์ด ๊ฐ•๋ ฅํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋œ๋‹ค [4, 5]. -- **์ฃผ์š” ํ™œ์šฉ ์‚ฌ๋ก€:** - e-์ปค๋จธ์Šค(์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ vs ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ), ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ๋ฆฌํฌํŒ… ๋„๊ตฌ, X(๊ตฌ ํŠธ์œ„ํ„ฐ)์™€ ๊ฐ™์€ ์†Œ์…œ ๋ฏธ๋””์–ด ์Šค์ผ€์ผ๋ง, ๊ทธ๋ฆฌ๊ณ  ์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ์ด ๋™์‹œ์— ํ•„์š”ํ•œ ๊ธˆ์œต ์‹œ์Šคํ…œ ๋“ฑ์—์„œ ๋„๋ฆฌ ํ™œ์šฉ๋œ๋‹ค [2, 6, 7]. - -## โš–๏ธ Trade-offs & Caveats -์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๋ง‰๊ฐ•ํ•œ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋šœ๋ ทํ•œ ํ•œ๊ณ„์™€ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€(Trade-off)๋ฅผ ๊ฐ€์ง„๋‹ค. -- **๋†’์€ ์‹œ์Šคํ…œ ๋ฐ ์ฝ”๋“œ ๋ณต์žก์„ฑ:** - ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•จ์— ๋”ฐ๋ผ **์ด์ค‘ ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ์ด์ค‘ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋””๋ฒ„๊น…์— ๋“ค์–ด๊ฐ€๋Š” ๋…ธ๋ ฅ๊ณผ ๋น„์šฉ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€**ํ•œ๋‹ค [6]. -- **์ตœ์ข…์  ์ผ๊ด€์„ฑ(Eventual Consistency) ๊ฐ์ˆ˜:** - ์“ฐ๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฝ๊ธฐ ๋ชจ๋ธ์— ๋™๊ธฐํ™”๋˜๊ธฐ๊นŒ์ง€ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„ ์ง€์—ฐ(Lag)์ด ๋ฐœ์ƒํ•œ๋‹ค [6]. ๋”ฐ๋ผ์„œ ์€ํ–‰ ์ž”๊ณ  ํ™•์ธ๊ณผ ๊ฐ™์ด **์‹œ์Šคํ…œ์ด ์ฆ‰๊ฐ์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ(Strong Consistency)์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค** [3]. -- **์ธํ”„๋ผ ๋„์ž…์˜ ๊ฐ•์ œ์„ฑ:** - ์ฝ๊ธฐ ๋ชจ๋ธ๊ณผ ์“ฐ๊ธฐ ๋ชจ๋ธ ๊ฐ„์˜ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋ ค๋ฉด Apache Kafka์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์ธํ”„๋ผ์˜ ๋„์ž…์ด ํ•„์ˆ˜์ ์ด๋‹ค [6]. -- **์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ์œ„ํ—˜:** - ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์˜ ๋นˆ๋„๊ฐ€ ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋กœ์ง์ด ๋‹จ์ˆœํ•œ CRUD(์ƒ์„ฑยท์กฐํšŒยท์ˆ˜์ •ยท์‚ญ์ œ) ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: ๊ธฐ๋ณธ์ ์ธ CMS ์†”๋ฃจ์…˜)์— CQRS๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•œ ๊ณผ์ž‰ ์—”์ง€๋‹ˆ์–ด๋ง์ด ๋˜๋ฏ€๋กœ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค [3]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Event Sourcing Pattern]] - - ์—ฐ๊ฒฐ ์ด์œ : CQRS๋Š” ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํŒจํ„ด๊ณผ ๊ฒฐํ•ฉ๋  ๋•Œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์‹œ๋„ˆ์ง€๋ฅผ ๋ฐœํœ˜ํ•œ๋‹ค [2, 8]. ์ด๋ฒคํŠธ ์†Œ์‹ฑ์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ๋ถˆ๋ณ€์˜ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ €์žฅํ•˜๊ณ , CQRS๋Š” ์ด๋ฅผ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ตœ์ ํ™”ํ•œ๋‹ค [9, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ๋ณ€๊ฒฝ ๊ณผ์ •์„ ๊ฐ์‚ฌ(Audit) ๋ชฉ์ ์œผ๋กœ ์™„๋ฒฝํžˆ ์ถ”์ ํ•˜๊ณ , ์ €์žฅ๋œ ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•ด CQRS์˜ ๋‹ค์–‘ํ•œ ์ฝ๊ธฐ ๋ชจ๋ธ(Projection)์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [8, 9]. -- [[Microservices Architecture]] - - ์—ฐ๊ฒฐ ์ด์œ : CQRS๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ ธ ์žˆ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•˜์—ฌ ์กฐํšŒํ•˜๋Š” ํ•ต์‹ฌ ํŒจํ„ด์ด๋‹ค [4, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๋ณตํ•ฉ์ ์ธ ์กฐํšŒ API๋ฅผ ์„œ๋น„์Šค ๊ฐ„ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ ์—†์ด ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [4]. -- [[Event-Driven Architecture]] - - ์—ฐ๊ฒฐ ์ด์œ : CQRS์˜ ๋‘ ๋ชจ๋ธ(๋ช…๋ น๊ณผ ์กฐํšŒ)์„ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ์ „๋‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์ˆ˜์ ์ด๋‹ค [2, 6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰๊ณผ ๊ตฌ๋…์„ ํ†ตํ•œ ์„œ๋น„์Šค ๊ฐ„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)๊ณผ ์ด๋ฒคํŠธ ์ค‘์‹ฌ์˜ ์‹œ์Šคํ…œ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [6, 11]. - -#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[Message Brokers (e.g., Kafka)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์“ฐ๊ธฐ ๋กœ์ง์˜ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์ฝ๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด CQRS ํŒจํ„ด์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด์ด๋‹ค [6]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋Œ€์šฉ๋Ÿ‰ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด(Queue)๊ณผ ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์ตœ์ข…์  ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ œ์–ดํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [6]. - -### Deeper Research Questions - -- CQRS ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ํ•œ๊ณ„์ธ '์ตœ์ข…์  ์ผ๊ด€์„ฑ(Eventual Consistency)' ๋ฌธ์ œ๋กœ ์ธํ•œ ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ ๋ชจ๋ธ ๊ฐ„์˜ ๋™๊ธฐํ™” ์ง€์—ฐ ์‹œ๊ฐ„(Lag)์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ์ธํ”„๋ผ ํŠœ๋‹ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing)๊ณผ CQRS๋ฅผ ๊ฒฐํ•ฉํ–ˆ์„ ๋•Œ, ์ฝ๊ธฐ ๋ทฐ(Projection)๋ฅผ ์žฌ๊ตฌ์ถ•(Rebuild)ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์ด๋ฒคํŠธ ๋กœ๊ทธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์Šค๋ƒ…์ƒท(Snapshot) ๊ธฐ๋ฒ•์˜ ์›๋ฆฌ์™€ ํ•œ๊ณ„๋Š” ๋ฌด์—‡์ธ๊ฐ€? -- ์ฆ‰๊ฐ์ ์ธ ํŠธ๋žœ์žญ์…˜ ์ผ๊ด€์„ฑ(Strong Consistency)์ด ์š”๊ตฌ๋˜๋Š” ์€ํ–‰ ์‹œ์Šคํ…œ ๋“ฑ์—์„œ CQRS ํŒจํ„ด์„ ์ผ๋ถ€ ์ ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ, ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋™์‹œ์— ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋ชจ๋†€๋ฆฌ์‹(Monolithic) ์‹œ์Šคํ…œ์˜ ๋‹จ์ˆœํ•œ CRUD ๊ตฌ์กฐ์—์„œ ์‹œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ CQRS ๊ธฐ๋ฐ˜์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ๋„˜์–ด๊ฐ€์•ผ ํ•˜๋Š” '์ฝ๊ธฐ/์“ฐ๊ธฐ ๋น„๋Œ€์นญ์„ฑ์˜ ์ž„๊ณ„์ (Threshold)'์„ ์–ด๋–ป๊ฒŒ ๊ฐ๊ด€์ ์œผ๋กœ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋ถ„์‚ฐ ์ฟผ๋ฆฌ(Distributed Query)๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด CQRS ๋ ˆํ”Œ๋ฆฌ์นด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•  ๋•Œ, ์›๋ณธ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ๊ณผ ๋ณต์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ์Šคํ‚ค๋งˆ ๋ฒ„์ „ ์ถฉ๋Œ ๋ฐ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ์ฝ๊ธฐ ๋ชจ๋ธ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(์˜ˆ: NoSQL)์™€ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(์˜ˆ: ๊ด€๊ณ„ํ˜• DB)๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋”ฉํ•˜๊ณ , Message Broker๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋‘ ์ €์žฅ์†Œ ๊ฐ„์˜ ์ƒํƒœ ๋™๊ธฐํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•œ๋‹ค [3, 6]. -- **System Design:** ์‚ฌ์šฉ์ž์˜ ์ฝ๊ธฐ ์š”์ฒญ ๋นˆ๋„๊ฐ€ ์“ฐ๊ธฐ ์š”์ฒญ์— ๋น„ํ•ด 10๋ฐฐ ์ด์ƒ ์••๋„์ ์œผ๋กœ ๋†’์€ ์‹œ์Šคํ…œ(์˜ˆ: ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ, ๋ณต์žกํ•œ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๋“ฑ)์„ ์„ค๊ณ„ํ•  ๋•Œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์ œ๊ฑฐํ•  ๋ชฉ์ ์œผ๋กœ ์ฑ„ํƒํ•œ๋‹ค [2]. ๋‹จ์ˆœํ•œ ๊ฒŒ์‹œํŒ ๊ฐ™์€ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์‹œ์—๋Š” ๋ฐฐ์ œํ•ด์•ผ ํ•œ๋‹ค [3]. -- **Operation / Maintenance:** ๋‘ ๊ฐ€์ง€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋ฐ ๋™๊ธฐํ™” ์ธํ”„๋ผ๋ฅผ ์šด์˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฝ๊ธฐ ๋ชจ๋ธ๊ณผ ์“ฐ๊ธฐ ๋ชจ๋ธ ์‚ฌ์ด์˜ ๋™๊ธฐํ™” ์ง€์—ฐ์ด๋‚˜ ๋ฉ”์‹œ์ง€ ์œ ์‹ค์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๊ตํ•œ ๋ถ„์‚ฐ ์ถ”์ (Distributed Tracing) ๋ฐ ๋กœ๊น… ์ฒด๊ณ„๋ฅผ ์œ ์ง€๋ณด์ˆ˜ ํ”„๋กœ์„ธ์Šค์— ํ•„์ˆ˜์ ์œผ๋กœ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค [6, 11]. -- **Learning Path:** ๋‹จ์ˆœํ•œ CRUD ๊ธฐ๋ฐ˜์˜ ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(N-Tier Layered Architecture) ์„ค๊ณ„๋ฅผ ๋จผ์ € ๋งˆ์Šคํ„ฐํ•œ ํ›„, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์‹œ์Šคํ…œ์ด ๋ถ„ํ• ๋˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ(Distributed Query)์˜ ํ•œ๊ณ„๋ฅผ ์ฒด๊ฐํ•  ๋•Œ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ธ ์ง€์‹ ํ™•์žฅ ๊ฒฝ๋กœ์ด๋‹ค [3, 4]. -- **My Project Relevance:** ๊ธฐํš ์ค‘์ธ ์„œ๋น„์Šค๊ฐ€ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ๋ณต์žกํ•œ ๋ทฐ(View) ๋ Œ๋”๋ง์— ๋ณ‘๋ชฉ์ด ์˜ˆ์ธก๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ๋ณธ ํŒจํ„ด์„ ์ ๊ทน์ ์œผ๋กœ ๊ฒ€ํ† ํ•˜๋˜, ์šด์˜ ์ธ๋ ฅ๊ณผ ์ธํ”„๋ผ ์˜ˆ์‚ฐ(๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์œ ์ง€ ๋“ฑ)์ด ๋’ท๋ฐ›์นจ๋˜๋Š”์ง€๋ฅผ ์ตœ์šฐ์„ ์œผ๋กœ ์ ๊ฒ€ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค [3, 6]. - -### Adjacent Topics - -- [[Saga Pattern]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ CQRS๊ฐ€ ๋ฐ์ดํ„ฐ ์กฐํšŒ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋ฉด, Saga ํŒจํ„ด์€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๊ฑธ์นœ ๋ถ„์‚ฐ ์“ฐ๊ธฐ(Command) ํŠธ๋žœ์žญ์…˜์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅ(๋ณด์ƒ ํŠธ๋žœ์žญ์…˜ ๋“ฑ)ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ, ๋‘ ํŒจํ„ด์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์™„๋ฒฝํ•œ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [4, 12]. - ---- -*Last updated: 2026-05-02* \ No newline at end of file diff --git a/10_Wiki/Topics/02_Architecture_Principles/Component_Design_Patterns.md b/10_Wiki/Topics/02_Architecture_Principles/Component_Design_Patterns.md deleted file mode 100644 index cf1244a7..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/Component_Design_Patterns.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ํŒจํ„ด (Atomic & Composition) -category: Software [[Architecture|Architecture]] -tags: [Design Pattern, [[Atomic Design|Atomic Design]], Composition, Architecture] -created: 2026-04-20 ---- - -# [[Component_Design_Patterns|Component_Design_Patterns]] (์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ํŒจํ„ด) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ์ปดํฌ๋„ŒํŠธ๋Š” ์ž‘์„์ˆ˜๋ก ๊ฐ•ํ•˜๊ณ , ๋‹จ์ˆœํ• ์ˆ˜๋ก ์žฌ์‚ฌ์šฉ์„ฑ์ด ๊ทน๋Œ€ํ™”๋œ๋‹ค. ๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘๊ณ  ์ˆœ์ˆ˜ํ•œ(Pure) ์ปดํฌ๋„ŒํŠธ๋กœ ํ•ด์ฒดํ•˜๋ผ. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Container-Presenter ํŒจํ„ด**: - - **Container**: ๋ฐ์ดํ„ฐ([[State|State]], API)๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” '๋จธ๋ฆฌ'. - - **Presenter**: ์˜ค์ง Props๋งŒ ๋ฐ›์•„ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” '๋ชธํ†ต'. ์Šคํƒ€์ผ๊ณผ UI ๊ตฌ์กฐ์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ธ๋‹ค. -- **[[Compound Components|Compound Components]] (๋ณตํ•ฉ ์ปดํฌ๋„ŒํŠธ)**: - - `` ์ฒ˜๋Ÿผ ๋ถ€๋ชจ์™€ ์ž์‹์ด ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๊ธด๋ฐ€ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒจํ„ด. ์‚ฌ์šฉ์ž๊ฐ€ UI ๊ตฌ์กฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. -- **Atomic Design (์›์ž ์ค‘์‹ฌ ์„ค๊ณ„)**: - - Atom(๋ฒ„ํŠผ, ์ž…๋ ฅ์ฐฝ) $\rightarrow$ Molecule(๊ฒ€์ƒ‰๋ฐ”) $\rightarrow$ Organism(ํ—ค๋”) $\rightarrow$ Template $\rightarrow$ Page. - - ๊ฐ€์žฅ ํ•˜์œ„์˜ Atom์ด ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์—์„œ ๋™์ผํ•œ ๋””์ž์ธ ์–ธ์–ด์ธ '๋””์ž์ธ ํ† ํฐ'์„ ๋ฐ˜์˜ํ•˜๊ฒŒ ํ•œ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ๋„ˆ๋ฌด ๊ณผ๋„ํ•œ ์ปดํฌ๋„ŒํŠธ ๋ถ„ํ• ์€ ํ”„๋กœํ† ํƒ€์ดํ•‘ ์†๋„๋ฅผ ๋Šฆ์ถ˜๋‹ค. ์ฒ˜์Œ์—๋Š” ํฌ๊ฒŒ ์งœ๊ณ , ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์งˆ ๋•Œ '์‚ฌํ›„์  ๋ฆฌํŒฉํ† ๋ง'์„ ํ†ตํ•ด ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์‹ค๋ฌด์ ์œผ๋กœ ํ˜„๋ช…ํ•˜๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: Project_Architecture_Guidelines , [[Styling_Governance|Styling_Governance]] -- Design: [[Accessibility_Inclusivity|Accessibility_Inclusivity]] diff --git a/10_Wiki/Topics/02_Architecture_Principles/Domain-Driven Design (DDD).md b/10_Wiki/Topics/02_Architecture_Principles/Domain-Driven Design (DDD).md deleted file mode 100644 index 8c57b818..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/Domain-Driven Design (DDD).md +++ /dev/null @@ -1,67 +0,0 @@ ---- -id: P-REINFORCE-WIKI-E5D26B38 -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -confidence_score: 0.95 -tags: ['domain-driven-design-(ddd)', 'microservices-architecture', 'hexagonal-architecture', 'modular-monolith', 'event-sourcing-pattern', 'architecture-principles'] -last_reinforced: 2026-05-02 ---- - -# [[Domain-Driven Design (DDD)]] - -## ๐Ÿ“Œ Brief Summary -**๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)**๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰๊ณผ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์„ฑ๊ณผ ์ฑ…์ž„์„ ์‹๋ณ„ํ•˜๋„๋ก ๋•๋Š” ์„ค๊ณ„ ์›์น™ ๋ฐ ๊ด€ํ–‰์ด๋‹ค [1, 2]. ์ฃผ๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA), ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜, ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค ๋“ฑ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ๋ชจ๋“ˆ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ํ™œ์šฉ๋œ๋‹ค [3, 4]. ์ „์ฒด์ ์ธ ์›๋ฆฌ์— ๋Œ€ํ•ด ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•˜์ง€๋งŒ, ์ฃผ๋กœ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ์ž‘์šฉํ•œ๋‹ค [1]. - -## ๐Ÿ“– Core Content -๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•๋ก ์ด๋‚˜ ์ „์ฒด ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…์€ **์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.** ์ œ๊ณต๋œ ์†Œ์Šค์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•œ DDD์˜ ํ•ต์‹ฌ ์—ญํ• ๊ณผ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: - -* **๋„๋ฉ”์ธ ๊ฒฝ๊ณ„ ์‹๋ณ„๊ณผ ๋‹จ์ผ ์ฑ…์ž„:** DDD๋Š” ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ–๋„๋ก **๋„๋ฉ”์ธ ๊ฒฝ๊ณ„(Domain boundaries)๋ฅผ ์‹๋ณ„**ํ•˜๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [1]. -* **๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ ์ •์˜:** DDD๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์‹คํ–‰ํ•˜๋Š” **๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ(DDD ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ, aggregates)**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค [5]. -* **์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด๊ณผ์˜ ๋†’์€ ํ˜ธํ™˜์„ฑ:** - * **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA):** ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰์„ ์ค‘์‹ฌ์œผ๋กœ ์กฐ์ง๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋Š” DDD ์›์น™๊ณผ ๋งฅ์„ ๊ฐ™์ด ํ•ฉ๋‹ˆ๋‹ค [2]. - * **ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜(Hexagonal Architecture):** ๋ช…ํ™•ํ•œ ์‹œ์Šคํ…œ ๊ฒฝ๊ณ„๋ฅผ ์ด‰์ง„ํ•˜๋ฉฐ DDD ์›์น™๊ณผ ๋งค์šฐ ์ž˜ ๋ถ€ํ•ฉํ•ฉ๋‹ˆ๋‹ค [3]. - * **๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith):** ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ถ„์‚ฐ๋œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๋”๋ผ๋„, ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ DDD ์›์น™์„ ๊น”๋”ํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. - -## โš–๏ธ Trade-offs & Caveats -* **๋†’์€ ์ „๋ฌธ์„ฑ ์š”๊ตฌ:** DDD๋Š” ์‹œ์Šคํ…œ ์„ค๊ณ„์— ์žˆ์–ด ๋†’์€ ์ˆ˜์ค€์˜ ์ „๋ฌธ์„ฑ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. **DDD ์ „๋ฌธ์„ฑ์ด ๋ถ€์กฑํ•œ ํŒ€์˜ ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing)๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์˜ ๋„์ž…์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค** [6]. -* **๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ (Learning Curve):** DDD๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture) ๋“ฑ์„ ๊ตฌํ˜„ํ•  ๋•Œ **์†Œ๊ทœ๋ชจ ํŒ€์ด๋‚˜ ์ดˆ๋ณด ํŒ€์ด ๋‹ค๋ฃจ๊ธฐ์—๋Š” ํ•™์Šต ๊ณก์„ ์ด ๊ฐ€ํŒ”๋ผ ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ๋Š” ์ œ์•ฝ**์ด ์žˆ์Šต๋‹ˆ๋‹ค [7]. -* *(๊ทธ ์™ธ ๊ตฌ์ฒด์ ์ธ ์ตœ์ ํ™” ๋ถ€์ž‘์šฉ์ด๋‚˜ ์ถ”๊ฐ€์ ์ธ ๊ธฐ์ˆ ์  ์ œ์•ฝ ์‚ฌํ•ญ์€ ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.)* - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -* [[Microservices Architecture]] - * ์—ฐ๊ฒฐ ์ด์œ : ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋น„์Šค๋ฅผ ๋ถ„ํ• ํ•  ๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰์„ ์ค‘์‹ฌ์œผ๋กœ ์กฐ์งํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ๋‹จ์ผ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด DDD์˜ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„ ์‹๋ณ„ ๊ฐœ๋…์ด ํ•„์ˆ˜๋กœ ์‚ฌ์šฉ๋จ [1, 2]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ด๋ก ์ ์ธ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๊ฐ€ ์‹ค์ œ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๋ถ„์‚ฐ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ์–ด๋–ป๊ฒŒ ๋งคํ•‘๋˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ. -* [[Hexagonal Architecture]] - * ์—ฐ๊ฒฐ ์ด์œ : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์™ธ๋ถ€ ๊ธฐ์ˆ ๊ณผ ๊ฒฉ๋ฆฌํ•˜๊ณ  ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ๋งŒ๋“œ๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ์ฒ ํ•™์ด ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„๋ฅผ ์ง€ํ–ฅํ•˜๋Š” DDD ์›์น™๊ณผ ๊ตฌ์กฐ์ ์œผ๋กœ ์ž˜ ๋ถ€ํ•ฉํ•จ [3]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: DDD๋กœ ์„ค๊ณ„๋œ ๋น„์ฆˆ๋‹ˆ์Šค ํ•ต์‹ฌ ๋กœ์ง์„ ์™ธ๋ถ€ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ๋กœ๋ถ€ํ„ฐ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. -* [[Modular Monolith]] - * ์—ฐ๊ฒฐ ์ด์œ : ์„œ๋น„์Šค๋ฅผ ๋„คํŠธ์›Œํฌ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜์ง€ ์•Š๊ณ ๋„, ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค ๋‚ด์—์„œ DDD ์›์น™์„ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฒฝ๊ณ„๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ [4]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ ์—†์ด ๋‹จ์ผ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„์˜ ์ด์ ์„ ๋ˆ„๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Œ. - -### Deeper Research Questions -* DDD์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ธ 'DDD ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ(Aggregates)'๋Š” ์‹œ์Šคํ…œ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์–ด๋–ป๊ฒŒ ์บก์Аํ™”ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€? -* ์ด๋ฒคํŠธ ์†Œ์‹ฑ(Event Sourcing) ํŒจํ„ด์„ ๊ตฌํ˜„ํ•  ๋•Œ, DDD ์ „๋ฌธ์„ฑ์ด ํŒ€ ๋‚ด์— ๋ฐ˜๋“œ์‹œ ์š”๊ตฌ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜์  ๋ฐ ๋…ผ๋ฆฌ์  ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€? -* ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋น„์Šค๊ฐ€ ๋„ˆ๋ฌด ์„ธ๋ฐ€ํ•ด์ง€๊ฑฐ๋‚˜ ๋ฐฉ๋Œ€ํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด DDD์˜ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„ ์‹๋ณ„ ์›์น™์„ ์–ด๋–ป๊ฒŒ ์ •๋Ÿ‰์ /์ •์„ฑ์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -* ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค ๊ตฌ์กฐ์—์„œ ๋„คํŠธ์›Œํฌ ๋ถ„๋ฆฌ ์—†์ด DDD ์›์น™์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ•์ œํ•  ๋•Œ, ๊ธฐ์ˆ ์  ์˜์กด์„ฑ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -* ๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ ์„ ๊ฐ€์ง„ DDD๋ฅผ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋‚˜ MSA ํ™˜๊ฒฝ์˜ ์‹ ์ƒ ๊ฐœ๋ฐœ ํŒ€์— ๋„์ž…ํ•  ๋•Œ, ๋น„์šฉ ๋Œ€๋น„ ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ง„์  ๋„์ž… ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -* **Implementation:** ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ํ•ต์‹ฌ ๋กœ์ง์„ ์บก์Аํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ 'DDD ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ(aggregates)'์™€ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์ ์šฉ๋จ [5]. -* **System Design:** ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ MSA๋‚˜ ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค๋กœ ์„ค๊ณ„ํ•  ๋•Œ, ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ๊ณผ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰ ์ค‘์‹ฌ์œผ๋กœ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋จ [1, 2, 4]. -* **Operation / Maintenance:** (์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์— DDD๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๋ฏธ์น˜๋Š” ์„ธ๋ถ€ ์ง€์นจ์€ ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.) -* **Learning Path:** ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋‚˜ ์ด๋ฒคํŠธ ์†Œ์‹ฑ ํŒจํ„ด์„ ์‹ค๋ฌด์— ๋„์ž…ํ•˜๊ธฐ ์ „, ํŒ€์›๋“ค์ด ํ•„์ˆ˜์ ์œผ๋กœ ๊ฑฐ์ณ์•ผ ํ•  ํ•™์Šต ๊ณผ์ •์œผ๋กœ DDD์˜ ๊ฐœ๋… ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋ง ์ˆ™์ง€๊ฐ€ ํ•„์š”ํ•จ [6, 7]. -* **My Project Relevance:** ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ€์ง„ ํ”„๋กœ์ ํŠธ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ, ๊ฐœ๋ฐœ ํŒ€์˜ ์ˆ™๋ จ๋„(DDD ์ดํ•ด๋„)๋ฅผ ๋จผ์ € ํ‰๊ฐ€ํ•˜์—ฌ ๋ชจ๋†€๋ฆฌ์‹์œผ๋กœ ์‹œ์ž‘ํ• ์ง€ ๋ถ„์‚ฐ ์•„ํ‚คํ…์ฒ˜๋กœ ์ง„ํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ์‚ผ์„ ์ˆ˜ ์žˆ์Œ. - -### Adjacent Topics - -* [[Event Sourcing Pattern]] - * ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฐ์ดํ„ฐ๋ฅผ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์ด๋ฒคํŠธ์˜ ์—ฐ์†๋œ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, DDD ์ „๋ฌธ์„ฑ์ด ์š”๊ตฌ๋˜๋Š” ๋งŒํผ ๋‘ ํŒจํ„ด ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ฐ ์ถ”์  ๋งค์ปค๋‹ˆ์ฆ˜ ์‹œ๋„ˆ์ง€ ์กฐ์‚ฌ. -* [[Clean Architecture]] - * ํ™•์žฅ ๋ฐฉํ–ฅ: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ค‘์•™์— ๋‘๊ณ  ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ค๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ, ์ดˆ๋ณด ํŒ€์ด DDD์™€ ๊ฒฐํ•ฉ ์‹œ ๊ฒช๋Š” ํ•™์Šต ํ•œ๊ณ„์™€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‹ค๋ฌด์  ์ฝ”๋“œ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ• ํƒ๊ตฌ. - ---- -*Last updated: 2026-05-02* \ No newline at end of file diff --git a/10_Wiki/Topics/02_Architecture_Principles/Index.md b/10_Wiki/Topics/02_Architecture_Principles/Index.md deleted file mode 100644 index cfe82790..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/Index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Index: Topics > 02_Architecture_Principles - -## ๐Ÿ“ Documents -- [[API_Communication_Patterns|API_Communication_Patterns]] -- [[Component_Design_Patterns|Component_Design_Patterns]] -- [[Separation_of_Concerns|Separation_of_Concerns]] -- [[Single_Source_of_Truth|Single_Source_of_Truth]] -- [[Systemic_Simulation_Principles|Systemic_Simulation_Principles]] diff --git a/10_Wiki/Topics/02_Architecture_Principles/MVC (Model-View-Controller).md b/10_Wiki/Topics/02_Architecture_Principles/MVC (Model-View-Controller).md deleted file mode 100644 index 33bbd1f7..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/MVC (Model-View-Controller).md +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: P-REINFORCE-AUTO-WIKI-ARCH-005 -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -confidence_score: 0.95 -tags: [architecture, design-pattern, mvc, decoupling, ui-architecture, p-reinforce] -last_reinforced: 2026-05-01 ---- - -# [[MVC (Model-View-Controller)|MVC (Model-View-Controller]] - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> "๋ฐ์ดํ„ฐ(Model), ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(View), ๋กœ์ง ์ œ์–ด(Controller)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ฒฉ๋ฆฌํ•จ์œผ๋กœ์จ, UI์˜ ๋ณ€ํ™”๊ฐ€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ณ ์ „์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(SoC) ํŒจํ„ด." - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -MVC๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์  ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. - -1. **๊ตฌ์„ฑ ์š”์†Œ์˜ ์—ญํ• **: - * **Model**: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. - * **View**: ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ๋กœ์ง์€ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - * **Controller**: ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ๋ทฐ๋ฅผ ์„ ํƒํ•˜๋Š” ์ œ์–ด ํ๋ฆ„์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด์˜ ์ค‘์žฌ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. -2. **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ (Separation of Concerns)**: - * ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. - * ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ, ๋ทฐ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๋ชจ๋ธ์ด UI ์š”์†Œ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜๋Š”์ง€ ๋“ฑ์„ ๊ฒ€ํ† ํ•˜์—ฌ ํŒจํ„ด์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. -3. **์‹œ์Šคํ…œ ํ™•์žฅ์„ฑ**: - * ์ผ๊ด€๋œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•จ์œผ๋กœ์จ ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ๋‚ฎ์ถ”๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ณต์žก์„ฑ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) -- **๋น„๋Œ€ํ•œ ์ปจํŠธ๋กค๋Ÿฌ (Fat Controller)**: ๋กœ์ง์ด ์ปจํŠธ๋กค๋Ÿฌ์— ์ง‘์ค‘๋˜์–ด ์ฝ”๋“œ๊ฐ€ ๋น„๋Œ€ํ•ด์ง€๋Š” ํ˜„์ƒ์ด ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ๋ ˆ์ด์–ด(Service Layer)๋ฅผ ์ถ”๊ฐ€๋กœ ๋„์ž…ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ชจ๋ธ์ด๋‚˜ ์„œ๋น„์Šค๋กœ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ์ „๋žต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. -- **ํ˜„๋Œ€์  ๋ณ€ํ˜•**: ์›น ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฐœ์ „์— ๋”ฐ๋ผ MVP, MVVM ๋“ฑ ๋‹ค์–‘ํ•œ ๋ณ€ํ˜• ํŒจํ„ด์ด ๋“ฑ์žฅํ•˜์˜€์œผ๋‚˜, ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ผ๋Š” ํ•ต์‹ฌ ์ฒ ํ•™์€ MVC์—์„œ ๊ณ„์Šน๋˜์—ˆ์Šต๋‹ˆ๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Design Patterns: ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์˜ ๋ฒ”์ฃผ. -- [[Clean Architecture|Clean Architecture]]: MVC๋ฅผ ๋ณด๋‹ค ๊ณ ๋„ํ™”ํ•œ ๊ณ„์ธตํ™” ๊ตฌ์กฐ. -- [[SOLID Principles|SOLID Principles]]: ๊ฐ ๊ณ„์ธต์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ์ •์˜ํ•˜๋Š” ์›์น™. -- [[แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns SoC)|Separation of Concerns (SoC]]: ํŒจํ„ด์˜ ๊ทผ๋ณธ์ ์ธ ์„ค๊ณ„ ์ฒ ํ•™. -- Code Health: ์ผ๊ด€๋œ ํŒจํ„ด ์ค€์ˆ˜๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ์‹œ์Šคํ…œ์˜ ๊ฑด๊ฐ•์„ฑ. ---- diff --git a/10_Wiki/Topics/02_Architecture_Principles/Separation_of_Concerns.md b/10_Wiki/Topics/02_Architecture_Principles/Separation_of_Concerns.md deleted file mode 100644 index 671f641e..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/Separation_of_Concerns.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์™€ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ([[_แ„‚แ…ฌแ„‹แ…ช แ„‘แ…กแ†ฏแ„ƒแ…กแ„…แ…ตแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต_ - แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns)|Separation of Concerns]]) -category: Software [[Architecture|Architecture]] -tags: [Architecture, SoC, Modular Design, Design Pattern] -created: 2026-04-20 ---- - -# ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์™€ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ (SoC) - -## ๐ŸŽฏ ๊ฐœ์š” (Overview) -๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ์—ญํ• ๋ณ„๋กœ ๊ตฌ๋ถ„๋œ ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ๋‚˜๋ˆ„์–ด, ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์„ค๊ณ„ ์ฒ ํ•™์ž…๋‹ˆ๋‹ค. - -## ๐Ÿš€ ๊ณ„์ธต๊ตฌ์กฐ ์˜ˆ์‹œ (Layering Example) -1. **[[Logic|Logic]] Engine**: ์ˆœ์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ ๊ทœ์น™ ์ˆ˜ํ–‰ (์˜ˆ: `gameWorker.js`) -2. **[[State|State]] Manager**: ๋ฐ์ดํ„ฐ์˜ ์ค‘์•™ ์ง‘์ค‘ ์ฒ˜๋ฆฌ (์˜ˆ: `TetrisGame.jsx`) -3. **View Layer**: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํ‘œํ˜„ ๋ฐ ๋ Œ๋”๋ง (์˜ˆ: React Components) - -## ๐Ÿ’ก ๋ ˆ์Šจ ๋Ÿฐ (Lesson Learned) -> [!IMPORTANT] -> **"์ฝ”๋“œ์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•  ๋•Œ ์‹œ์Šคํ…œ์€ ๋น„๋กœ์†Œ ๊ฑด๊ฐ•ํ•ด์ง„๋‹ค."** -> ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๋ณด๋‹ค ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์„ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - -## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ -- [[WebWorker_Performance|WebWorker_Performance]] -- [[Single_Source_of_Truth|Single_Source_of_Truth]] diff --git a/10_Wiki/Topics/02_Architecture_Principles/Single_Source_of_Truth.md b/10_Wiki/Topics/02_Architecture_Principles/Single_Source_of_Truth.md deleted file mode 100644 index f89b9727..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/Single_Source_of_Truth.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์› ([[Single_Source_of_Truth|Single Source of Truth]]) -category: Software [[Architecture|Architecture]] -tags: [[State|[State]] [[Management|Management]], Data Consistency, Redux, Architecture] -created: 2026-04-20 ---- - -# ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์› (Single Source of Truth) - -## ๐ŸŽฏ ๊ฐœ์š” (Overview) -์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ, ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜(Inconsistency) ํ˜„์ƒ์„ ์›์ฒœ ์ฐจ๋‹จํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ™•๋ณดํ•˜๋Š” ์„ค๊ณ„ ์›์น™์ž…๋‹ˆ๋‹ค. - -## ๐Ÿš€ ์ฃผ์š” ์›์น™ (Key [[Principles|Principles]]) -- **๋‹จ์ผ ์ง€์  ์ •์˜ (Defined at Single Point)**: ์ƒํƒœ๋Š” ์˜ค์ง ํ•œ ๊ณณ์—์„œ๋งŒ ์ •์˜๋˜๊ณ  ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. -- **์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ (Predictability)**: ์ƒํƒœ ๋ณ€๊ฒฝ์€ ์ •ํ•ด์ง„ ๊ทœ์น™(Action/Setter)์„ ํ†ตํ•ด์„œ๋งŒ ๋ฐœ์ƒํ•˜์—ฌ ๋””๋ฒ„๊น…์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. - -## ๐Ÿ’ก ๋ ˆ์Šจ ๋Ÿฐ (Lesson Learned) -> [!TIP] -> **"์ƒํƒœ๋Š” ์˜ค์ง ํ•œ ๊ณณ์—์„œ๋งŒ ์ •์˜ํ•˜๊ณ , ๋ชจ๋“  ๋กœ์ง์€ ๊ทธ ์ƒํƒœ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค."** -> ์ฝ”๋“œ์˜ ํŒŒํŽธํ™”๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์˜ ์ฑ…์ž„ ๋ฒ”์œ„(Responsibility)๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ์ด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ ์„ฑ๊ณต์˜ ์—ด์‡ ์ž…๋‹ˆ๋‹ค. - -## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ -- [[Separation_of_Concerns|Separation_of_Concerns]] -- [[Domain-Driven-Design-DDD|Domain-Driven Design (DDD]] diff --git a/10_Wiki/Topics/02_Architecture_Principles/๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered Architecture).md b/10_Wiki/Topics/02_Architecture_Principles/๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered Architecture).md deleted file mode 100644 index 00bdd561..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered Architecture).md +++ /dev/null @@ -1,84 +0,0 @@ ---- -id: P-REINFORCE-WIKI-7074CA41 -title: "แ„€แ…จแ„Žแ…ณแ†ผแ„’แ…งแ†ผ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ (Layered Architecture)" -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -status: verified -canonical_id: "" -aliases: [] -duplicate_of: "" -source_trust_level: A -confidence_score: 0.95 -tags: ['Layered Architecture'] -raw_sources: ["Datacollector_MAC/out_wiki/แ„€แ…จแ„Žแ…ณแ†ผแ„’แ…งแ†ผ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ (Layered Architecture).md"] -last_reinforced: 2026-05-02 -github_commit: "" ---- - -# [[แ„€แ…จแ„Žแ…ณแ†ผแ„’แ…งแ†ผ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ (Layered Architecture)]] - -## ๐Ÿ“Œ Brief Summary -๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)๋Š” n-tier ์•„ํ‚คํ…์ฒ˜๋กœ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ํŠน์ •ํ•œ ์ฑ…์ž„์„ ์ง€๋‹Œ ์ˆ˜ํ‰์ ์ธ ๊ณ„์ธต(Layer)๋“ค๋กœ ๊ตฌ์„ฑํ•˜๋Š” ์ „ํ†ต์ ์ด๊ณ  ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ์‹œ์Šคํ…œ ํŒจํ„ด์ด๋‹ค [1]. ๊ฐ ๊ณ„์ธต์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์˜์†์„ฑ ๋“ฑ ๋ช…ํ™•ํ•œ ์—ญํ• ์„ ๊ฐ€์ง€๋ฉฐ, ์ธ์ ‘ํ•œ ๋ฐ”๋กœ ์•„๋ž˜์˜ ๊ณ„์ธต์—๋งŒ ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์—„๊ฒฉํ•œ ํ†ต์‹  ๊ทœ์น™์„ ๊ฐ€์ง„๋‹ค [1, 2]. ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(Separation of Concerns)๋ฅผ ๊ฐ•์ œํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ๊ฐœ๋ณ„ ๊ณ„์ธต์˜ ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์ฃผ๋œ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค [1, 3]. - -## ๐Ÿ“– Core ์†Œ์Šค Content -- **์ฃผ์š” ๊ณ„์ธต ๊ตฌ์„ฑ**: ์ „ํ†ต์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต(Presentation Layer), ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต(Business Logic Layer/Domain Layer), ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต(Data Access Layer/Persistence Layer) ๋“ฑ์œผ๋กœ ๋‚˜๋‰œ๋‹ค [4]. - - **ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต**: ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•˜๋ฉฐ UI/UX ๊ด€๋ จ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ ์ž…๋ ฅ์„ ์บก์ฒ˜ํ•œ๋‹ค [4]. - - **๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต**: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํฌํ•จํ•˜๋ฉฐ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต์˜ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•œ๋‹ค [4]. - - **๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต**: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€์˜ ํ†ต์‹ (CRUD ์ž‘์—…)์„ ๋‹ด๋‹นํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ฐ์ดํ„ฐ ์ €์žฅ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•œ๋‹ค [4]. -- **์—„๊ฒฉํ•œ ์˜์กด์„ฑ ๋ฐ ํ†ต์‹  ๊ทœ์น™**: ๊ฐ ๊ณ„์ธต์€ ๋ฐ”๋กœ ์•„๋ž˜์˜ ์ธ์ ‘ํ•œ ํ•˜์œ„ ๊ณ„์ธตํ•˜๊ณ ๋งŒ ํ†ต์‹ ํ•ด์•ผ ํ•œ๋‹ค [5]. ์˜ˆ๋ฅผ ๋“ค์–ด UI ๋กœ์ง(ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต)์ด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด ์ด๋Š” ์•„ํ‚คํ…์ฒ˜์˜ ๋ถ€ํŒจ๋ฅผ ์˜๋ฏธํ•œ๋‹ค [2, 5]. -- **๊ตฌํ˜„ ํ”„๋ž™ํ‹ฐ์Šค**: ๊ณ„์ธต ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ๋ช…ํ™•ํ•œ ์ธํ„ฐํŽ˜์ด์Šค(Clear Interfaces)๋ฅผ ์ •์˜ํ•ด์•ผ ํ•˜๋ฉฐ, ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์„ ํ™œ์šฉํ•˜์—ฌ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)์„ ์ด‰์ง„ํ•ด์•ผ ํ•œ๋‹ค [5]. -- **์ฝ”๋“œ๋ฒ ์ด์Šค ์ฝ๊ธฐ ๊ด€์ **: ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ•ด๋…ํ•  ๋•Œ ์‹œ์Šคํ…œ์ด ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅด๋Š”์ง€ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์˜ ๋ฐฐ์น˜์™€ ์˜์กด์„ฑ ๊ทœ์น™์„ ์ดํ•ดํ•˜๋Š” ์ง€๋ฆ„๊ธธ์ด๋‹ค [2]. ๊ฐœ๋ฐœ์ž๋Š” ํ•˜ํ–ฅ์‹(Top-down)์œผ๋กœ ํƒ๋…ํ•˜๋ฉฐ ์˜์กด์„ฑ ๋ฐฉํ–ฅ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๋Š”์ง€ ์œ ์‹ฌํžˆ ๊ด€์ฐฐํ•ด์•ผ ํ•œ๋‹ค [2]. - -## โš–๏ธ Trade-offs & Caveats -- ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” ๊ด€๋ฆฌ๊ฐ€ ๋ถ€์ฃผ์˜ํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ(Tightly coupled)๋˜๋Š” ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค [6]. -- ๋ ˆ์ด์–ด ๊ฐ„ ๊ฒฐํ•ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ๋ช…ํ™•ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณ„์ธต ๋ถ„๋ฆฌ์˜ ์žฅ์ ์ด ํ‡ด์ƒ‰๋˜๋ฉฐ, ๊ฐ ๊ณ„์ธต์„ ์ตœ๋Œ€ํ•œ ์–‡๊ฒŒ(Thin) ์œ ์ง€ํ•ด์•ผ๋งŒ ๊ด€๋ฆฌ์˜ ์ด์ ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค [3, 5]. -- ๊ฐ ๊ณ„์ธต๋ณ„๋กœ ๋ช…ํ™•ํ•œ ๊ตฌ๋ถ„์ด ์žˆ์–ด ์ „ํ†ต์ ์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๋งค์šฐ ์ด์ƒ์ ์ด๋‚˜, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)์ฒ˜๋Ÿผ ๋ชจ๋“ˆ๋ณ„๋กœ ์™„๋ฒฝํžˆ ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ ๋ฐ ๋ฏผ์ฒฉํ•œ ํ™•์žฅ์ด ํ•„์š”ํ•œ ์‹œ์Šคํ…œ์— ๋น„ํ•ด์„œ๋Š” ๊ฑฐ๋Œ€ํ•˜๊ณ  ์ •์ ์ธ ๊ตฌ์กฐ(Monolithic)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค [3, 7]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์ฝ”๋“œ๋ฒ ์ด์Šค ๋ถ„์„/ํƒ์ƒ‰ ์ „๋žต] -- [[ํ•˜ํ–ฅ์‹ ์ ‘๊ทผ๋ฒ• (Top-Down Approach)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” ์ตœ์ƒ๋‹จ์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต๋ถ€ํ„ฐ ์ตœํ•˜๋‹จ์˜ ๋ฐ์ดํ„ฐ ๊ณ„์ธต์œผ๋กœ ์˜์กด์„ฑ์ด ํ๋ฅด๋ฉฐ, ํ•˜ํ–ฅ์‹ ํƒ์ƒ‰์€ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์˜ ์ œ์–ด ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ๋ถ€ํ•ฉํ•˜๋Š” ์ „๋žต์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [4, 8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ง„์ž…์ (UI ๋˜๋Š” API)์—์„œ ์‹œ์ž‘ํ•ด ํ˜ธ์ถœ ์Šคํƒ์„ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์ „์ฒด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜(Orchestration)๋˜๋Š”์ง€ ๊ด€์ฐฐํ•˜๋Š” ๊ธฐ์ˆ  [8]. - -#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns, SoC)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ฐ ๊ณ„์ธต๋ณ„๋กœ ์ฑ…์ž„(UI, ๋น„์ฆˆ๋‹ˆ์Šค, ๋ฐ์ดํ„ฐ)์„ ๋‚˜๋ˆ„๋Š” ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์ด์ž ์›์น™์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [1, 9, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ์งŠ์–ด์ง€์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ณ , ๊ฐœ๋ณ„ ์˜์—ญ์˜ ํ…Œ์ŠคํŠธ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์›๋ฆฌ [9]. -- [[์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection, DI)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์˜์กดํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ , ์œ ์—ฐ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์ธตํ˜• ์„ค๊ณ„์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ๋„์ž…๋˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค [5, 11]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ์™ธ๋ถ€๋กœ ์œ„์ž„ํ•˜์—ฌ ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌ์ฒด์ ์ธ ์ธํ”„๋ผ ๊ตฌํ˜„์ฒด๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ์ฝ”๋“œ ์„ค๊ณ„ ๊ธฐ๋ฒ• [5, 12]. - -### Deeper Research Questions - -- ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ ํ™˜๊ฒฝ์—์„œ ๊ณ„์ธต ๊ฐ„ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ(Tight Coupling)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„์™€ ์˜์กด์„ฑ ์ฃผ์ž…(DI)์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ํŒจํ„ด์€ ๋ฌด์—‡์ธ๊ฐ€? -- ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต์ด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” '์•„ํ‚คํ…์ฒ˜ ๋ถ€ํŒจ(Architecture Rot)'๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ •์ƒ์ ์ธ ๊ตฌ์กฐ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋‹จ๊ณ„์  ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์ „ํ†ต์ ์ธ 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜(Layered Architecture)๊ฐ€ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture)๋‚˜ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)๊ฐ€ ์ ์šฉ๋œ ์•„ํ‚คํ…์ฒ˜์™€ ๋น„๊ตํ•˜์—ฌ ๊ฐ–๋Š” ๊ทผ๋ณธ์ ์ธ ์˜์กด์„ฑ ๋ฐฉํ–ฅ์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ๊ณ„์ธตํ˜• ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ํ•˜ํ–ฅ์‹ ํƒ์ƒ‰(Top-Down)๊ณผ ์ƒํ–ฅ์‹ ํƒ์ƒ‰(Bottom-Up) ์ „๋žต์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‹œ์Šคํ…œ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ์ธ๋ฑ์‹ฑํ•˜๊ณ  ์˜จ๋ณด๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๊ฐ ๊ณ„์ธต์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ๋””๋ ‰ํ† ๋ฆฌ(Package-per-layer)๋กœ ๋‚˜๋ˆŒ ๋•Œ์™€ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ฌถ๋Š” ํ”ผ์ฒ˜ ๊ธฐ๋ฐ˜(Feature-based organization) ๋ฐฉ์‹ ๊ฐ„์˜ ๊ตฌ์กฐ์  ์žฅ๋‹จ์ ์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ๋น„์ฆˆ๋‹ˆ์Šค, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง์„ ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋ ˆ์ด์–ด๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์ƒ์œ„ ๋ ˆ์ด์–ด๊ฐ€ ํ•˜์œ„ ๋ ˆ์ด์–ด์˜ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๋„๋ก ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ๋‹ค [4-6]. -- **System Design:** ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•œ 3-Tier ๊ธฐ๋ฐ˜์˜ ์ „ํ†ต์ ์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ํ•  ๋•Œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ด๊ณ  ์ž…์ฆ๋œ ์ฒญ์‚ฌ์ง„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [1, 3]. -- **Operation / Maintenance:** ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ๊ฐ ๋ ˆ์ด์–ด ๊ฐ„ ํ†ต์‹  ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ, ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๋กœ์ง์ด UI์ธ์ง€, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ธ์ง€, DB ์ž…์ถœ๋ ฅ์ธ์ง€์— ๋”ฐ๋ผ ์ •ํ™•ํ•œ ๊ณ„์ธต์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค [1, 2]. -- **Learning Path:** ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฒ ์ด์Šค๋‚˜ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์— ์˜จ๋ณด๋”ฉํ•  ๋•Œ, ์‹œ์Šคํ…œ์ด ์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Œ์„ ์ธ์ง€ํ•˜๊ณ  UI ๋ผ์šฐํ„ฐ ๊ฐ™์€ ์ตœ์ƒ์œ„ ์ง„์ž…์ ์—์„œ ์ถœ๋ฐœํ•ด ๊ณ„์ธต์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ํ•™์Šตํ•œ๋‹ค [2, 8]. -- **My Project Relevance:** ์ฝ”๋“œ๋ฒ ์ด์Šค ์ฝ๊ธฐ ๋ฐ ํŒŒ์•… ์‹œ, ์ฝ”๋“œ๊ฐ€ ํŠน์ •ํ•œ ๊ณ„์ธต ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋งŒ์•ฝ ์—ญ๋ฐฉํ–ฅ ํ˜ธ์ถœ์ด๋‚˜ ๊ณ„์ธต์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ํ˜ธ์ถœ์ด ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๊ฐ€ ์Œ“์ธ ๋ถ€๋ถ„์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ๊ฐœ์„  ํฌ์ธํŠธ๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค [2]. - -### Adjacent Topics - -- [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์— ์˜์กดํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ง€๋งŒ, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์„ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“  ์˜์กด์„ฑ์ด ์ค‘์•™์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๋กœ์ง์„ ํ–ฅํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์™ธ๋ถ€ ๊ธฐ์ˆ  ์š”์†Œ๋กœ๋ถ€ํ„ฐ ์ฝ”์–ด ๋กœ์ง์„ ์™„์ „ํžˆ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐœ์ „๋œ ์„ค๊ณ„ ๋ฐฉ์‹์„ ํƒ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค [13-15]. - ---- -*Last updated: 2026-05-02* -## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) -- **์ •๋ณด ์ƒํƒœ:** verified -- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A -- **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. - -## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) -- **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** [[แ„€แ…จแ„Žแ…ณแ†ผแ„’แ…งแ†ผ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ (Layered Architecture).md]] -- **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE -- **์ฒ˜๋ฆฌ ์ด์œ :** ๊ธฐ์กด ๋ฌธ์„œ ๋‚ด์šฉ ๋ณด๊ฐ• ๋ฐ v3.1 ํ‘œ์ค€ ์ ์šฉ diff --git a/10_Wiki/Topics/02_Architecture_Principles/๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns).md b/10_Wiki/Topics/02_Architecture_Principles/๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns).md deleted file mode 100644 index d5c995a3..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns).md +++ /dev/null @@ -1,90 +0,0 @@ ---- -id: P-REINFORCE-WIKI-D2716426 -title: "แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns)" -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -status: verified -canonical_id: "" -aliases: [] -duplicate_of: "" -source_trust_level: A -confidence_score: 0.95 -tags: ['Separation of Concerns'] -raw_sources: ["Datacollector_MAC/out_wiki/แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns).md"] -last_reinforced: 2026-05-02 -github_commit: "" ---- - -# [[แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns)]] - -## ๐Ÿ“Œ Brief Summary -๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(SoC)๋Š” ์‹œ์Šคํ…œ์„ ๊ฒน์น˜์ง€ ์•Š๋Š” ๋šœ๋ ทํ•œ ์—ฌ๋Ÿฌ ์„น์…˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์›์น™์ด๋‹ค [1]. ๋‹จ์ผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ด€๋ จ ์—†๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ  ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค [1]. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋กœ์ง, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐ ๋ชจ๋“ˆ์˜ ๋…๋ฆฝ์ ์ธ ๊ฐœ๋ฐœ, ์ดํ•ด ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค [1]. - -## ๐Ÿ“– Core ์‹ค์งˆ Content -* **์›์น™์˜ ํ•ต์‹ฌ ๋ชฉ์ **: ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉํ‘œ์ด๋‹ค [1]. ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ด ๋งก์€ ํŠน์ •ํ•œ '๊ด€์‹ฌ์‚ฌ(concern)'์—๋งŒ ์ง‘์ค‘ํ•˜๋„๋ก ๊ฒฉ๋ฆฌํ•จ์œผ๋กœ์จ, ์ฝ”๋“œ๊ฐ€ ๋ถ€์„œ์ง€๊ธฐ ์‰ฝ๊ณ  ๊ด€๋ฆฌ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค [1]. -* **์ฃผ์š” ๊ตฌํ˜„ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด**: - * **MVC (Model-View-Controller)**: ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๋Š” Model, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” View, ์ž…๋ ฅ์„ ๋ฐ›์•„ ์กฐ์œจํ•˜๋Š” Controller๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค [2]. - * **๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered Architecture)**: ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต ๋“ฑ ์ˆ˜ํ‰์ ์ธ ์ธต์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉฐ, ๊ฐ ๊ณ„์ธต์€ ๋ฐ”๋กœ ์•„๋ž˜ ๊ณ„์ธต๊ณผ๋งŒ ํ†ต์‹ ํ•˜๋„๋ก ์ œํ•œํ•œ๋‹ค [2-4]. - * **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (Microservices Architecture)**: ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ, ๊ฒฐ์ œ ์ฒ˜๋ฆฌ ๋“ฑ ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์ค‘์‹ฌ์œผ๋กœ ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค๋“ค๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ถ„ํ• ํ•˜์—ฌ ๋งค์šฐ ์„ธ๋ฐ€ํ•œ ์ˆ˜์ค€์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค [2, 5]. -* **์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด ์‹ค์ฒœ ์ „๋žต**: - * **์ดˆ๊ธฐ ์ฑ…์ž„ ์‹๋ณ„**: ์‹œ์Šคํ…œ ์„ค๊ณ„ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, UI ๋ Œ๋”๋ง ๋“ฑ์˜ ์ฃผ์š” ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋งคํ•‘ํ•ด์•ผ ํ•œ๋‹ค [6]. - * **๋ช…ํ™•ํ•œ ์ธํ„ฐํŽ˜์ด์Šค (Clear Interfaces) ์‚ฌ์šฉ**: ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ์ž˜ ๋ฌธ์„œํ™”๋˜๊ณ  ์•ˆ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ, ํ•˜๋‚˜์˜ ๊ด€์‹ฌ์‚ฌ ๋‚ด๋ถ€ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ง๊ฐ€๋œจ๋ฆฌ์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•œ๋‹ค [6]. - * **์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection, DI) ํ™œ์šฉ**: DI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์ฝ”์–ด ๋กœ์ง์˜ ๋ณ€๊ฒฝ ์—†์ด ๊ตฌํ˜„์ฒด๋ฅผ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [6]. - * **์ˆœํ™˜ ์˜์กด์„ฑ ํ•ด๊ฒฐ**: ํ”„๋กœ์ ํŠธ ํด๋” ์กฐ์ง ๋ฐ ๋ชจ๋“ˆํ™” ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ˆœํ™˜ ์˜์กด์„ฑ(Cyclic dependencies) ๋ฌธ์ œ๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ ์›์น™์„ ์ค€์ˆ˜ํ•จ์œผ๋กœ์จ ์บก์Аํ™”๋ฅผ ํ†ตํ•ด ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค [7, 8]. - -## โš–๏ธ Trade-offs & Caveats -* **์ดˆ๊ธฐ ์„ค๊ณ„์˜ ๋ณต์žก์„ฑ**: ๊ฒฝ๊ณ„๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์ „ ์„ค๊ณ„(upfront boundary design) ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ตฌํ˜„ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค [9]. -* **๊ณผ๋„ํ•œ ์ถ”์ƒํ™”์˜ ์œ„ํ—˜**: ์ž˜๋ชป๋œ ๊ฒฝ๊ณ„ ์„ค์ •์ด๋‚˜ ๋ฌด๋ฆฌํ•œ ๋ถ„๋ฆฌ๋Š” ์˜คํžˆ๋ ค ๋ชจ๋“ˆ ๊ฐ„์˜ ํ†ต์‹ ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์‹œ์Šคํ…œ ํŒŒ์•…์„ ๋” ์–ด๋ ต๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค [6]. -* **์ฝ”๋“œ ํƒ์ƒ‰์˜ ํŒŒํŽธํ™”**: ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌ๋œ ๊ฐ์ฒด ์ง€ํ–ฅ ์‹œ์Šคํ…œ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” ๊ธฐ๋Šฅ ํ•˜๋‚˜๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํŒŒ์ผ๊ณผ ๊ณ„์ธต์„ ์ด๋ฆฌ์ €๋ฆฌ ๋„˜๋‚˜๋“ค์–ด์•ผ(jumping back and forth) ํ•˜๋Š” ์ธ์ง€์  ํ”ผ๋กœ๋„์™€ ํƒ์ƒ‰ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋Š” ๋‹จ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [10]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered Architecture)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ˆ˜ํ‰์  ๊ณ„์ธต(ํ‘œํ˜„, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋“ฑ)์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ ๊ณ„์ธต์˜ ์—ญํ• ์„ ์—„๊ฒฉํžˆ ์ œํ•œํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2, 3]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์„ ๋•Œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ๊ณ„์ธต์— ์†ํ•˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•จ์œผ๋กœ์จ ํ•ด๋‹น ์ฝ”๋“œ์˜ ์ฑ…์ž„๊ณผ ํ†ต์‹  ํ๋ฆ„(ํ•˜ํ–ฅ์‹ ํ๋ฆ„ ๋“ฑ)์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋‹ค [4, 11]. -- [[๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (Domain-Driven Design, DDD)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ(Bounded Context)๋ฅผ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ์Šคํ…œ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ์ „๋žต์ด ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์˜ ํ•ต์‹ฌ๊ณผ ์—ฐ๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [12, 13]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„์ฆˆ๋‹ˆ์Šค ์šฉ์–ด๋กœ ๋ช…๋ช…๋œ ๋ชจ๋“ˆ ๊ตฌ์กฐ(Ubiquitous Language)๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ์ˆ ์  ์ƒ์„ธ์— ๋งค๋ชฐ๋˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์˜๋„๋ฅผ ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [14-16]. -- [[๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (Microservices Architecture)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ ์›๋ฆฌ๋ฅผ ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋„˜์–ด ๋…๋ฆฝ์  ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋‹จ์œ„๋กœ ํ™•์žฅํ•œ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์  ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋„คํŠธ์›Œํฌ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์–ด๋–ป๊ฒŒ ํ†ต์‹ ํ•˜๊ณ  ํ˜‘๋ ฅํ•˜๋Š”์ง€, ์ธํ”„๋ผ ์ˆ˜์ค€์—์„œ์˜ ๋ถ„๋ฆฌ์™€ ๊ฒฐํ•ฉ๋„ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [17, 18]. - -#### [๊ตฌํ˜„/์„ค๊ณ„ ์›์น™] -- [[์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ถ„๋ฆฌ๋œ ๊ด€์‹ฌ์‚ฌ(๋ชจ๋“ˆ, ๊ณ„์ธต ๋“ฑ)๋“ค์ด ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์ง€ ์•Š๋„๋ก ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)์„ ์ œ๊ณตํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌํ˜„ ๊ธฐ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [6, 11, 19]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ•˜์œ„ ๋ชจ๋“ˆ์ด ์•„๋‹Œ ์ถ”์ƒํ™”(์ธํ„ฐํŽ˜์ด์Šค)์— ์˜์กดํ•˜๊ฒŒ ํ•˜์—ฌ ๊ฐ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ต์ฒด ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š” ์›๋ฆฌ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [11, 19, 20]. -- [[๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle, SRP)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„(SOLID)์—์„œ ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์ด ๋‹จ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ (ํ•˜๋‚˜์˜ ์ž‘์—…)๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ์›์น™์œผ๋กœ, ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [19]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ํŒŒ์ผ์ด๋‚˜ ํด๋ž˜์Šค์˜ ๋ณต์žก์„ฑ์„ ์ œ์–ดํ•˜๊ณ , ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„์™€ ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ์„ธ๋ถ€ ์„ค๊ณ„ ์ง€์‹์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค [19]. - -### Deeper Research Questions -- ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์‹œ์Šคํ…œ์˜ '๊ด€์‹ฌ์‚ฌ(Concern)'๋ฅผ ๋„์ถœํ•˜๊ณ  ๋ชจ๋“ˆ ๊ฒฝ๊ณ„๋ฅผ ์ง“๊ธฐ ์œ„ํ•ด Event Storming ๊ฐ™์€ ์›Œํฌ์ƒต์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์—„๊ฒฉํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ์—์„œ, ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ์™€ ๋ณ€ํ™˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ตœ์†Œํ™”ํ•˜๋Š”๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๊ธฐ๋Šฅ(Feature) ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋‚˜๋ˆŒ ๋•Œ์™€ ๊ธฐ์ˆ ์  ๊ณ„์ธต(Layer) ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆŒ ๋•Œ, ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํƒ์ƒ‰ ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ฐ€? -- ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์™€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๊ฒฝ๊ณ„๋ฅผ ์ •์˜ํ•  ๋•Œ, ๋‘ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ๊ธฐ๋ฒ•์€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋ฉฐ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๊ธฐ์กด์˜ ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋†€๋ฆฌ์‹ ์‹œ์Šคํ…œ์— ์–ฝํ˜€์žˆ๋Š” ์ˆœํ™˜ ์˜์กด์„ฑ(Cyclic Dependency)์„ ์‹๋ณ„ํ•˜๊ณ , ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ์›์น™์„ ์ ์šฉํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋‹จ๊ณ„์  ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ๋ช…ํ™•ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ™œ์šฉํ•˜์—ฌ, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ๋‹ค๋ฃจ๋Š” ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ์ฝ”๋“œ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค [4, 6, 11]. -- **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์‹œ MVC ํŒจํ„ด์ด๋‚˜ ๊ณ„์ธตํ˜•, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋“ฑ์„ ์ฑ„ํƒํ•˜์—ฌ, ๊ฐ ๊ตฌ์กฐ๊ฐ€ ๋‹ด๋‹นํ•  '๊ด€์‹ฌ์‚ฌ'์˜ ๊ฒฝ๊ณ„๋ฅผ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋ช…ํ™•ํžˆ ์ˆ˜๋ฆฝํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค [2, 3, 21]. -- **Operation / Maintenance:** ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด๋‚˜ ๋ฒ„๊ทธ ๋ฐœ์ƒ ์‹œ(์˜ˆ: UI ๋ ˆ์ด์•„์›ƒ ๊นจ์ง, DB ์ €์žฅ ์˜ค๋ฅ˜), ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ „์ฒด ์‹œ์Šคํ…œ์„ ๋’ค์ง€์ง€ ์•Š๊ณ  ์›์ธ์ด ๋˜๋Š” ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋‚˜ ๊ณ„์ธต๋งŒ์„ ์ง‘์ค‘์ ์œผ๋กœ ๊ฒ€ํ† ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํšจ์œจํ™”ํ•œ๋‹ค [1, 3, 7]. -- **Learning Path:** ๋ณต์žกํ•œ ๋Œ€ํ˜• ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋ถ„์„ํ•  ๋•Œ, ์•„ํ‚คํ…์ฒ˜ ์ƒ ๋ถ„๋ฆฌ๋œ ๊ด€์‹ฌ์‚ฌ์˜ ํ˜•ํƒœ(๊ณ„์ธตํ˜•์ธ์ง€, ๋„๋ฉ”์ธ ์ค‘์‹ฌ์ธ์ง€)๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•œ ํ›„, ํ•˜ํ–ฅ์‹ ๋˜๋Š” ์ƒํ–ฅ์‹ ํƒ์ƒ‰ ๊ธฐ๋ฒ•์„ ์กฐํ•ฉํ•˜์—ฌ ๋ถ€๋ถ„์ ์œผ๋กœ ์‹œ์Šคํ…œ์„ ์ •๋ณตํ•ด ๋‚˜๊ฐ€๋Š” ํ•™์Šต ์ง€ํ‘œ๋กœ ํ™œ์šฉํ•œ๋‹ค [22, 23]. -- **My Project Relevance:** ํŒ€ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์‹œ ๊ฐ ํŒŒ์ผ๊ณผ ํด๋”๋ฅผ ์ฑ…์ž„(UI, ์œ ํ‹ธ๋ฆฌํ‹ฐ, ์„œ๋น„์Šค ๋กœ์ง ๋“ฑ)์— ๋งž๊ฒŒ ์กฐ์งํ•˜๊ณ  ์„ค๊ณ„ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ, ์ถ”ํ›„ ์ƒˆ๋กœ์šด ํŒ€์›์ด ํ•ฉ๋ฅ˜ํ•˜๊ฑฐ๋‚˜ ๋ณธ์ธ์ด ์ฝ”๋“œ๋ฅผ ์žฌํƒ๋…ํ•  ๋•Œ ๋…ผ๋ฆฌ์  ํƒ์ƒ‰์„ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. - -### Adjacent Topics -- [[SOLID ์›์น™]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ํด๋ž˜์Šค ๋ฐ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆ˜์ค€์—์„œ ๋”์šฑ ๊ตฌ์ฒดํ™”ํ•˜๋Š” 5๊ฐ€์ง€ ์„ค๊ณ„ ์›์น™(ํŠนํžˆ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™๊ณผ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™)์„ ํ†ตํ•ด ์œ ์—ฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•์œผ๋กœ ์ดํ•ด๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [19, 24]. - ---- -*Last updated: 2026-05-02* -## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) -- **์ •๋ณด ์ƒํƒœ:** verified -- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A -- **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. - -## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) -- **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** [[แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns).md]] -- **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE -- **์ฒ˜๋ฆฌ ์ด์œ :** ๊ธฐ์กด ๋ฌธ์„œ ๋‚ด์šฉ ๋ณด๊ฐ• ๋ฐ v3.1 ํ‘œ์ค€ ์ ์šฉ diff --git a/10_Wiki/Topics/02_Architecture_Principles/๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ (Bounded Context).md b/10_Wiki/Topics/02_Architecture_Principles/๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ (Bounded Context).md deleted file mode 100644 index 207d91b5..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ (Bounded Context).md +++ /dev/null @@ -1,88 +0,0 @@ ---- -id: P-REINFORCE-WIKI-EC57F85A -title: "แ„‡แ…กแ„‹แ…ฎแ†ซแ„ƒแ…ตแ„ƒแ…ณ แ„แ…ฅแ†ซแ„แ…ฆแ†จแ„‰แ…ณแ„แ…ณ (Bounded Context)" -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -status: verified -canonical_id: "" -aliases: [] -duplicate_of: "" -source_trust_level: A -confidence_score: 0.95 -tags: ['Bounded Context'] -raw_sources: ["Datacollector_MAC/out_wiki/แ„‡แ…กแ„‹แ…ฎแ†ซแ„ƒแ…ตแ„ƒแ…ณ แ„แ…ฅแ†ซแ„แ…ฆแ†จแ„‰แ…ณแ„แ…ณ (Bounded Context).md"] -last_reinforced: 2026-05-02 -github_commit: "" ---- - -# [[แ„‡แ…กแ„‹แ…ฎแ†ซแ„ƒแ…ตแ„ƒแ…ณ แ„แ…ฅแ†ซแ„แ…ฆแ†จแ„‰แ…ณแ„แ…ณ (Bounded Context)]] - -## ๐Ÿ“Œ Brief Summary -๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ(Bounded Context)๋Š” ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์—์„œ ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋ถ„ํ• ํ•œ ๋…๋ฆฝ์ ์ธ ํ•˜์œ„ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ๊ฐ ์ปจํ…์ŠคํŠธ๋Š” ๊ณ ์œ ํ•œ ๋ชจ๋ธ๊ณผ ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด(Ubiquitous Language)๋ฅผ ๋ณด์œ ํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„ ๋ฐ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1-3]. ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์„ ๋•Œ, ์ด๋Ÿฌํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์ค‘์‹ฌ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ์ƒ์„ธ ๋กœ์ง์„ ํ•ด๋…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์ธ์ง€์  ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [4]. - -## ๐Ÿ“– Core Content - -- **๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋ฐ˜์˜ ๊ฒฝ๊ณ„ ๋ถ„๋ฆฌ์™€ ๋…๋ฆฝ์„ฑ**: ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ '์ฃผ๋ฌธ ๊ด€๋ฆฌ', '๊ณ ๊ฐ ์ง€์›', '๊ฒฐ์ œ ์ฒ˜๋ฆฌ' ๋“ฑ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(๊ธฐ๋Šฅ๋ณ„ ๋ชจ๋“ˆ)์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ช…ํ™•ํ•œ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค [1, 5]. ๊ฐ ์ปจํ…์ŠคํŠธ๋Š” ๋ชจ๋ธ์ด ์„œ๋กœ ๊ฒน์น˜๊ฑฐ๋‚˜ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [3]. -- **์ฝ”๋“œ๋ฒ ์ด์Šค ๋…ํ•ด๋ฅผ ์œ„ํ•œ ์ธ์ง€์  ๊ธฐ๋ฐ˜**: ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๊ฐ€ ์ ์šฉ๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ๊ธฐ์ˆ ์ ์ธ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ, ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋ผ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์šฉ์–ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ)๊ฐ€ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [4]. ์—”์ง€๋‹ˆ์–ด๋Š” ๊ฐœ๋ณ„ ์ฝ”๋“œ์˜ ์ƒ์„ธ ๋กœ์ง์— ๋งค๋ชฐ๋˜๊ธฐ ์ „์— ์ด ๊ตฌ์กฐ์  ํŠน์ง•์„ ํŒŒ์•…ํ•จ์œผ๋กœ์จ ์ „์ฒด ๋น„์ฆˆ๋‹ˆ์Šค์˜ ์˜๋„์™€ ๋งฅ๋ฝ์„ ๋จผ์ € ์ดํ•ดํ•˜๋Š” ์ธ์ง€์  ๊ธฐ๋ฐ˜์„ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. -- **์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด(Ubiquitous Language)๋ฅผ ํ†ตํ•œ ์˜๋ฏธ์˜ ๋ช…ํ™•ํ™”**: ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์ดํ•ด๊ด€๊ณ„์ž์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [3, 6]. ์ด๋Š” ๊ทœ์น™์ด๋‚˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์–ด๋””์— ์ ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ํ˜ผ๋ž€(ambiguity)์„ ์ค„์ด๊ณ , ์ฝ”๋“œ ๋ฐ ๋ฌธ์„œ ๋‚ด์—์„œ ์ดํ•ด์™€ ์†Œํ†ต์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [6, 7]. -- **์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ(Scalability)**: ๊ฐ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌ(๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ)๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค [8]. ๋˜ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค๋‚˜ ๊ธฐ์ˆ ์  ์š”๊ตฌ๊ฐ€ ๋ณ€ํ™”ํ•จ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ์ปจํ…์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํŒŒ๊ดด ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ทœ๋ชจ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8]. -- **๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค(Modular Monolith) ๊ตฌํ˜„์˜ ํ•ต์‹ฌ**: ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋„ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [6]. ๋ชจ๋†€๋ฆฌ์Šค ๋‚ด์—์„œ ๊ฐœ๋ณ„ ๋น„์ฆˆ๋‹ˆ์Šค ์—ญ๋Ÿ‰์„ ๋‹ด๋Š” ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‚ด๋ถ€ ์‘์ง‘๋„๋ฅผ ๋†’์ด๋ฉฐ, ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค [6, 9]. - -## โš–๏ธ Trade-offs & Caveats -์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. (๋‹จ, ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋“ค์ด ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ ์ปจํ…์ŠคํŠธ ๊ฐ„์˜ ์ƒํ˜ธ ๊ด€๊ณ„(Interrelationships)๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” '์ปจํ…์ŠคํŠธ ๋งคํ•‘(Context Mapping)'์ด๋ผ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ฐ€์ด๋“œ ์žฅ์น˜๊ฐ€ ์ˆ˜๋ฐ˜๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ์ œํ•œ์ ์œผ๋กœ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค [3, 7].) - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์„ค๊ณ„ ์ฒ ํ•™/์•„ํ‚คํ…์ฒ˜] -- [[๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (DDD)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ค‘์‹ฌ์— ๋‘๋Š” DDD(Domain-Driven Design)์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์„ค๊ณ„ ํŒจํ„ด(ํ•˜์œ„ ๋„๋ฉ”์ธ ๋ถ„ํ• )์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์ด ๊ธฐ์ˆ  ์Šคํƒ ์ค‘์‹ฌ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ(ํ˜„์‹ค ์„ธ๊ณ„)์„ ์ค‘์‹ฌ์œผ๋กœ ๋ชจ๋ธ๋ง๋˜๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๊ตฌ์ถ•๋˜๋Š” ๊ทผ๋ณธ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 10]. - -- [[๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (Microservices Architecture)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋Š” ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋‹จ์ผํ•œ ์‹œ์Šคํ…œ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๋ฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋‚˜ ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค๋กœ ๋ถ„ํ•ดํ•  ๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” '๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„'๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [6, 11]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ƒํ˜ธ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค๋“ค๋กœ ๋‚˜๋ˆŒ ๋•Œ ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ๋ฌถ์—ฌ์•ผ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ๋ถ„์‚ฐ ์ „๋žต์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 11, 12]. - -#### [๊ตฌ์กฐ/๊ตฌํ˜„ ํŒจํ„ด] -- [[์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด (Ubiquitous Language)]] - - ์—ฐ๊ฒฐ ์ด์œ : ํ•˜๋‚˜์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‚ด์˜ ๋ชจ๋ธ ์ˆœ์ˆ˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ตฌ์„ฑ์›(๊ฐœ๋ฐœ์ž, ๋น„์ฆˆ๋‹ˆ์Šค ์ „๋ฌธ๊ฐ€)์ด ์ฝ”๋“œ์™€ ๋Œ€ํ™”์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์–ดํœ˜์ง‘์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3, 10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋ช…๋ช… ๊ทœ์น™์ด ์–ด๋–ค ๋น„์ฆˆ๋‹ˆ์Šค์  ํ•ฉ์˜๋ฅผ ๊ฑฐ์ณ ์ง€์–ด์กŒ๋Š”์ง€ ๋ช…ํ™•ํ•œ ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 6, 13]. - -- [[์• ๊ทธ๋ฆฌ๊ฑฐํŠธ (Aggregates)]] - - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ(ํด๋”) ๋‚ด๋ถ€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” DDD์˜ ์„ธ๋ถ€ ์„ค๊ณ„ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๋‹จ์ผ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋˜๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ๊ตฐ์ง‘์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1, 4]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์˜ ์—ฌ๋Ÿฌ ๊ฐ์ฒด(์—”ํ‹ฐํ‹ฐ ๋“ฑ)๋“ค์ด ์–ด๋–ป๊ฒŒ ํŠธ๋žœ์žญ์…˜์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ ๊ทธ๋ฃนํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์„ธ๋ถ€์ ์ธ ์ฝ”๋“œ ๊ตฌํ˜„ ํŒจํ„ด์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 4]. - -### Deeper Research Questions - -- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•  ๋•Œ, ์ปจํ…์ŠคํŠธ ๋งคํ•‘(Context Mapping)์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์–ด๋– ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํ†ต์‹  ๊ทœ์•ฝ์œผ๋กœ ๊ตฌ์ฒดํ™”๋˜๋Š”๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋†€๋ฆฌ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‹จ์œ„๋กœ ์žฌ๊ตฌ์„ฑ(๋ชจ๋”๋‚˜์ด์ œ์ด์…˜)ํ•  ๋•Œ, ์ˆจ๊ฒจ์ง„ ๋ฐ์ดํ„ฐ ์˜์กด์„ฑ์„ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋Š์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ํ•˜ํ–ฅ์‹(Top-Down) ๋˜๋Š” ์ƒํ–ฅ์‹(Bottom-Up)์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ, ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ํด๋” ๊ตฌ์กฐ๋Š” ์ •๋ณด ์ถ”์  ๊ฒฝ๋กœ์˜ ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ์†Œ์‹œํ‚ค๋Š”๊ฐ€? -- ์œ ๋น„์ฟผํ„ฐ์Šค ์–ธ์–ด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ์—์„œ ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„๋  ๋•Œ(์˜ˆ: '๊ณ ๊ฐ'์ด๋ผ๋Š” ๋‹จ์–ด์˜ ์˜๋ฏธ ์ถฉ๋Œ), ์ฝ”๋“œ ๋ช…๋ช… ๊ทœ์น™๊ณผ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š”๊ฐ€? -- ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ(Aggregates), ์—”ํ‹ฐํ‹ฐ(Entities), ๊ฐ’ ๊ฐ์ฒด(Value Objects) ๊ฐ„์˜ ์˜์กด์„ฑ ํ๋ฆ„์„ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๋Š” ์ฝ”๋“œ ๋ฆฌ๋”ฉ ์ˆœ์„œ๋Š” ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ํŠน์ • ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์™€ ํด๋ž˜์Šค๋ฅผ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€(์ปจํ…์ŠคํŠธ) ์•ˆ์— ์ง‘์ค‘์‹œ์ผœ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋ชจ๋“ˆํ™”๋œ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค [3, 6, 14]. -- **System Design:** ์ด์ปค๋จธ์Šค ๋“ฑ ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ๋•Œ '์ฃผ๋ฌธ ์ฒ˜๋ฆฌ', '์ธ๋ฒคํ† ๋ฆฌ', '์‚ฌ์šฉ์ž ๊ด€๋ฆฌ' ๋“ฑ ๊ฐ๊ฐ์˜ ์ปจํ…์ŠคํŠธ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ, ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ชจ๋“ˆํ˜• ๋ชจ๋†€๋ฆฌ์Šค๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ตฌ์กฐ๋ฅผ ๋„์ถœํ•ฉ๋‹ˆ๋‹ค [2, 5, 6]. -- **Operation / Maintenance:** ๊ฐœ๋ณ„ ๋ถ€๋ถ„์ด ์™„๋ฒฝํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์‹œ์Šคํ…œ ์œ ์ง€๋ณด์ˆ˜ ์‹œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•œ ์˜์—ญ์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ๋งŒ ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋ฐ ์ˆ˜์ • ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ์•ˆ์ •์ ์ธ ์šด์˜์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [8]. -- **Learning Path:** ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์˜จ๋ณด๋”ฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ€์žฅ ๋จผ์ € ์ฝ”๋“œ์˜ ๋””๋ ‰ํ† ๋ฆฌ(ํด๋”)๊ฐ€ ์–ด๋–ค ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์˜๋„๋ฅผ ๊ฑฐ์‹œ์ ์œผ๋กœ ์ธ์ง€ํ•˜๊ณ  ์ฝ”๋“œ ๋…ํ•ด์— ์ฐฉ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค [4]. -- **My Project Relevance:** ๋ฐฉ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ๋˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋ทฐํ•ด์•ผ ํ•  ๋•Œ, ์ฝ”๋“œ๊ฐ€ ์ฒ ์ €ํ•˜๊ฒŒ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ(๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ)์„ ๊ธฐ์ค€์œผ๋กœ ์‘์ง‘๋ ฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋Š”์ง€ ํ‰๊ฐ€ํ•˜๊ณ  ๋ถ„๋ฆฌํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๋ฐ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics - -- [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋น„์ฆˆ๋‹ˆ์Šค ์ค‘์‹ฌ์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ํ•ต์‹ฌ ๋„๋ฉ”์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์™ธ๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์‹œํ‚ค๊ณ  ๋ณดํ˜ธํ•˜๋Š” ์˜์กด์„ฑ ๊ทœ์น™(Dependency Rule)์— ๋Œ€ํ•ด ์ถ”๊ฐ€๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [4, 15]. -- [[์ฝ”๋“œ๋ฒ ์ด์Šค ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜ ๋งต (Codebase Orientation Map)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์‹๋ณ„๋œ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ ๋‹จ์œ„์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ํŒŒ์ผ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์‹œ๊ฐํ™”ํ•˜์—ฌ, ํŒ€์›๋“ค์˜ ์‹œ์Šคํ…œ ๊ตฌ์กฐ ํŒŒ์•…๊ณผ ์ฝ”๋“œ ํƒ์ƒ‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฌธ์„œํ™” ์ „๋žต์„ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค [16, 17]. - ---- -*Last updated: 2026-05-02* -## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) -- **์ •๋ณด ์ƒํƒœ:** verified -- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A -- **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. - -## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) -- **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** [[แ„‡แ…กแ„‹แ…ฎแ†ซแ„ƒแ…ตแ„ƒแ…ณ แ„แ…ฅแ†ซแ„แ…ฆแ†จแ„‰แ…ณแ„แ…ณ (Bounded Context).md]] -- **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE -- **์ฒ˜๋ฆฌ ์ด์œ :** ๊ธฐ์กด ๋ฌธ์„œ ๋‚ด์šฉ ๋ณด๊ฐ• ๋ฐ v3.1 ํ‘œ์ค€ ์ ์šฉ diff --git a/10_Wiki/Topics/02_Architecture_Principles/์˜์กด์„ฑ ์—ญ์ „ (Dependency Inversion).md b/10_Wiki/Topics/02_Architecture_Principles/์˜์กด์„ฑ ์—ญ์ „ (Dependency Inversion).md deleted file mode 100644 index 9b92ac14..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/์˜์กด์„ฑ ์—ญ์ „ (Dependency Inversion).md +++ /dev/null @@ -1,80 +0,0 @@ ---- -id: P-REINFORCE-WIKI-2FA6CA41 -title: "แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„‹แ…งแ†จแ„Œแ…ฅแ†ซ (Dependency Inversion)" -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -status: verified -canonical_id: "" -aliases: [] -duplicate_of: "" -source_trust_level: A -confidence_score: 0.95 -tags: ['Dependency Inversion'] -raw_sources: ["Datacollector_MAC/out_wiki/แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„‹แ…งแ†จแ„Œแ…ฅแ†ซ (Dependency Inversion).md"] -last_reinforced: 2026-05-02 -github_commit: "" ---- - -# [[แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„‹แ…งแ†จแ„Œแ…ฅแ†ซ (Dependency Inversion)]] - -## ๐Ÿ“Œ Brief Summary -**์˜์กด์„ฑ ์—ญ์ „(Dependency Inversion Principle, DIP)**์€ ์ƒ์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์ด ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์— ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ณ , ์–‘์ชฝ ๋ชจ๋‘ **์ถ”์ƒํ™”(Abstractions)**์— ์˜์กดํ•˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ ์›์น™์ด๋‹ค [1]. ์ด๋Š” ์ฃผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI) ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋˜๋ฉฐ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ๋‚ฎ์ถ˜๋‹ค [1-3]. ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด์—์„œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋‚˜ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ํ•ต์‹ฌ์ ์œผ๋กœ ์ž‘์šฉํ•˜์—ฌ, ์‹œ์Šคํ…œ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์™ธ๋ถ€ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•œ๋‹ค [4, 5]. - -## ๐Ÿ“– Core ์ถ”์ƒํ™” Content -- **์ถ”์ƒํ™” ์ค‘์‹ฌ์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ:** ๋†’์€ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ(High-level modules)์€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ(Low-level modules)์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘ ๋ชจ๋“ˆ ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์€ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค [1]. ์ปดํฌ๋„ŒํŠธ๊ฐ€ '์–ด๋–ป๊ฒŒ' ์ˆ˜ํ–‰ํ•˜๋Š”์ง€(๊ตฌํ˜„) ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— '๋ฌด์—‡์„' ํ•ด์•ผ ํ•˜๋Š”์ง€(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ๋จผ์ € ์ •์˜ํ•˜๋Š” ์„ค๊ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [2]. -- **ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋‚ด์—์„œ์˜ ์—ญํ• :** ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด UI๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์€ ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค [4, 5]. ๋‚ด๋ถ€ ๊ณ„์ธต์€ ์ธํ„ฐํŽ˜์ด์Šค(ํฌํŠธ)๋ฅผ ์ •์˜ํ•˜๊ณ , ์™ธ๋ถ€ ๊ณ„์ธต์ด ์ด์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด(์–ด๋Œ‘ํ„ฐ)๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ์˜์กด์„ฑ์˜ ๋ฐฉํ–ฅ์„ ๊ฐ•์ œ๋กœ ์•ˆ์ชฝ์œผ๋กœ ํ–ฅํ•˜๊ฒŒ ํ•˜์—ฌ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์™ธ๋ถ€ ๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌํ•œ๋‹ค [4]. -- **์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์„ ํ†ตํ•œ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ:** ์ƒ์œ„ ๊ณ„์ธต์ด ํ•˜์œ„ ๊ณ„์ธต์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ฃผ์ž…(Injected)๋ฐ›๊ฒŒ ํ•จ์œผ๋กœ์จ, ๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose coupling)์„ ๋ณด์žฅํ•œ๋‹ค [3]. ๋Ÿฐํƒ€์ž„์— ์˜์กด์„ฑ์ด ์—ฐ๊ฒฐ๋˜๋ฏ€๋กœ ๊ตฌํ˜„์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ˆ  ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [3, 4, 6]. - -## โš–๏ธ Trade-offs & Caveats -์˜์กด์„ฑ ์—ญ์ „ ์›์น™์„ ์‹œ์Šคํ…œ์— ๋„์ž…ํ•˜๋ฉด ๊ณ ๋„๋กœ ์œ ์—ฐํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋Œ€๊ธ‰๋ถ€๋กœ **๊ตฌํ˜„ ๋ณต์žก์„ฑ(Implementation Complexity)**์ด ๋†’์•„์ง€๋Š” ์ œ์•ฝ ์‚ฌํ•ญ์ด ์กด์žฌํ•œ๋‹ค [7]. ์ถ”์ƒํ™” ๊ณ„์ธต์ด ์ถ”๊ฐ€๋˜๊ณ  ์—„๊ฒฉํ•œ ์˜์กด์„ฑ ๋ฐฉํ–ฅ ๊ทœ์น™์„ ๊ฐ•์ œํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ ์—ญ๋Ÿ‰๊ณผ ๋†’์€ ์ˆ˜์ค€์˜ ์„ค๊ณ„ ๊ทœ์œจ(Design discipline)์ด ์š”๊ตฌ๋œ๋‹ค [4, 7]. ๋˜ํ•œ Spring(Java)์ด๋‚˜ ASP.NET Core์™€ ๊ฐ™์€ DI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ง€์‹์ด ํ•„์ˆ˜์ ์ด๋ฉฐ, ์ฝ”๋“œ ์ƒ์—์„œ ์ง์ ‘์ ์ธ ํ˜ธ์ถœ ํ๋ฆ„์„ ์ˆจ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„์˜ ๊ฒฐํ•ฉ ๊ด€๊ณ„๋ฅผ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค [2, 7]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ์„ค๊ณ„ ์›์น™] -- [[SOLID ์›์น™ (SOLID Principles)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์˜์กด์„ฑ ์—ญ์ „์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃจ๋Š” SOLID ์„ค๊ณ„ ์›์น™์˜ 5๊ฐ€์ง€ ์ค‘ ๋งˆ์ง€๋ง‰(D) ์›์น™์— ํ•ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [8]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ์ฑ…์ž„(SRP)์ด๋‚˜ ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP) ๋“ฑ ๋‹ค๋ฅธ ์›์น™๋“ค์ด ์˜์กด์„ฑ ์—ญ์ „๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ๊ฑฐ์‹œ์  ๊ด€์ ์„ ์ œ๊ณตํ•œ๋‹ค [1, 2, 8]. -- [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜์กด์„ฑ์ด ์˜ค์ง ๋‚ด๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ์„ ํ–ฅํ•˜๋„๋ก(Dependency Rule) ๊ฐ•์ œํ•˜๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ์ค‘์‹ฌ์— ์˜์กด์„ฑ ์—ญ์ „์ด ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [4, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ธํ”„๋ผ/ํ”„๋ ˆ์ž„์›Œํฌ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฌผ๋ฆฌ์ , ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฒฉ๋ฆฌ์‹œํ‚ค๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [4, 9]. - -#### [๊ตฌํ˜„ ๋ฐ ํ™œ์šฉ ๋„๊ตฌ] -- [[์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์„ ์‹ค์ œ ์†Œํ”„ํŠธ์›จ์–ด ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์‹คํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ๋ณดํŽธ์ ์ด๊ณ  ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค [1, 3]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ•˜์œ„ ๋ชจ๋“ˆ์ด ์ƒ์œ„ ๋ชจ๋“ˆ๋กœ ์–ด๋–ป๊ฒŒ '์ฃผ์ž…'๋˜๋Š”์ง€, ํ”„๋ ˆ์ž„์›Œํฌ(Spring ๋“ฑ)๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์–ด๋–ป๊ฒŒ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๋ฐ”์ธ๋”ฉ์„ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [2-4]. -- [[์ธํ„ฐํŽ˜์ด์Šค์™€ ํฌํŠธ/์–ด๋Œ‘ํ„ฐ (Interfaces and Ports/Adapters)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์ถ”์ƒํ™”์— ์˜์กดํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๊ณ„์ธต์— ์ธํ„ฐํŽ˜์ด์Šค(ํฌํŠธ)๋ฅผ ์ •์˜ํ•˜๊ณ , ์™ธ๋ถ€์— ๊ตฌ์ฒด์  ๊ตฌํ˜„(์–ด๋Œ‘ํ„ฐ)์„ ๋‘์–ด ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ค๋Š” ๊ตฌํ˜„ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [4, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์„ ๋•Œ ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ๋ถ€์™€ ์‹ค์ œ ๊ตฌํ˜„๋ถ€๊ฐ€ ๋ถ„๋ฆฌ๋œ ๊ตฌ์กฐ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ํ†ต์‹  ๊ทœ์•ฝ์„ ์ดํ•ดํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ์ œ๊ณตํ•œ๋‹ค [4, 5]. - -### Deeper Research Questions -- ์ƒ์œ„ ๋ชจ๋“ˆ๊ณผ ํ•˜์œ„ ๋ชจ๋“ˆ์ด ๋ชจ๋‘ ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•  ๋•Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Ÿฐํƒ€์ž„์— ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด(Concrete Implementation)๋“ค์€ ์–ด๋–ค ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ”์ธ๋”ฉ(Wiring)๋˜๋Š”๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋†€๋ฆฌ์‹ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์ฝ”๋“œ๋“ค์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์„ ์ ์ง„์ ์œผ๋กœ ์ ์šฉ(Refactoring)ํ•˜๋ ค ํ•  ๋•Œ ๋งˆ์ฃผํ•˜๋Š” ๊ธฐ์ˆ ์  ๋‚œ๊ด€๊ณผ ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์Šคํ”„๋ง(Spring)๊ณผ ๊ฐ™์€ DI ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋„์ž…์ด ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ํŽธ์˜์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ๋ฐ˜๋ฉด, ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ •์  ํƒ์ƒ‰์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๋Ÿฐํƒ€์ž„ ๋ฐ”์ธ๋”ฉ์˜ ๋ณต์žก์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ƒ์‡„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ์˜์กด์„ฑ ์—ญ์ „์„ ํ†ตํ•ด ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Testing) ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋ฐ ๋ชจ์˜ ๊ฐ์ฒด(Mock Object) ํ™œ์šฉ์— ์ •ํ™•ํžˆ ์–ด๋–ค ๊ตฌ์กฐ์  ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? -- ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์™€ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ํ™˜๊ฒฝ์—์„œ ์˜์กด์„ฑ ์—ญ์ „์ด ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ ์šฉ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์˜ ๊ฒฝ๊ณ„๋Š” ์–ด๋–ป๊ฒŒ ํŒ๋‹จํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•  '์ธํ„ฐํŽ˜์ด์Šค'๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ •์˜ํ•˜๊ณ , ๊ตฌ์ฒด์ ์ธ ์ž‘๋™ ๋ฐฉ์‹(๊ตฌํ˜„์ฒด)์€ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์˜์กด์„ฑ ์ฃผ์ž…(DI)์„ ๋ฐ›๋„๋ก ์ฝ”๋”ฉํ•œ๋‹ค [1, 2]. -- **System Design:** ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋‚˜ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ, ํ•ต์‹ฌ ๋„๋ฉ”์ธ ๋กœ์ง์ด ์™ธ๋ถ€ DB๋‚˜ UI์— ์˜์กดํ•˜์ง€ ์•Š๊ฒŒ๋” ์ธํ„ฐํŽ˜์ด์Šค ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‹œ์Šคํ…œ์ด ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค [4, 5]. -- **Operation / Maintenance:** ์˜์กด์„ฑ ์—ญ์ „์„ ํ†ตํ•ด ๊ฐ ๊ณ„์ธต์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌํ–ˆ์œผ๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋‚˜ ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ต์ฒด ์‹œ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ „ํ˜€ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๊ทน๋Œ€ํ™”๋œ๋‹ค [3, 4, 6]. -- **Learning Path:** ๋ณต์žกํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋ถ„์„ํ•  ๋•Œ, ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํ˜ธ์ถœ ํ๋ฆ„๋งŒ์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๋Œ€์‹  '์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค'์™€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” '์–ด๋Œ‘ํ„ฐ ํŒจํ‚ค์ง€' ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์ฐพ์•„ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ์˜๋„์™€ ๊ธฐ์ˆ ์  ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•ด์„œ ํŒŒ์•…ํ•˜๋Š” ํ›ˆ๋ จ์ด ํ•„์š”ํ•˜๋‹ค [1, 5, 8]. -- **My Project Relevance:** '์ฝ”๋“œ๋ฒ ์ด์Šค ์ฝ๊ธฐ ์ง€์‹'์„ ๋†’์ด๊ธฐ ์œ„ํ•ด, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์ด ์–ด๋–ป๊ฒŒ ์—ญ์ „๋˜์–ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•ด์•ผ ํ•œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ๋ถ€๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ํฐ ๊ทธ๋ฆผ(Top-Down)์„ ์ธ์ง€ํ•˜๊ณ , ์˜์กด์„ฑ ์ฃผ์ž… ์„ค์ •์„ ์—ญ์ถ”์ ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— ๊ฒฐํ•ฉ๋˜๋Š” ๊ตฌ์ฒด ํด๋ž˜์Šค(Bottom-Up)๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋งตํ•‘ ์—ญ๋Ÿ‰์ด ์ฝ”๋“œ ๊ตฌ์กฐ ํŒŒ์•…์˜ ์„ฑํŒจ๋ฅผ ๊ฐ€๋ฅธ๋‹ค [1, 5, 10]. - -### Adjacent Topics -- [[๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle, SRP)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ๋จผ์ € ๋ช…ํ™•ํžˆ ์ •์˜ํ•ด์•ผ [1], ์˜์กด์„ฑ ์—ญ์ „ ์‹œ ์–ด๋–ค ์—ญํ• ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ฃผ์ž…ํ• ์ง€ ํšจ๊ณผ์ ์œผ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒํ˜ธ๋ณด์™„์  ๊ด€์ ์œผ๋กœ ์ดํ•ด๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [1, 2]. -- [[ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ (Testability in Architecture)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์˜์กด์„ฑ ์—ญ์ „์„ ํ†ตํ•ด ์ฝ”๋“œ ๋‚ด ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ๊ฒฉ๋ฆฌํ•จ์œผ๋กœ์จ, ํ…Œ์ŠคํŠธ ๋”๋ธ”(Test Double)์„ ์ฃผ์ž…ํ•ด ๊ณ ๋ฆฝ๋œ ์ƒํƒœ์—์„œ ์ˆœ์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [3, 4, 6]. - ---- -*Last updated: 2026-05-02* -## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) -- **์ •๋ณด ์ƒํƒœ:** verified -- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A -- **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. - -## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) -- **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** [[แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„‹แ…งแ†จแ„Œแ…ฅแ†ซ (Dependency Inversion).md]] -- **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE -- **์ฒ˜๋ฆฌ ์ด์œ :** ๊ธฐ์กด ๋ฌธ์„œ ๋‚ด์šฉ ๋ณด๊ฐ• ๋ฐ v3.1 ํ‘œ์ค€ ์ ์šฉ diff --git a/10_Wiki/Topics/02_Architecture_Principles/ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture).md b/10_Wiki/Topics/02_Architecture_Principles/ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture).md deleted file mode 100644 index ed6a3d5d..00000000 --- a/10_Wiki/Topics/02_Architecture_Principles/ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture).md +++ /dev/null @@ -1,67 +0,0 @@ ---- -id: P-REINFORCE-WIKI-9A9A2669 -category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" -confidence_score: 0.95 -tags: ['ํด๋ฆฐ-์•„ํ‚คํ…์ฒ˜-(clean-architecture)', 'ํ—ฅ์‚ฌ๊ณ ๋‚ -์•„ํ‚คํ…์ฒ˜-(hexagonal-architecture)', '๊ณ„์ธตํ˜•-์•„ํ‚คํ…์ฒ˜-(layered-architecture)', '์˜์กด์„ฑ-์—ญ์ „-์›์น™-(dependency-inversion-principle)', '๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค-์•„ํ‚คํ…์ฒ˜-(microservices-architecture)', 'architecture-principles'] -last_reinforced: 2026-05-02 ---- - -# [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - -## ๐Ÿ“Œ Brief Summary -๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด(Robert C. Martin)์ด ๋Œ€์ค‘ํ™”ํ•œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์—ฌ๋Ÿฌ ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋™์‹ฌ์› ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค [1]. ์ด ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ ๋ชฉ์ ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI, ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๊ธฐ์ˆ  ์š”์†Œ๋กœ๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ฒฉ๋ฆฌํ•˜๊ณ  ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [1, 2]. ์˜์กด์„ฑ์€ ํ•ญ์ƒ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ๋งŒ ํ–ฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ์—„๊ฒฉํ•œ ๊ทœ์น™์„ ์ ์šฉํ•˜์—ฌ, ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ธฐ์ˆ  ๋…๋ฆฝ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๋›ฐ์–ด๋‚œ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [3]. - -## ๐Ÿ“– Core Content -- **๋™์‹ฌ์› ๊ตฌ์กฐ์™€ 4๊ฐ€์ง€ ๊ณ„์ธต**: ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 4๊ฐœ์˜ ๋™์‹ฌ์› ๊ณ„์ธต์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. - - **์—”ํ‹ฐํ‹ฐ(Entities)**: ๊ฐ€์žฅ ์•ˆ์ชฝ์— ์œ„์น˜ํ•˜๋ฉฐ ๊ธฐ์ˆ ์ด๋‚˜ ํŠน์ • ์œ ์Šค์ผ€์ด์Šค์— ์–ฝ๋งค์ด์ง€ ์•Š๋Š” ํ•ต์‹ฌ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค [2]. - - **์œ ์Šค์ผ€์ด์Šค(Use Cases)**: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠนํ™”๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ํฌํ•จํ•˜๋ฉฐ, ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜ค๊ฐ€๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์กฐ์œจํ•ฉ๋‹ˆ๋‹ค [2]. - - **์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Œ‘ํ„ฐ(Interface Adapters)**: ์œ ์Šค์ผ€์ด์Šค๋‚˜ ์—”ํ‹ฐํ‹ฐ์— ๊ฐ€์žฅ ํŽธ๋ฆฌํ•œ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์›น, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI ๋“ฑ์˜ ์™ธ๋ถ€ ๊ธฐ๊ด€์ด ์š”๊ตฌํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [2]. - - **ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋“œ๋ผ์ด๋ฒ„(Frameworks and Drivers)**: ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ ๊ณ„์ธต์œผ๋กœ, ์›น ํ”„๋ ˆ์ž„์›Œํฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ ๋“ฑ์˜ ์™ธ๋ถ€ ๋„๊ตฌ์™€ ๊ธฐ์ˆ ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [2]. -- **์˜์กด์„ฑ ๊ทœ์น™(Dependency Rule)**: ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™์€ ์˜์กด์„ฑ์ด ๋ฐ˜๋“œ์‹œ '๋ฐ”๊นฅ์ชฝ์—์„œ ์•ˆ์ชฝ์œผ๋กœ๋งŒ' ํ–ฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [3, 4]. ์™ธ๋ถ€ ๊ณ„์ธต์€ ๋‚ด๋ถ€ ๊ณ„์ธต์— ์˜์กดํ•˜์ง€๋งŒ, ๋‚ด๋ถ€ ๊ณ„์ธต์€ ์™ธ๋ถ€์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹์ด๋‚˜ ๊ธฐ์ˆ  ๊ตฌํ˜„์„ ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค [3, 5]. -- **๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜ ํ–ฅ์ƒ**: ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ๋„๋ฉ”์ธ ๋กœ์ง์„ ๊ฒฉ๋ฆฌํ•˜์—ฌ ๋ฐฉ์–ด์ ์ธ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค [5]. ์ž…๋ ฅ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋Š” ์–ด๋Œ‘ํ„ฐ ๊ณ„์ธต์— ์ง‘์ค‘๋˜์–ด ์•…์˜์ ์ธ ํŽ˜์ด๋กœ๋“œ๋‚˜ SQL ์ธ์ ์…˜์˜ ์œ„ํ—˜์„ ์ค„์ด๊ณ  ํ•ต์‹ฌ ๋กœ์ง์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค [5]. ๋˜ํ•œ, ์กฐ์ •๋œ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ†ตํ•ด GDPR์ด๋‚˜ HIPAA์™€ ๊ฐ™์€ ๊ทœ์ • ์ค€์ˆ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‰ฝ๊ฒŒ ์ถฉ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. -- **๋„๋ฉ”์ธ ์ค‘์‹ฌ(Domain-centric)์˜ ๊ตฌ์กฐ**: ๊ธฐ์กด์˜ ์ „ํ†ต์ ์ธ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)๊ฐ€ ํ•˜ํ–ฅ์‹(Presentation โ†’ Business โ†’ Database)์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค๋ฉด, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์ด ์ค‘์‹ฌ์ด ๋˜์–ด ์–‘์ชฝ ๊ธฐ์ˆ  ์š”์†Œ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋ฐ›๋Š” ๊ตฌ์กฐ(Presentation โ†’ Business โ† Database)๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค [7]. - -## โš–๏ธ Trade-offs & Caveats -- **๊ณผ๋„ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณต์žก์„ฑ**: ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ๋Š” ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ํฐ ์ด์ ์„ ์ฃผ์ง€๋งŒ, ๋‹จ์ˆœํ•œ ํ”„๋กœ์ ํŠธ๋‚˜ ์Šคํƒ€ํŠธ์—…์˜ ๋น ๋ฅธ MVP(Minimum Viable Product) ๊ฐœ๋ฐœ์— ์ ์šฉํ•˜๊ธฐ์—๋Š” ์ดˆ๊ธฐ ์„ค์ •๊ณผ ์—„๊ฒฉํ•œ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ๊ณผ๋„ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [8-10]. -- **๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ ์ฆ๊ฐ€**: ๊ฐ ๊ณ„์ธต๋งˆ๋‹ค ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(๋˜๋Š” ๊ฐ’ ๊ฐ์ฒด)์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ๋ณ€ํ™˜(Mapping)ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ดˆ๊ธฐ์—๋Š” ํŒจํ‚ค์ง€๋งˆ๋‹ค ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์œ ์‚ฌํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(Boilerplate) ์ฝ”๋“œ๊ฐ€ ๋‹ค์ˆ˜ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. -- **๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ **: ์ถ”์ƒํ™”, ๋””์ž์ธ ํŒจํ„ด ๋“ฑ์— ๋Œ€ํ•œ ๋†’์€ ์ดํ•ด๋„์™€ ์›์น™์„ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•œ ์—„๊ฒฉํ•œ ๊ทœ์œจ์ด ์š”๊ตฌ๋˜๋ฏ€๋กœ, ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ์ฃผ๋‹ˆ์–ด ํŒ€์—๊ฒŒ๋Š” ๋„์ž…๊ณผ ์œ ์ง€๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 11]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ (Hexagonal Architecture)]] - - ์—ฐ๊ฒฐ ์ด์œ : ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ(Ports and Adapters) ๊ฐœ๋…์„ ์ˆ˜์šฉํ•˜๊ณ  ๋” ๊ตฌ์ฒดํ™”ํ•œ ํ˜•ํƒœ์ด๋ฉฐ, ์™ธ๋ถ€ ์ธํ”„๋ผ๋กœ๋ถ€ํ„ฐ ํ•ต์‹ฌ ๋กœ์ง์„ ๊ฒฉ๋ฆฌํ•œ๋‹ค๋Š” ์ฒ ํ•™์„ ์ง์ ‘์ ์œผ๋กœ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค [1, 12]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์–ด๋–ป๊ฒŒ ์™ธ๋ถ€ ์„ธ๊ณ„์˜ ๋ณ€๊ฒฝ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ, API ํ†ต์‹  ๋ฐฉ์‹ ๋ณ€๊ฒฝ)์—๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”์–ด๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ํ”Œ๋Ÿฌ๊ทธ ์•ค ํ”Œ๋ ˆ์ด(Plug-and-play) ๋ฐฉ์‹์˜ ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13]. -- [[๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Layered Architecture)]] - - ์—ฐ๊ฒฐ ์ด์œ : ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ทน๋ณตํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ์ (์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ฅธ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„์‚ฐ)์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๋Œ€์กฐ๊ตฐ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค [7, 8, 14]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งคํฌ๋กœ ๊ด€์ (ํŒ€ ๋ฐ ์กฐ์ง ๊ตฌ์กฐ ๋งคํ•‘)์—์„œ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ๊ณผ, ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋ ˆ์ด์–ด ๋‚ด๋ถ€๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๋งˆ์ดํฌ๋กœ ๊ด€์  ์„ค๊ณ„์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 16]. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] -- [[์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (Dependency Inversion Principle)]] - - ์—ฐ๊ฒฐ ์ด์œ : ์™ธ๋ถ€ ์–ด๋Œ‘ํ„ฐ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)๊ฐ€ ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค(๋„๋ฉ”์ธ)์— ์˜์กดํ•˜๋„๋ก ์˜์กด์„ฑ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด(Inversion), ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ์ธ '์˜์กด์„ฑ ๊ทœ์น™'์„ ์ฝ”๋“œ๋กœ ์‹คํ˜„์‹œํ‚ค๋Š” ์›๋ฆฌ์ž…๋‹ˆ๋‹ค [17, 18]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ชฝ์— ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„์€ ์ธํ”„๋ผ ์˜์—ญ์— ๋‘ ์œผ๋กœ์จ ๊ฒฐํ•ฉ๋„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทน์ ์œผ๋กœ ๋‚ฎ์ถ”๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Deeper Research Questions -- ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•  ๋•Œ ๊ฐ ๊ณ„์ธต์„ ํ†ต๊ณผํ•˜๋ฉฐ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ์ฒด ๋งคํ•‘(Mapping) ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ๊ณ„์ธต์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์‹ค์šฉ์ ์ธ ์„ค๊ณ„ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -- ๋Œ€๊ทœ๋ชจ ๋ณต์žก์„ฑ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ง„ '๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค' ๋‚ด๋ถ€์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ๋ฐ ๊ฐœ๋ฐœ ์†๋„ ์ธก๋ฉด์—์„œ ํ•ญ์ƒ ํ•ฉ๋ฆฌ์ ์ธ๊ฐ€? (๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์™€ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฐํ•ฉ ํ•œ๊ณ„) -- ์Šคํƒ€ํŠธ์—… ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์œ„ํ•ด ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋กœ ์‹œ์ž‘ํ•œ ์‹œ์Šคํ…œ์„ ์‹œ์Šคํ…œ ์„ฑ์žฅ์— ๋งž์ถฐ ์ ์ง„์ ์œผ๋กœ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP) ๊ตฌํ˜„ ์‹œ DI(Dependency Injection) ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์˜์กด์ด ์•„ํ‚คํ…์ฒ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋…๋ฆฝ์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ๋Š” ๋”œ๋ ˆ๋งˆ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์™ธ๋ถ€ API ๊ฐ™์€ ์„ธ๋ถ€ ๊ตฌํ˜„ ๊ธฐ์ˆ ์ด ์ „ํ˜€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ์—”ํ‹ฐํ‹ฐ์™€ ์œ ์Šค์ผ€์ด์Šค๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ์ถ•ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ตฌ์ฒด์  ์‚ฌ๋ก€๋Š” ์–ด๋– ํ•œ๊ฐ€? - -### Practical Application Contexts -- **Implementation:** ์ธํ”„๋ผ ์„ค์ • ์ „์ด๋ผ๋„ ์—”ํ‹ฐํ‹ฐ์™€ ์œ ์Šค์ผ€์ด์Šค๋ฅผ ๋จผ์ € ์ฝ”๋”ฉํ•˜๊ณ , ์ธ๋ฉ”๋ชจ๋ฆฌ(in-memory) ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ ๋กœ์ง์— ๋Œ€ํ•œ ์ˆœ์ˆ˜ํ•œ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [19]. -- **System Design:** ๋ณด์•ˆ ๋ฐ ๊ฐ์‚ฌ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋†’์€ ์˜๋ฃŒ ๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ(HIPAA ์ค€์ˆ˜ ๋“ฑ)์ด๋‚˜ ๊ธ€๋กœ๋ฒŒ ๊ธˆ์œต ๋ฑ…ํ‚น ํ”Œ๋žซํผ ์„ค๊ณ„ ์‹œ, ๊ทœ์ œ ๋กœ์ง๊ณผ ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ค‘์•™ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ ๊ทน ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค [5, 6, 20]. -- **Operation / Maintenance:** ์„œ๋น„์Šค ์ค‘์ธ ์‹œ์Šคํ…œ์˜ UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜(์˜ˆ: React์—์„œ Angular๋กœ), ๊ธฐ์กด ์ƒ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜คํ”ˆ์†Œ์Šค(์˜ˆ: Oracle์—์„œ PostgreSQL)๋กœ ์ด๊ด€ํ•ด์•ผ ํ•  ๋•Œ, ๋‚ด๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ˆ˜์ • ์—†์ด ์ตœ์™ธ๊ณฝ ์–ด๋Œ‘ํ„ฐ๋งŒ ๊ต์ฒดํ•˜์—ฌ ์•ˆ์ •์ ์ธ ์šด์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋•์Šต๋‹ˆ๋‹ค [3, 20, 21]. -- **Learning Path:** ๋‹จ์ˆœ MVC ๋˜๋Š” ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ํ•œ๊ณ„๋ฅผ ๊ฒฝํ—˜ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ SOLID ์›์น™(ํŠนํžˆ ์˜์กด์„ฑ ์—ญ์ „)์˜ ํšจ์šฉ์„ฑ์„ ๊นจ๋‹ซ๊ณ , ์œ ์—ฐํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ณ ๊ธ‰ ๊ณผ์ •์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. -- **My Project Relevance:** ๋‚˜์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žฅ๊ธฐ์ ์ธ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๊ณ ๋„๋กœ ๋ณต์žกํ•  ๊ฒฝ์šฐ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋งŒ์•ฝ ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ๊ธฐ๋Šฅ ๊ฒ€์ฆ์ด ๋ชฉํ‘œ์ธ ์ดˆ๊ธฐ MVP ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ๋„์ž…์ด ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์ผ ์ˆ˜ ์žˆ์–ด ์‹ ์ค‘ํ•œ ํŒ๋‹จ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [9, 22]. - -### Adjacent Topics -- [[๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (Microservices Architecture)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์‹œ์Šคํ…œ์„ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋กœ ๋ถ„ํ• ํ•œ ๋’ค, ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ง€๋‹Œ ๊ฐœ๋ณ„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค '๋‚ด๋ถ€'์˜ ๊ฒฌ๊ณ ํ•จ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ํด๋ฆฐ/ํ—ฅ์‚ฌ๊ณ ๋‚  ์„ค๊ณ„ ์‚ฌ์ƒ์„ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉํ•˜๋Š”์ง€ ํ™•์žฅํ•˜์—ฌ ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [21]. -- [[๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (Domain-Driven Design, DDD)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ์ฝ”์–ด์ธ '์—”ํ‹ฐํ‹ฐ'์™€ '์œ ์Šค์ผ€์ด์Šค'๋ฅผ ํ’๋ถ€ํ•˜๊ณ  ์œ ์˜๋ฏธํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด, ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ(Bounded Context)๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ๊ธฐ๋ฒ•์œผ๋กœ ํ•™์Šต์ด ์ด์–ด์ง‘๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-05-02* \ No newline at end of file diff --git a/10_Wiki/Topics/02_Software_Engineering/์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ (SAST).md b/10_Wiki/Topics/02_Software_Engineering/์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ (SAST).md deleted file mode 100644 index 2edeff49..00000000 --- a/10_Wiki/Topics/02_Software_Engineering/์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ (SAST).md +++ /dev/null @@ -1,86 +0,0 @@ ---- -id: P-REINFORCE-WIKI-66B2389E -title: "แ„Œแ…ฅแ†ผแ„Œแ…ฅแ†จ แ„‹แ…ขแ„‘แ…ณแ†ฏแ„…แ…ตแ„แ…ฆแ„‹แ…ตแ„‰แ…งแ†ซ แ„‡แ…ฉแ„‹แ…กแ†ซ แ„แ…ฆแ„‰แ…ณแ„แ…ณ (SAST)" -category: "10_Wiki/๐Ÿ’ก Topics/02_Software_Engineering" -status: verified -canonical_id: "" -aliases: [] -duplicate_of: "" -source_trust_level: A -confidence_score: 0.95 -tags: ['SAST'] -raw_sources: ["Datacollector_MAC/out_wiki/แ„Œแ…ฅแ†ผแ„Œแ…ฅแ†จ แ„‹แ…ขแ„‘แ…ณแ†ฏแ„…แ…ตแ„แ…ฆแ„‹แ…ตแ„‰แ…งแ†ซ แ„‡แ…ฉแ„‹แ…กแ†ซ แ„แ…ฆแ„‰แ…ณแ„แ…ณ (SAST).md"] -last_reinforced: 2026-05-02 -github_commit: "" ---- - -# [[แ„Œแ…ฅแ†ผแ„Œแ…ฅแ†จ แ„‹แ…ขแ„‘แ…ณแ†ฏแ„…แ…ตแ„แ…ฆแ„‹แ…ตแ„‰แ…งแ†ซ แ„‡แ…ฉแ„‹แ…กแ†ซ แ„แ…ฆแ„‰แ…ณแ„แ…ณ (SAST)]] - -## ๐Ÿ“Œ Brief Summary -์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ(SAST, Static Application Security Testing)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ์ƒํƒœ(at rest)์—์„œ ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์™€ ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•˜์—ฌ ์˜ค๋ฅ˜, ๋ณด์•ˆ ์ทจ์•ฝ์  ๋ฐ ์ฝ”๋”ฉ ๋น„ํšจ์œจ์„ฑ์„ ์ž๋™์œผ๋กœ ์ฐพ์•„๋‚ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ถ„์„ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค [1-3]. ์ด ๊ธฐ์ˆ ์€ ๊ฐœ๋ฐœ ์ˆ˜๋ช… ์ฃผ๊ธฐ(SDLC) ์ดˆ๊ธฐ์— ๋ฒ„๊ทธ์™€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํŒจํ„ด์„ ํƒ์ง€ํ•˜์—ฌ, ๊ฒฐํ•จ์ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์„ ์ œ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค [1, 4, 5]. - -## ๐Ÿ“– Core Content -* **์ž‘๋™ ๋ฐฉ์‹ ๋ฐ ๋ชฉ์ **: SAST ๋„๊ตฌ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ์—†์ด ์ •์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜, SQL ์ธ์ ์…˜, ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…(XSS), ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์™€ ๊ฐ™์€ ๋ณด์•ˆ ๊ฒฐํ•จ๊ณผ ์ฝ”๋“œ ์Šค๋ฉœ(Code smell)์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค [1, 3, 6]. ์ผ๋ถ€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋„๊ตฌ๋Š” ์ทจ์•ฝ์ ์„ ์ •๋ฐ€ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ํ๋ฆ„(Data-flow) ๋ถ„์„ ๋ฐ ๊ธฐํ˜ธ ์‹คํ–‰(Symbolic execution)๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [7]. -* **์ฃผ์š” ์ด์ **: ๋ณด์•ˆ ๊ฒฐํ•จ์„ ๋ฐฐํฌ ์ „(์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„)์— ๋ฐœ๊ฒฌํ•จ์œผ๋กœ์จ, ๋ฆด๋ฆฌ์Šค ์ดํ›„์— ์ทจ์•ฝ์ ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 5]. ๋˜ํ•œ, ๊ฐœ๋ฐœํŒ€ ์ „์ฒด์— ์ผ๊ด€๋œ ์ฝ”๋”ฉ ํ‘œ์ค€์„ ์ ์šฉํ•˜์—ฌ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ, PCI DSS, HIPAA, GDPR๊ณผ ๊ฐ™์€ ์‚ฐ์—… ๊ทœ์ œ ๋ฐ ๋ณด์•ˆ ์ปดํ”Œ๋ผ์ด์–ธ์Šค(Compliance) ์ค€์ˆ˜ ์š”๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๊ฐ์‚ฌ ์ฆ๊ฑฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [4, 5, 8]. -* **AI ๋ฐ ์ตœ์‹  ๊ธฐ์ˆ ๊ณผ์˜ ๊ฒฐํ•ฉ**: ์ตœ์‹  SAST ๋„๊ตฌ๋“ค์€ ์ƒ์„ฑํ˜• AI ๋ฐ ๋จธ์‹ ๋Ÿฌ๋‹ ๊ธฐ์ˆ ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST) ๋ถ„์„์„ ๊ณ ๋„ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [9-11]. ์ด๋ฅผ ํ†ตํ•ด ์˜คํƒ(False Positives)์„ ์ค„์ด๊ณ , ์ต์Šคํ”Œ๋กœ์ž‡ ๊ฐ€๋Šฅ์„ฑ(Exploitability)์ด ๋†’์€ ์œ„ํ—˜์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋ฉฐ, ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR) ์ƒ์—์„œ ์ทจ์•ฝ์ ์„ ์ž๋™์œผ๋กœ ์ˆ˜์ •(Autofix)ํ•˜๋Š” ์ œ์•ˆ์„ ์ œ๊ณตํ•˜์—ฌ ๋ณด์•ˆ ์ ๊ฒ€์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [9, 10, 12]. -* **์›Œํฌํ”Œ๋กœ์šฐ ํ†ตํ•ฉ (DevSecOps)**: ์šฐ์ˆ˜ํ•œ SAST ๋„๊ตฌ๋Š” ๊ฐœ๋ฐœ์ž์˜ IDE, ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(GitHub ๋“ฑ), CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ๋งค๋„๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ๊ฐœ๋ฐœ ํ๋ฆ„์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹ค์‹œ๊ฐ„ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ(Quality gates) ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [13-15]. - -## โš–๏ธ Trade-offs & Caveats -* **์˜คํƒ๋ฅ (False Positives)๊ณผ ๊ฒฝ๊ณ  ํ”ผ๋กœ**: ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„๋กœ ์ธํ•ด ์‹ค์ œ ์ทจ์•ฝ์ ์ด ์•„๋‹Œ ์ฝ”๋“œ๋ฅผ ์œ„ํ—˜์œผ๋กœ ์ž˜๋ชป ํƒ์ง€ํ•˜๋Š” ์˜คํƒ๋ฅ ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค [16, 17]. ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ ์˜คํƒ์€ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ๊ณ  ํ”ผ๋กœ(Alert fatigue)๋ฅผ ์œ ๋ฐœํ•˜๊ณ  ๋„๊ตฌ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๋ฉฐ ์ˆ˜์ • ์ž‘์—…์˜ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 17]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋„๊ตฌ์˜ ์ปจํ…์ŠคํŠธ ํ•„ํ„ฐ๋ง ๋ฐ AI ๊ธฐ๋ฐ˜์˜ ์šฐ์„ ์ˆœ์œ„ ์ง€์ • ๊ธฐ๋Šฅ์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค [12, 17]. -* **์Šค์บ” ์†๋„์™€ ์„ฑ๋Šฅ ํ•œ๊ณ„**: ๋ถ„์„์˜ ๊นŠ์ด์™€ ์ •๋ฐ€๋„๊ฐ€ ๋†’์„์ˆ˜๋ก ์ฝ”๋“œ ์Šค์บ”์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ ธ ๋นŒ๋“œ ์‹œ๊ฐ„๊ณผ ํŒŒ์ดํ”„๋ผ์ธ ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11, 17]. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœํŒ€์€ ์ •ํ™•๋„๋Š” ๋†’์ง€๋งŒ ๋А๋ฆฐ ์Šค์บ”(์˜ˆ์•ฝ ์Šค์บ”)๊ณผ, ๋น ๋ฅด์ง€๋งŒ ๊ฐ€๋ฒผ์šด ์‹ค์‹œ๊ฐ„ ์Šค์บ” ๋„๊ตฌ ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ๊ท ํ˜•(Trade-off)์„ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค [17]. -* **์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์˜ ๊ด€๋ฆฌ ๋น„์šฉ**: ๋งŽ์€ SAST ๋„๊ตฌ(์˜ˆ: Semgrep, Checkmarx)๋Š” ์กฐ์ง์˜ ํŠน์ˆ˜ํ•œ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๊ทœ์น™์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •์˜(Customization)ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [18, 19]. ํ•˜์ง€๋งŒ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€ํŒŒ๋ฅธ ํ•™์Šต ๊ณก์„ ๊ณผ ์ง€์†์ ์ธ ํŠœ๋‹ ์ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [11, 12, 20]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [์†Œํ”„ํŠธ์›จ์–ด ๋ณด์•ˆ ๋ถ„์„ ๊ธฐ์ˆ ] -* [[๋™์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ (DAST)]] - * ์—ฐ๊ฒฐ ์ด์œ : SAST๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ •์ ์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ๋ฐ˜๋ฉด, DAST๋Š” ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š” ์ƒํ˜ธ ๋ณด์™„์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ •์  ๋ถ„์„๋งŒ์œผ๋กœ๋Š” ์ฐพ์•„๋‚ผ ์ˆ˜ ์—†๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์˜ ๊ฒฐํ•จ๊ณผ ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ทจ์•ฝ์ ์„ ํ†ตํ•ฉ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. -* [[์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ๋ถ„์„ (SCA)]] - * ์—ฐ๊ฒฐ ์ด์œ : ํ˜„๋Œ€์˜ ๋ณด์•ˆ ํ”Œ๋žซํผ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” SAST์™€ ์˜คํ”ˆ ์†Œ์Šค ์ข…์†์„ฑ ๋ฐ ๋ผ์ด์„ ์Šค๋ฅผ ๋ถ„์„ํ•˜๋Š” SCA๋ฅผ ํ•จ๊ป˜ ๊ฒฐํ•ฉํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ „์ฒด ์œ„ํ—˜์„ ๊ฐ€์‹œํ™”ํ•ฉ๋‹ˆ๋‹ค [7, 19, 21]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฐœ๋ฐœํŒ€์ด ์ œ์–ดํ•˜๋Š” 1์ž ์ฝ”๋“œ์™€ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•œ ๊ณต๊ธ‰๋ง ์œ„ํ—˜์ด ์ฝ”๋“œ๋ฒ ์ด์Šค ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ์ด์ฒด์ ์œผ๋กœ ๋ฐฉ์–ด๋˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 19]. - -#### [๋„๊ตฌ ๋ฐ ๊ฐœ๋ฐœ ์ธํ”„๋ผ] -* [[CI/CD ํŒŒ์ดํ”„๋ผ์ธ]] - * ์—ฐ๊ฒฐ ์ด์œ : SAST ๋„๊ตฌ๊ฐ€ ์‹ค์งˆ์ ์ธ ๊ฐ€์น˜๋ฅผ ๋ฐœํœ˜ํ•˜๋ ค๋ฉด CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด์— ์ž๋™ํ™”๋œ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ(Quality gate)๋กœ ํ†ตํ•ฉ๋˜์–ด, ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋˜๊ธฐ ์ „์— ์‚ฌ์ „ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [13, 22-24]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณด์•ˆ ๊ฒ€์‚ฌ๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด ๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค์— ๋ณ‘๋ชฉ์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ ์ž๋™ํ™”๋œ 'DevSecOps' ๋ฌธํ™”๋ฅผ ํ™•๋ฆฝํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13, 24]. -* [[AI ์ฝ”๋“œ ๋ฆฌ๋ทฐ (AI Code Review)]] - * ์—ฐ๊ฒฐ ์ด์œ : ์ •์  ๋ถ„์„ ์—”์ง„์€ ์ตœ๊ทผ ์ƒ์„ฑํ˜• AI ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋„๊ตฌ(์˜ˆ: CodeRabbit, Qodo)์™€ ๊ฒฐํ•ฉ๋˜์–ด, ๋‹จ์ˆœํ•œ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ๋ฅผ ๋„˜์–ด ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ชจ๋“ˆ์„ฑ, ์ปจํ…์ŠคํŠธ ์ •ํ•ฉ์„ฑ์„ ํ‰๊ฐ€ํ•˜๊ณ  ํ•ด๊ฒฐ์ฑ…์„ ์ž๋™ ์ œ์•ˆํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [6, 9, 10]. - * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์ž๋™ํ™”๋œ AI๊ฐ€ AST ๋ถ„์„ ๋ฐ ์ •์  ๋ณด์•ˆ ๋ฃฐ์„ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ•˜๊ณ  ๋ฆฌ๋ทฐ ์ƒ์‚ฐ์„ฑ์„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 25]. - -### Deeper Research Questions - -* SAST์™€ DAST, ๊ทธ๋ฆฌ๊ณ  SCA(์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ๋ถ„์„)๋ฅผ ๊ฒฐํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์€ ๋ณต์žกํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ์ž‘์šฉํ•˜๋Š”๊ฐ€? -* ์ˆ˜๋ฐฑ๋งŒ ๋ผ์ธ์— ๋‹ฌํ•˜๋Š” ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์—์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ SAST ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋นŒ๋“œ ์†๋„ ์ €ํ•˜ ๋ฐ ๋ฆฌ์†Œ์Šค ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -* ์ฝ”๋“œ ์†์„ฑ ๊ทธ๋ž˜ํ”„(Code Property Graph) ๋ฐ AI ์ถ”๋ก  ๊ธฐ์ˆ ์€ ๊ธฐ์กด ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„์˜ ๊ณ ์งˆ์  ๋ฌธ์ œ์ธ '์˜คํƒ(False Positive)'์„ ์–ด๋–ค ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์–ต์ œํ•˜๊ณ  ์žˆ๋Š”๊ฐ€? -* ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ๊ทœ์น™ ์ค€์ˆ˜์™€ ๊ฐœ๋ฐœ์ž์˜ ๋น ๋ฅธ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ ์‚ฌ์ด์˜ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ด์ƒ์ ์ธ ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๋ฐ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ(Quality Gate) ์„ค๊ณ„ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? -* ์‚ฌ์šฉ์ž ์ •์˜ ์Šค์บ” ๊ทœ์น™(Custom Rules)์„ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ(์˜ˆ: Semgrep)๋ฅผ ๋„์ž…ํ•  ๋•Œ, ์œ ์ง€๋ณด์ˆ˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋ฉด์„œ ์กฐ์ง์˜ ํŠนํ™”๋œ ๋ณด์•ˆ ์ •์ฑ…์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -* **Implementation:** ์‹ ๊ทœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ๋กœ์ปฌ IDE๋‚˜ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๋‹จ๊ณ„์— SAST ํ™•์žฅ์„ ์—ฐ๋™ํ•˜์—ฌ, ์ฝ”๋“œ ๋ณ‘ํ•ฉ ์ „์— SQL ์ธ์ ์…˜, ๋ฏผ๊ฐ ์ •๋ณด ๋…ธ์ถœ ๋“ฑ์˜ ์น˜๋ช…์  ๊ฒฐํ•จ์„ ์กฐ๊ธฐ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. -* **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํŒŒ์ดํ”„๋ผ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ์ฝ”๋“œ ์ €์žฅ์†Œ(GitHub, GitLab ๋“ฑ)์˜ ์•ก์…˜/ํ›…(Hooks)์— ์ •์  ๋ถ„์„ ์—”์ง„์„ ์‚ฝ์ž…ํ•˜์—ฌ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‚ด์žฌํ™”๋œ(Shift-left) DevSecOps ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. -* **Operation / Maintenance:** ๊ทœ์ œ๊ฐ€ ์—„๊ฒฉํ•œ ์ธํ”„๋ผ(๊ธˆ์œต, ํ—ฌ์Šค์ผ€์–ด ๋“ฑ)์—์„œ ์šด์˜ ์ค‘์ธ ๊ฑฐ๋Œ€ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„ ๋ฐ ๋ณด์•ˆ ์œ„ํ—˜ ์ˆ˜์ค€์„ ๊ณ„๋Ÿ‰ํ™”ํ•˜๊ณ , ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์ค€์ˆ˜ ์ฆ์ (Audit) ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์‚ฐ์ถœํ•˜๋Š” ๋ฐ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. -* **Learning Path:** ๋‚ฏ์„ค๊ณ  ๋ฐฉ๋Œ€ํ•œ ์‹œ์Šคํ…œ์„ ์ฒ˜์Œ ์˜จ๋ณด๋”ฉํ•  ๋•Œ, SAST ๋„๊ตฌ๊ฐ€ ๋ฑ‰์–ด๋‚ด๋Š” ์˜์กด์„ฑ ๊ฒฝ๊ณ ๋‚˜ ๊ตฌ์กฐ์  ๋ณต์žก์„ฑ ๋ณด๊ณ ์„œ๋ฅผ ์—ญ์œผ๋กœ ์ถ”์ ํ•จ์œผ๋กœ์จ ์•„ํ‚คํ…์ฒ˜์˜ ์ทจ์•ฝํ•œ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋‚˜ ๋ ˆ๊ฑฐ์‹œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์ง€ํ˜•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -* **My Project Relevance:** ํ˜„์žฌ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ๋‹ค์ˆ˜์˜ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—ฐ๋™ ๋ฐ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์กด์žฌํ•œ๋‹ค๋ฉด, SAST ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ๋ˆ„์ˆ˜์™€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ฝ”๋“œ๋ฅผ ๊ฐ€์‹œํ™”ํ•˜๊ณ , ์•ˆ์ „ํ•˜๊ณ  ๊ตฌ์กฐํ™”๋œ ์ฝ”๋”ฉ ๊ฐ€์ด๋“œ๋ฅผ ์ˆ˜๋ฆฝํ•˜๋Š” ๋ฐ ์ง์ ‘ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### Adjacent Topics - -* [[์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ (AST, Abstract Syntax Tree)]] - * ํ™•์žฅ ๋ฐฉํ–ฅ: ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ…์ŠคํŠธ ํ˜•ํƒœ์—์„œ ๊ตฌ์กฐ์  ๋ชจ๋ธ๋กœ ์ปดํŒŒ์ผ ๋ฐ ํŒŒ์‹ฑ๋˜๋Š”์ง€ ์ดํ•ดํ•จ์œผ๋กœ์จ, ์ฝ”๋“œ ๋ถ„์„ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ทจ์•ฝ์  ํŒจํ„ด์„ ํƒ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ์›๋ฆฌ๋กœ ์ง€์‹์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -* [[๊ธฐ์ˆ ์  ๋ถ€์ฑ„ (Technical Debt)]] - * ํ™•์žฅ ๋ฐฉํ–ฅ: SAST๊ฐ€ ํฌ์ฐฉํ•˜๋Š” ์ฝ”๋“œ ๋ณต์žก์„ฑ๊ณผ ๊ตฌ์กฐ์  ๊ฒฐํ•จ์ด ๋‹จ์ˆœํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ๋„˜์–ด, ์žฅ๊ธฐ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ๊ฐœ๋ฐœ ๋ฏผ์ฒฉ์„ฑ์— ์–ด๋– ํ•œ ์žฌ๋ฌด์ ยท๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋กœ ์ž‘์šฉํ•˜๋Š”์ง€ ๋…ผ์˜๋ฅผ ์‹ฌํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ---- -*Last updated: 2026-05-02* -## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) -- **์ •๋ณด ์ƒํƒœ:** verified -- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A -- **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. - -## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) -- **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** [[แ„Œแ…ฅแ†ผแ„Œแ…ฅแ†จ แ„‹แ…ขแ„‘แ…ณแ†ฏแ„…แ…ตแ„แ…ฆแ„‹แ…ตแ„‰แ…งแ†ซ แ„‡แ…ฉแ„‹แ…กแ†ซ แ„แ…ฆแ„‰แ…ณแ„แ…ณ (SAST).md]] -- **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE -- **์ฒ˜๋ฆฌ ์ด์œ :** ๊ธฐ์กด ๋ฌธ์„œ ๋‚ด์šฉ ๋ณด๊ฐ• ๋ฐ v3.1 ํ‘œ์ค€ ์ ์šฉ diff --git a/10_Wiki/Topics/03_DevOps_Environment/CI-CD Pipeline.md b/10_Wiki/Topics/03_DevOps_Environment/CI-CD Pipeline.md deleted file mode 100644 index 4a444ae2..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/CI-CD Pipeline.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -id: P-REINFORCE-AUTO-WIKI-DEV-003 -category: "10_Wiki/๐Ÿ’ก Topics/Development" -confidence_score: 0.95 -tags: [development, ci-cd, automation, quality-gate, devops, p-reinforce] -last_reinforced: 2026-05-01 ---- - -# [[CI-CD Pipeline|CI-CD Pipeline]] - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> "์†Œํ”„ํŠธ์›จ์–ด์˜ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ์ „ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜์—ฌ, ์ธ๊ฐ„ ๋ฆฌ๋ทฐ์–ด๋ณด๋‹ค ๋จผ์ € ๊ฒฐํ•จ์„ ์ฐพ์•„๋‚ด๋Š” '๊ธฐ๊ณ„์  ํŒŒ์ˆ˜๊พผ'์ด์ž ๋ฐฐํฌ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์ธํ”„๋ผ." - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -CI-CD๋Š” ํ˜„๋Œ€์  ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ํ’ˆ์งˆ๊ณผ ์†๋„๋ฅผ ๋™์‹œ์— ์žก๋Š” ํ•ต์‹ฌ ์—”์ง„์ž…๋‹ˆ๋‹ค. - -1. **์ž๋™ํ™”๋œ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ (Quality Gates)**: - * **CI (Continuous Integration)**: ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ๋งˆ๋‹ค ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฐํ„ฐ, SAST, SCA ๋“ฑ์ด ํ†ตํ•ฉ๋˜์–ด ์ธ๊ฐ„ ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ๋„๋‹ฌํ•˜๊ธฐ ์ „ ๊ธฐ์ดˆ ๊ฒฐํ•จ์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. - * **CD (Continuous Delivery/Deployment)**: ๊ฒ€์ฆ๋œ ์ฝ”๋“œ๋ฅผ ์Šคํ…Œ์ด์ง•์ด๋‚˜ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ ์ž๋™ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. -2. **๋ณ‘ํ•ฉ ์ฐจ๋‹จ (Blocking Merges)**: - * ์ž๋™ํ™” ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๋ณด์•ˆ ์Šค์บ”์—์„œ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ์˜ ๋ณ‘ํ•ฉ์„ ์‹œ์Šคํ…œ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜์—ฌ ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. -3. **์ธ์ง€ ๋ถ€ํ•˜ ๊ฐ์†Œ**: - * ์‚ฌ์†Œํ•œ ์Šคํƒ€์ผ ์œ„๋ฐ˜์ด๋‚˜ ์˜คํƒ€ ๋“ฑ์€ ๊ธฐ๊ณ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ์ธ๊ฐ„ ๋ฆฌ๋ทฐ์–ด๋Š” ์•„ํ‚คํ…์ฒ˜์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐ™์€ ๊ณ ์ฐจ์›์  ๊ฒ€ํ† ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) -- **ํŒŒ์ดํ”„๋ผ์ธ ์ง€์—ฐ์˜ ์—ญ์„ค**: ํ’ˆ์งˆ ๊ฒ€์ฆ์„ ์œ„ํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ๋‹จ๊ณ„(๋ฌด๊ฑฐ์šด E2E ํ…Œ์ŠคํŠธ ๋“ฑ)๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํŒŒ์ดํ”„๋ผ์ธ ์†๋„๊ฐ€ ๋А๋ ค์ ธ ๊ฐœ๋ฐœ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ์ €ํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ฆ ๊ฐ•๋„์™€ ์‹คํ–‰ ์†๋„ ์‚ฌ์ด์˜ ์ •๊ตํ•œ ๋ฐธ๋Ÿฐ์‹ฑ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. -- **์ž๋™ํ™”์˜ ํ•œ๊ณ„**: CI-CD๋Š” ์ •ํ•ด์ง„ ํŒจํ„ด์€ ์ž˜ ์ฐพ์ง€๋งŒ ๋น„์ฆˆ๋‹ˆ์Šค์  ๋งฅ๋ฝ์ด๋‚˜ ์„ค๊ณ„์ƒ์˜ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋Š” ์žก์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ณ„์  ๊ฒ€์ฆ๊ณผ ์ธ๊ฐ„์˜ ์ •์„ฑ์  ๋ฆฌ๋ทฐ๊ฐ€ ๊ฒฐํ•ฉ๋œ ์ƒํ˜ธ ๋ณด์™„ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Shift-Left Security: ๋ณด์•ˆ ์ ๊ฒ€์„ CI ๋‹จ๊ณ„๋กœ ์•ž๋‹น๊ธฐ๋Š” ์ „๋žต. -- Automated Testing: ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•ต์‹ฌ ๊ด€๋ฌธ. -- Pull Request Workflow: CI-CD๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ง€์ . -- [[DevSecOps|DevSecOps]]: ๋ณด์•ˆ์ด ๋‚ด์žฌํ™”๋œ ์ž๋™ํ™” ์ฒ ํ•™. -- [[Infrastructure-as-Code-IaC|Infrastructure as Code (IaC]]: ์ธํ”„๋ผ ๋ฐฐํฌ์˜ ์ž๋™ํ™” ํ™•์žฅ. ---- diff --git a/10_Wiki/Topics/03_DevOps_Environment/Deployment_Final_Gate.md b/10_Wiki/Topics/03_DevOps_Environment/Deployment_Final_Gate.md deleted file mode 100644 index 307f3b06..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/Deployment_Final_Gate.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ๋ฐฐํฌ ํ”„๋กœํ† ์ฝœ ๋ฐ CI/CD ์ž๋™ํ™” -category: Software [[Architecture|Architecture]] -tags: [Deployment, CI/CD, [[GitHub Actions|GitHub Actions]], Vercel, DevOps] -created: 2026-04-20 ---- - -# [[Deployment_Final_Gate|Deployment_Final_Gate]] (๋ฐฐํฌ ๋ฐ ์ž๋™ํ™”) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ์ˆ˜๋™ ๋ฐฐํฌ๋Š” '์‹ค๋ฒ„ ๋ถˆ๋ ›'์ด ์•„๋‹ˆ๋ผ '์‹œํ•œํญํƒ„'์ด๋‹ค. ์ธ๊ฐ„์˜ ์†์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š” ์ž๋™ํ™”๋œ ๋ณด๊ธ‰๋กœ๋งŒ์ด ์‹œ์Šคํ…œ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **CI (Continuous Integration)**: - - ์ฝ”๋“œ๊ฐ€ ์ €์žฅ์†Œ์— ํ•ฉ์ณ์ง€๊ธฐ ์ „, ๋ฆฐํŠธ(Lint) ๊ฒ€์‚ฌ, ๋นŒ๋“œ ํ…Œ์ŠคํŠธ, ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ '์˜ค์—ผ๋œ ์ฝ”๋“œ'์˜ ์œ ์ž…์„ ์›์ฒœ ์ฐจ๋‹จํ•œ๋‹ค. -- **CD (Continuous Deployment)**: - - ๊ฒ€์ฆ๋œ ์ฝ”๋“œ๋ฅผ ์‹ค์„œ๋ฒ„์— ์ž๋™์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆํ•œ๋‹ค. `Vercel`, `Netlify` ๊ฐ™์€ ํ”Œ๋žซํผ์€ ๋ธŒ๋žœ์น˜๋ณ„ '๋ฏธ๋ฆฌ๋ณด๊ธฐ' ์ฃผ์†Œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ฐฐํฌ ์ „ ์ตœ์ข… ๊ฒ€์ˆ˜๋ฅผ ๋•๋Š”๋‹ค. -- **Environment Variables (๋ณด์•ˆ ํ™˜๊ฒฝ)**: - - `.env` ํŒŒ์ผ์„ ํ†ตํ•œ ๋ฏผ๊ฐ ์ •๋ณด ๊ฒฉ๋ฆฌ๋Š” ๊ธฐ๋ณธ ์ค‘์˜ ๊ธฐ๋ณธ์ด๋‹ค. ๊นƒํ—ˆ๋ธŒ์— API Key๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ๋…ธ์ถœ๋˜๋Š” ์ˆœ๊ฐ„, ๊ทธ ํ”„๋กœ์ ํŠธ๋Š” ๋ณด์•ˆ์ ์œผ๋กœ ์‚ฌ๋งํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฆ„์—†๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ๋ฌด์กฐ๊ฑด์ ์ธ '์ž๋™ ๋ฐฐํฌ'๊ฐ€ ๋Š˜ ์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค. ์šด์˜ ๋‹จ๊ณ„์—์„œ๋Š” '๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ'๋‚˜ '์นด๋‚˜๋ฆฌ ๋ฐฐํฌ'์ฒ˜๋Ÿผ ํŠธ๋ž˜ํ”ฝ์„ ์กฐ๊ธˆ์”ฉ ํ˜๋ ค๋ณด๋‚ด๋ฉฐ ์•ˆ์ •์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ณ ๊ธ‰ ์ „๋žต์ด ํ•„์š”ํ•˜๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[Modern_Environment_Ecosystem|Modern_Environment_Ecosystem]] , [[Collaboration_Governance|Collaboration_Governance]] -- Pre-requisite: [[React_Testing_Strategy|React_Testing_Strategy]] diff --git a/10_Wiki/Topics/03_DevOps_Environment/DevOps_Environment_Setup.md b/10_Wiki/Topics/03_DevOps_Environment/DevOps_Environment_Setup.md deleted file mode 100644 index 84e926dd..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/DevOps_Environment_Setup.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ (DevOps & Setup) -category: DevOps -tags: [DevOps, Environment, CI/CD, Process [[Management|Management]]] -created: 2026-04-20 ---- - -# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ - -## ๐ŸŽฏ ๊ฐœ์š” (Overview) -์ฝ”๋”ฉ ์™„์„ฑ๋„๋งŒํผ์ด๋‚˜ ์ค‘์š”ํ•œ **์‹คํ–‰ ํ™˜๊ฒฝ(Runtime Environment)**๊ณผ **์„ค์ • ํŒŒ์ผ(Configuration)**์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•๋ณดํ•˜์—ฌ, '๋‚ด ์ปดํ“จํ„ฐ์—์„  ๋˜๋Š”๋ฐ ์™œ ์ €๊ธฐ์„  ์•ˆ ๋˜์ง€?'๋ผ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. - -## ๐Ÿš€ ํ•„์ˆ˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (Checklist) -- **์˜์กด์„ฑ ๊ด€๋ฆฌ**: `npm install` ๋“ฑ ํŒจํ‚ค์ง€ ๋ฌด๊ฒฐ์„ฑ ํ™•์ธ. -- **๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์กฐ**: `index.html` ๋“ฑ ํ•„์ˆ˜ ์ง„์ž…์  ํŒŒ์ผ ์กด์žฌ ํ™•์ธ. -- **๋ณด์•ˆ ๋ฐ ๊ถŒํ•œ**: OS ๋ ˆ๋ฒจ์˜ ์‹คํ–‰ ์ •์ฑ…(`Execution Policy`) ๋ฐ ๊ถŒํ•œ ์„ค์ •. - -## ๐Ÿ’ก ๋ ˆ์Šจ ๋Ÿฐ (Lesson Learned) -> [!NOTE] -> **"์šด์˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ์ฝ”๋”ฉ ๋Šฅ๋ ฅ์˜ ์ ˆ๋ฐ˜์ด๋‹ค."** -> ๋…ผ๋ฆฌ์  ๋กœ์ง์˜ ์™„์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ๊ตฌ๋™๋˜๋Š” ๋ฌผ๋ฆฌ์  ์ธํ”„๋ผ ์„ค์ •์„ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์ž๋™ํ™”ํ•˜๋Š” ๋Šฅ๋ ฅ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. - -## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ -- [[Systemic_Simulation_Principles|Systemic_Simulation_Principles]] diff --git a/10_Wiki/Topics/03_DevOps_Environment/Engineering Metrics (DORA).md b/10_Wiki/Topics/03_DevOps_Environment/Engineering Metrics (DORA).md deleted file mode 100644 index 85a7e948..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/Engineering Metrics (DORA).md +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: P-REINFORCE-AUTO-WIKI-GOV-002 -category: "10_Wiki/๐Ÿ’ก Topics/04_Governance_Reliability" -confidence_score: 0.95 -tags: [governance, dora-metrics, engineering-metrics, performance, devops, cycle-time, p-reinforce] -last_reinforced: 2026-05-01 ---- - -# [[Engineering Metrics (DORA)|Engineering Metrics (DORA]] - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> "๋ฐ์ดํ„ฐ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ์ธ๋„ ์„ฑ๊ณผ(Delivery Performance)๋ฅผ ์ •๋Ÿ‰ํ™”ํ•˜๊ณ , ์—˜๋ฆฌํŠธ ํŒ€์˜ ๋ฒค์น˜๋งˆํฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ๋ณ‘๋ชฉ๊ณผ ๊ฐœ์„  ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋ง ํ‘œ์ค€ ์ง€ํ‘œ." - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -DORA ์ง€ํ‘œ๋Š” ๋ฐ๋ธŒ์˜ต์Šค(DevOps) ์—ฐ๊ตฌ๋ฅผ ํ†ตํ•ด ์ž…์ฆ๋œ ๊ณ ์„ฑ๊ณผ ํŒ€์˜ ํ•ต์‹ฌ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. - -1. **4๋Œ€ ํ•ต์‹ฌ ์ง€ํ‘œ**: - * **Deployment Frequency (DF)**: ๋ฐฐํฌ ๋นˆ๋„. - * **Lead Time for Changes (MLT)**: ์ฝ”๋“œ ์ปค๋ฐ‹๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„. - * **Change Failure Rate (CFR)**: ๋ฐฐํฌ ํ›„ ์‹คํŒจ์œจ. - * **Failed Service Recovery Time (MTTR)**: ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ณต๊ตฌ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„. -2. **์—˜๋ฆฌํŠธ ์„ฑ๊ณผ์ž (Elite Performers)์˜ ํŠน์ง•**: - * **PR ์‚ฌ์ด์ฆˆ ์ œํ•œ**: ์ฝ”๋“œ ๋ณ€๊ฒฝ๋Ÿ‰์„ 400 LOC ์ดํ•˜๋กœ ์œ ์ง€ํ•˜์—ฌ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. - * **๋น ๋ฅธ ๋ฆฌ๋ทฐ ์‘๋‹ต**: ์ฒซ ๋ฆฌ๋ทฐ ์‘๋‹ต ์‹œ๊ฐ„(TTR)์„ 1์‹œ๊ฐ„ ์ด๋‚ด๋กœ, ์ „์ฒด ์™„๋ฃŒ๋ฅผ 6์‹œ๊ฐ„ ์ด๋‚ด๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. - * **์ž๋™ํ™” ์ตœ์ ํ™”**: ์Šคํƒ€์ผ ๋ฐ ๋‹จ์ˆœ ๊ฒ€์ฆ์„ ์ž๋™ํ™”ํ•˜์—ฌ ์ธ๊ฐ„ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์•„ํ‚คํ…์ฒ˜์™€ ์ง€์‹ ๊ณต์œ ์— ์ง‘์ค‘ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. -3. **์„ฑ๊ณผ์™€ ๋ฆฌ๋ทฐ์˜ ์ƒ๊ด€๊ด€๊ณ„**: - * ํšจ์œจ์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ–์ถ˜ ํŒ€์€ ๊ทธ๋ ‡์ง€ ์•Š์€ ํŒ€๋ณด๋‹ค ์ธ๋„ ์„ฑ๊ณผ๊ฐ€ 50% ์ด์ƒ ๋†’๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) -- **์†๋„ vs ์•ˆ์ •์„ฑ**: ์ง€ํ‘œ ๊ฐœ์„ ์„ ์œ„ํ•ด ์†๋„์—๋งŒ ์ง‘์ฐฉํ•˜๋ฉด ์‹คํŒจ์œจ(CFR)์ด ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 4๋Œ€ ์ง€ํ‘œ๋Š” ์„œ๋กœ ๊ฒฌ์ œํ•˜๋ฉฐ ๊ท ํ˜•์„ ์ด๋ฃจ์–ด์•ผ ์ง„์ •ํ•œ ์„ฑ๊ณผ ๊ฐœ์„ ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. -- **๋ฐ์ดํ„ฐ์˜ ๋งฅ๋ฝ**: ๋‹จ์ˆœ ์ˆ˜์น˜๋งŒ์œผ๋กœ ํŒ€์„ ํ‰๊ฐ€ํ•˜๊ธฐ๋ณด๋‹ค, ์ง€ํ‘œ์˜ ๋ณ€ํ™” ์ถ”์ด๋ฅผ ํ†ตํ•ด ํŒ€์˜ ํ”„๋กœ์„ธ์Šค ๊ฑด์ „์„ฑ์„ ์ง„๋‹จํ•˜๊ณ  ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋„๊ตฌ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- [[Review Performance & Flow|Review Performance & Flow]]: DORA ์ง€ํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์  ์šด์˜ ์ „๋žต. -- Small Pull Requests (์ž‘์€ PR: Lead Time์„ ๋‹จ์ถ•ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ˆ˜๋‹จ. -- [[Automated Quality & Review|Automated Quality & Review]]: ์ธ๊ฐ„์˜ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜์—ฌ ์„ฑ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ธฐ๋ฐ˜. -- [[CI-CD Pipeline|CI-CD Pipeline]]: ์ง€ํ‘œ ์ˆ˜์ง‘๊ณผ ์ž๋™ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ์ธํ”„๋ผ. -- [[DORA-Metrics|DORA Metrics]]: ์›๋ณธ ๊ฐœ๋… ์ •์˜. ---- diff --git a/10_Wiki/Topics/03_DevOps_Environment/Index.md b/10_Wiki/Topics/03_DevOps_Environment/Index.md deleted file mode 100644 index 2ea162f6..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/Index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Index: Topics > 03_DevOps_Environment - -## ๐Ÿ“ Documents -- [[Deployment_Final_Gate|Deployment_Final_Gate]] -- [[DevOps_Environment_Setup|DevOps_Environment_Setup]] -- [[Git_Operation_Protocol|Git_Operation_Protocol]] -- [[Modern_Environment_Ecosystem|Modern_Environment_Ecosystem]] -- [[Tetris_Project_Retrospective|Tetris_Project_Retrospective]] diff --git a/10_Wiki/Topics/03_DevOps_Environment/Internet of Things (IoT).md b/10_Wiki/Topics/03_DevOps_Environment/Internet of Things (IoT).md deleted file mode 100644 index 47710c29..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/Internet of Things (IoT).md +++ /dev/null @@ -1,75 +0,0 @@ ---- -id: P-REINFORCE-WIKI-0DC3AE4A -category: "10_Wiki/๐Ÿ’ก Topics/03_DevOps_Environment" -confidence_score: 0.95 -tags: ['internet-of-things-(iot)', 'event-driven-architecture-pattern', 'serverless-architecture-pattern', 'broker-architecture-pattern', 'microkernel-architecture-pattern', 'devops-environment'] -last_reinforced: 2026-05-02 ---- - -# [[Internet of Things (IoT)]] - -## ๐Ÿ“Œ Brief Summary -Internet of Things (IoT)๋Š” ์Šค๋งˆํŠธ ํ™ˆ, ์˜๋ฃŒ ๋ชจ๋‹ˆํ„ฐ๋ง ์žฅ์น˜, ๋ฌผ๋ฆฌ์  ์„ผ์„œ ๋“ฑ ๋Œ€๊ทœ๋ชจ ์ด๋ฒคํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ตํ™˜ํ•˜๋Š” ๋ฌผ๋ฆฌ์  ๋””๋ฐ”์ด์Šค ๋ฐ ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1-3]. ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ IoT ์‹œ์Šคํ…œ์€ ๋ฐฉ๋Œ€ํ•œ ๋ณผ๋ฅจ๊ณผ ๋น ๋ฅธ ์†๋„๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ˆ˜์ง‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋†’์€ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(EDA) ๋ฐ ์„œ๋ฒ„๋ฆฌ์Šค(Serverless), ๋ธŒ๋กœ์ปค(Broker) ํŒจํ„ด ๋“ฑ๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค [1, 4-6]. - -## ๐Ÿ“– Core Content -* **์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(EDA)์™€์˜ ๊ฒฐํ•ฉ:** EDA๋Š” ์„ผ์„œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์Šค๋งˆํŠธ ํ™ˆ ๋“ฑ IoT ์‹œ์Šคํ…œ์— ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์œผ๋กœ ๊ผฝํž™๋‹ˆ๋‹ค [1, 7]. IoT ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ๋Ÿ‰๊ณผ ์†๋„(Volume and Velocity)๊ฐ€ ๋งค์šฐ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์„ฑ๊ณผ ๋น„๊ฒฐํ•ฉ์„ฑ์ด ๋›ฐ์–ด๋‚œ EDA์˜ ์ด์ ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 8]. -* **์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ(Event Stream Processing):** ๊ฑด๊ฐ• ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ IoT ์†”๋ฃจ์…˜์€ ์ง€์†์ ์ธ ์ƒ์ฒด ๋ณ€ํ™”๋ฅผ ์‹œ์Šคํ…œ์— ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋นˆ๋ฒˆํ•˜๊ณ  ๋ฐฉ๋Œ€ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [2]. Azure IoT Hub๋‚˜ Event Hubs์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์„ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ํ™œ์šฉํ•˜๋ฉด, ๋Œ€์šฉ๋Ÿ‰์˜ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์ง‘(Ingest)ํ•˜๊ณ  ์ŠคํŠธ๋ฆผ ํ”„๋กœ์„ธ์„œ์— ๊ณต๊ธ‰ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [3, 9, 10]. ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด, ์ฆ‰๊ฐ์  ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์™€ ์ฃผ๊ธฐ์  ๋ถ„์„์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๊ฐ์ž์˜ ์†๋„์— ๋งž์ถฐ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค [2]. -* **๋‹ค์–‘ํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์˜ ์ ์šฉ:** - * **์„œ๋ฒ„๋ฆฌ์Šค(Serverless):** IoT ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์ด๋ฒคํŠธ ์ค‘์‹ฌ ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์—ฌ์ฃผ๊ณ  ๋น„์šฉ ํšจ์œจ์ ์ธ ์˜คํ† ์Šค์ผ€์ผ๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [1, 11]. - * **๋ธŒ๋กœ์ปค(Broker) ํŒจํ„ด:** IoT ํ—ˆ๋ธŒ ๋ฐ ์„ผ์„œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ IoT ๋””๋ฐ”์ด์Šค์™€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ๊ณผ ๋ฉ”์‹œ์ง€ ๋ถ„๋ฐฐ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์กฐ์œจํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [6, 12]. - * **๋งˆ์ดํฌ๋กœ์ปค๋„(Microkernel):** ๋†’์€ ๋ชจ๋“ˆ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ์š”๊ตฌ๋˜๋Š” ๊ฐœ๋ณ„ IoT ๋””๋ฐ”์ด์Šค(์—ฃ์ง€ ํ™˜๊ฒฝ)์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์ฝ”์–ด ๊ธฐ๋Šฅ๊ณผ ํ™•์žฅ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [13]. - * **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐ ํ—ฅ์‚ฌ๊ณ ๋‚ (Hexagonal):** ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” IoT ์‹œ์Šคํ…œ์˜ ๋ชจ๋“ˆ์‹ ์—…๋ฐ์ดํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉฐ [1], ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋Š” ์™ธ๋ถ€ IoT ์„ผ์„œ ๊ธฐ์ˆ ๊ณผ ๋‚ด๋ถ€ ํ•ต์‹ฌ ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค [14]. - -## โš–๏ธ Trade-offs & Caveats -* **๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ณด์žฅ(Guaranteed Delivery)์˜ ์–ด๋ ค์›€:** IoT ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ ์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋”๋ผ๋„ ์„ผ์„œ์—์„œ ์ƒ์„ฑ๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜์ง€๋งŒ, ๋ณต์žกํ•œ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์ด๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜์  ๊ตฌํ˜„์€ ๊นŒ๋‹ค๋กœ์šด ๊ณผ์ œ์ž…๋‹ˆ๋‹ค [15]. -* **๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘(Ingestion) ์ œ์•ฝ:** IoT ๋””๋ฐ”์ด์Šค๋Š” ์‹œ์Šคํ…œ ์™ธ๋ถ€์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๋กœ์„œ ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์‚ฐํ•˜๋ฏ€๋กœ, IoT ์‹œ์Šคํ…œ์€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ˆ˜์ค€์˜ ๋ง‰๋Œ€ํ•œ ๋ณผ๋ฅจ๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput)์„ ์ง€์—ฐ ์—†์ด ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ์ธํ”„๋ผ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฐ–์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค [3]. -* **๋ณต์žก์„ฑ ๋ฐ ๋น„์šฉ ๊ตฌ์กฐ์˜ ์ฆ๊ฐ€:** IoT ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•œ ๋ถ„์‚ฐ ์ด๋ฒคํŠธ ์•„ํ‚คํ…์ฒ˜๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋„์ž…ํ•˜๋ฉด ํ™•์žฅ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ๋Œ€๊ฐ€๋กœ ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ, ๋””๋ฒ„๊น…์˜ ์–ด๋ ค์›€, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์œ ์ง€ ๋ฐ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ ๋น„์šฉ ์ƒ์Šน์ด๋ผ๋Š” ๋‹จ์ ์„ ๊ฐ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 16]. - -## ๐Ÿ”— Knowledge Connections - -### Related Concepts - -#### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] -- [[Event-Driven Architecture Pattern]] - - ์—ฐ๊ฒฐ ์ด์œ : IoT ๋””๋ฐ”์ด์Šค์—์„œ ์ˆ˜์ง‘๋˜๋Š” ์‹ค์‹œ๊ฐ„ ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋†’์€ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค [1, 4, 5]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ๋ณ€ํ™”(์ด๋ฒคํŠธ)๋ฅผ ์ƒ์‚ฐ, ์†Œ๋น„, ๋ผ์šฐํŒ…ํ•˜๋Š” ์›๋ฆฌ์™€ ๋ธŒ๋กœ์ปค/๋ฉ”๋””์—์ดํ„ฐ ํ† ํด๋กœ์ง€์˜ ๊ตฌ์กฐ. -- [[Serverless Architecture Pattern]] - - ์—ฐ๊ฒฐ ์ด์œ : ํŒŒ์ผ ์—…๋กœ๋“œ๋‚˜ IoT ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ ๋ถˆ๊ทœ์น™ํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ด€๋ฆฌ ์„œ๋ฒ„ ์—†์ด ๋น„์šฉ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [1, 11]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ์˜ ์˜คํ† ์Šค์ผ€์ผ๋ง ์›๋ฆฌ์™€ ๊ณผ๊ธˆ ๋ชจ๋ธ, ์ด๋ฒคํŠธ ํŠธ๋ฆฌ๊ฑฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜. -- [[Broker Architecture Pattern]] - - ์—ฐ๊ฒฐ ์ด์œ : IoT ๋””๋ฐ”์ด์Šค์™€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๊ฐ„์˜ ๋Œ€๊ทœ๋ชจ ํ†ต์‹ ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ„๋ฐฐํ•˜๋Š” IoT ํ—ˆ๋ธŒ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [6, 12]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋น„๊ฒฐํ•ฉ ํ†ต์‹  ๋ฐฉ์‹๊ณผ ๋ผ์šฐํŒ…, ๊ทธ๋ฆฌ๊ณ  ๋‹จ์ผ ์žฅ์• ์ (SPOF) ๋Œ€์‘ ๋ฐฉ๋ฒ•. -- [[Microkernel Architecture Pattern]] - - ์—ฐ๊ฒฐ ์ด์œ : ๊ณ ๋„์˜ ๋ชจ๋“ˆ์„ฑ์ด ํ•„์š”ํ•œ IoT ๊ธฐ๊ธฐ ์ž์ฒด์˜ ์ž„๋ฒ ๋””๋“œ ์šด์˜์ฒด์ œ๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [13]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”์–ด ์‹œ์Šคํ…œ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์—ฃ์ง€ ๋””๋ฐ”์ด์Šค ์„ค๊ณ„. - -#### [๊ด€๊ณ„ ์œ ํ˜• B: ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํŒจํ„ด] -- [[Event Stream Processing]] - - ์—ฐ๊ฒฐ ์ด์œ : IoT ์„ผ์„œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ/๊ณ ์†์˜ ์ด๋ฒคํŠธ๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์„ญ์ทจ(Ingestion)ํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [10]. - - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ์˜๊ตฌ ์ €์žฅ, ๋ฐ์ดํ„ฐ ์žฌ์ƒ(Replay), ์œˆ๋„์šฐ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ ๋ถ„์„. - -### Deeper Research Questions - -- IoT ํ™˜๊ฒฝ์—์„œ Event-Driven Architecture๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ฉ”์‹œ์ง€ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ณ  Guaranteed Delivery๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ/์ŠคํŠธ๋ฆผ์˜ ๊ธฐ์ˆ ์  ๊ตฌ์„ฑ ๋ฐ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์ˆ˜๋งŽ์€ IoT ์„ผ์„œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘๋ชฉ ์—†์ด ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด Azure IoT Hub์™€ ๊ฐ™์€ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์€ ์–ด๋– ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋Š”๊ฐ€? -- IoT ๊ธฐ๊ธฐ(์—ฃ์ง€ ๋””๋ฐ”์ด์Šค)์˜ ์†Œํ”„ํŠธ์›จ์–ด์— Microkernel Architecture๋ฅผ ์ ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”์–ด์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐ„์˜ ํ†ต์‹ (IPC) ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๊ทธ ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ธ๊ฐ€? -- ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ IoT ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ(Spikes)์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Event-Driven ๋ฐฉ์‹๊ณผ Serverless Architecture๋ฅผ ํ•จ๊ป˜ ์„ค๊ณ„ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” Cold Start ์ง€์—ฐ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? -- Hexagonal Architecture๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€ IoT ์„ผ์„œ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•  ๋•Œ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - -### Practical Application Contexts - -- **Implementation:** ์Šค๋งˆํŠธ ํŒฉํ† ๋ฆฌ๋‚˜ ์˜๋ฃŒ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์‹œ, ์ˆ˜์ฒœ ๊ฐœ์˜ IoT ๋””๋ฐ”์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ Kafka๋‚˜ Azure IoT Hub ๊ฐ™์€ ๋ธŒ๋กœ์ปค๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์‹œ์Šคํ…œ ๊ตฌํ˜„. -- **System Design:** ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ ์ค‘์š”๋„๊ฐ€ ๋†’์€ ์•Œ๋žŒ ์ด๋ฒคํŠธ๋Š” ์ฆ‰๊ฐ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ด๋ ฅ ๋ถ„์„ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅ์†Œ์— ๊ธฐ๋ก ํ›„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„. -- **Operation / Maintenance:** Serverless ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜์—ฌ IoT ๋””๋ฐ”์ด์Šค ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธ‰์ฆํ•  ๋•Œ ๋ณ„๋„์˜ ์„œ๋ฒ„ ํ”„๋กœ๋น„์ €๋‹ ์—†์ด ์ž๋™์œผ๋กœ ์ž์›์ด ํ™•์žฅ๋˜๋„๋ก ํ•˜์—ฌ ์šด์˜ ์ธํ”„๋ผ ๊ด€๋ฆฌ ๋น„์šฉ ๊ฐ์†Œ. -- **Learning Path:** ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋ฐ ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ดํ•ดํ•œ ๋’ค, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋Š” Event-Driven Architecture์™€ Broker Pattern์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ํŒŒ์•…ํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”. -- **My Project Relevance:** ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ์„ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ๋‹จ์ผ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ๊ณ„๋ฅผ ์ธ์‹ํ•˜๊ณ  EDA, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋“ฑ ์š”๊ตฌ์‚ฌํ•ญ์— ๋ถ€ํ•ฉํ•˜๋Š” ์ ํ•ฉํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ์„ ์ •ํ•˜๋Š” ๊ธฐ์ค€ ํ™•๋ฆฝ. - -### Adjacent Topics - -- [[Microservices Architecture Pattern]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ณต์žกํ•œ IoT ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ณ„ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” MSA์˜ ์žฅ๋‹จ์  ๋ฐ ์„ค๊ณ„ ์›์น™ ํƒ๊ตฌ. -- [[Hexagonal Architecture (Ports and Adapters)]] - - ํ™•์žฅ ๋ฐฉํ–ฅ: ์™ธ๋ถ€ ์žฅ์น˜(IoT ์„ผ์„œ)๋‚˜ ํŠน์ • ๊ธฐ์ˆ  ์š”์†Œ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ์ˆœ์ˆ˜ํ•œ ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ค๋Š” ์„ค๊ณ„ ๋ฐฉ์‹ ์—ฐ๊ตฌ. - ---- -*Last updated: 2026-05-02* \ No newline at end of file diff --git a/10_Wiki/Topics/03_DevOps_Environment/Modern_Environment_Ecosystem.md b/10_Wiki/Topics/03_DevOps_Environment/Modern_Environment_Ecosystem.md deleted file mode 100644 index 40949316..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/Modern_Environment_Ecosystem.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ๋ชจ๋˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ์ƒํƒœ๊ณ„ -category: Software [[Architecture|Architecture]] -tags: [Vite, [[Next.js|Next.js]], Ecosystem, Modern Stack] -created: 2026-04-20 ---- - -# [[Modern_Environment_Ecosystem|Modern_Environment_Ecosystem]] (๋ชจ๋˜ ๊ฐœ๋ฐœ ์ƒํƒœ๊ณ„) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ๋„๊ตฌ๋Š” ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ '์ƒ์‚ฐ์„ฑ'์„ ์œ„ํ•œ ์ˆ˜๋‹จ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ตœ์‹  ์ƒํƒœ๊ณ„์˜ ๋ณ€ํ™”๋ฅผ ๋†“์น˜๋Š” ๊ฒƒ์€ ์Šค์Šค๋กœ ์ƒ์‚ฐ์„ฑ์„ ๊นŽ์•„๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Build Tools: Vite vs Webpack**: - - `Vite`๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ESM์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๊ตฌ๋™ ์†๋„๋ฅผ ํ˜์‹ ์ ์œผ๋กœ ์ค„์˜€๋‹ค. ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก Vite์˜ HMR(Hot Module Replacement) ์†๋„๋Š” ๋น›์„ ๋ฐœํ•œ๋‹ค. -- **Framework: Next.js (The Fullstack Edge)**: - - ๋‹จ์ˆœํžˆ SEO๋ฅผ ์œ„ํ•œ SSR ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. API Routes๋ฅผ ํ†ตํ•œ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜ ๊ตฌํ˜„, ๋ฐ์ดํ„ฐ ์บ์‹ฑ ์ „๋žต(ISR/SSG) ๋“ฑ ํ˜„๋Œ€ ์›น์ด ์š”๊ตฌํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํƒ‘์žฌํ•œ '๊ฑฐ๋ฒ„๋„Œ์Šค' ๊ทธ ์ž์ฒด๋‹ค. -- **ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์˜ ์„ ํƒ**: - - `pnpm` ๋˜๋Š” `npm v7+`์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ชจ๋…ธ๋ ˆํฌ([[Monorepo|Monorepo]]) ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ํŒจํ‚ค์ง€ ์ค‘๋ณต ์„ค์น˜๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ๋นŒ๋“œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค. - -## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (RL Update) -- ์ตœ์‹  ๊ธฐ์ˆ ์ด ํ•ญ์ƒ ์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค. ์•ˆ์ •์„ฑ์ด ์ตœ์šฐ์„ ์ธ ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฒ€์ฆ๋œ `CRA` ํ˜น์€ `Webpack` ๊ธฐ๋ฐ˜์˜ ์„ค์ •์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ณด์ˆ˜์ ์ธ ๋ฉด์—์„œ ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์ˆ  ๋ถ€์ฑ„(Tech Debt)์™€ ๋„์ž… ๋น„์šฉ์„ ํ•ญ์ƒ ์ €์šธ์งˆํ•˜๋ผ. - -## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) -- Related: [[Deployment_Final_Gate|Deployment_Final_Gate]] , Project_Architecture_Guidelines -- Foundation: [[TypeScript_Type_Safety|TypeScript_Type_Safety]] diff --git a/10_Wiki/Topics/03_DevOps_Environment/Tetris_Project_Retrospective.md b/10_Wiki/Topics/03_DevOps_Environment/Tetris_Project_Retrospective.md deleted file mode 100644 index fc46e7c0..00000000 --- a/10_Wiki/Topics/03_DevOps_Environment/Tetris_Project_Retrospective.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: ํ”„๋กœ์ ํŠธ ํšŒ๊ณ : ๊ณ ์„ฑ๋Šฅ ํ…ŒํŠธ๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜ -category: Projects -tags: [Retrospective, Tetris, [[Architecture|Architecture]], Performance] -created: 2026-04-20 ---- - -# ํ”„๋กœ์ ํŠธ ํšŒ๊ณ : ๊ณ ์„ฑ๋Šฅ ํ…ŒํŠธ๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜ ([[P-Reinforce|P-Reinforce]]) - -## ๐ŸŒŠ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ์š”์•ฝ -๋ณธ ํ”„๋กœ์ ํŠธ๋Š” **Web Worker**๋ฅผ ํ™œ์šฉํ•œ ์™„์ „ํ•œ ์—ฐ์‚ฐ-๋ Œ๋”๋ง ๋ถ„๋ฆฌ๋ฅผ ์‹คํ˜„ํ•˜์—ฌ, ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„ ํ™˜๊ฒฝ์—์„œ ๊ทน๊ฐ•์˜ ๋ถ€๋“œ๋Ÿฌ์›€์„ ํ™•๋ณดํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. - -### ๐Ÿงฉ ์ปดํฌ๋„ŒํŠธ๋ณ„ ๊ธฐ์ˆ ์  ์—ญํ•  -- **Game Engine**: ๋ฌผ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ ์ƒํƒœ ์ „์ด (`public/gameWorker.js`). -- **[[State|State]] Manager**: UI์˜ ์œ ์ผํ•œ ์ง„์‹ค ๊ณต๊ธ‰์› (`src/App.js`). -- **Renderer**: Props ๊ธฐ๋ฐ˜์˜ ์ˆœ์ˆ˜ ๋งคํ•‘ ๋ Œ๋”๋Ÿฌ (`src/components/GameBoard.jsx`). - -## โš ๏ธ ํ•ต์‹ฌ ๊ตํ›ˆ ([[Lessons Learned|Lessons Learned]]) -> [!IMPORTANT] -> **"๋…ผ๋ฆฌ๊ฐ€ ์™„๋ฒฝํ•ด๋„ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋ฌด๋„ˆ์ง€๋ฉด ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค."** -> ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋งŒํผ์ด๋‚˜ 'ํŒŒ์ผ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ'๊ณผ 'ํ™˜๊ฒฝ ์žฌ์„ค์ • ๋ฃจํ‹ด'์ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์— ์ง€๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. - -## ๐Ÿ† ์„ฑ๊ณผ -- [x] Web Worker ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์—”์ง„ ๊ตฌ์ถ• ์™„๋ฃŒ. -- [x] ํ‘œ์ค€ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์˜ Decoupling ์„ฑ๊ณต. -- [x] ์ฒด๊ณ„์ ์ธ ๋””๋ฒ„๊น… ํ”„๋กœํ† ์ฝœ ์ˆ˜๋ฆฝ. - -## ๐Ÿ”— ์—ฐ๊ฒฐ๋œ ์ง€์‹ -- [[System_Debugging_Protocol|System_Debugging_Protocol]] -- Project_Architecture_Guidelines diff --git a/10_Wiki/Topics/04_Governance_Reliability/Accessibility_Inclusivity.md b/10_Wiki/Topics/04_Governance_Reliability/Accessibility_Inclusivity.md deleted file mode 100644 index 7aaaa770..00000000 --- a/10_Wiki/Topics/04_Governance_Reliability/Accessibility_Inclusivity.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: ์›น ์ ‘๊ทผ์„ฑ ๋ฐ ํฌ์šฉ์  ์„ค๊ณ„ (a11y) -category: Software [[Architecture|Architecture]] -tags: [[Accessibility|[Accessibility]], a11y, Semantic HTML, Inclusivity] -created: 2026-04-20 ---- - -# [[Accessibility_Inclusivity|Accessibility_Inclusivity]] (ํฌ์šฉ์  ์„ค๊ณ„์™€ ์ ‘๊ทผ์„ฑ) - -## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) -> ์›น์€ '๋ชจ๋‘'๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด์–ด์•ผ ํ•œ๋‹ค. ์‹ ์ฒด์  ์ œ์•ฝ์ด ์‹œ์Šคํ…œ ์ด์šฉ์˜ ์ œ์•ฝ์ด ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ '๋งค๋„ˆ'๊ฐ€ ์•„๋‹ˆ๋ผ ์ „๋ฌธ ๊ฐœ๋ฐœ์ž์˜ '์ฑ…์ž„'์ด๋‹ค. - -## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) -- **Semantic HTML (์˜๋ฏธ๋ก ์  ํƒœ๊ทธ)**: - - `
`๋กœ๋งŒ ๋„๋ฐฐํ•˜์ง€ ๋งˆ๋ผ. `
`, `
`, `
`, `