--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Separation of Concerns]] last_updated: 2026-05-02 --- # [[Separation of Concerns]] ## ๐Ÿ“Œ Brief Summary Separation of Concerns(๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ)๋Š” ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋ฅผ ์ฃผ๋„ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ํ™•๋ฆฝ๋œ ์›์น™์ด๋‹ค [1]. ์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ณ ์œ ํ•œ ์ฑ…์ž„๊ณผ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋…๋ฆฝ์ ์ธ ๊ณ„์ธต์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ„์–ด ์กฐ์งํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค [2, 3]. ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ๋‹ฌ์„ฑํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ์‹œ์Šคํ…œ์˜ ๋ชจ๋“ˆ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค [2, 4-6]. --- > "๋‡Œ์™€ ํŒ”๋‹ค๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ผ" โ€” ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์„น์…˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ๋ถ€๋ถ„์ด ์ž์‹ ์˜ ์—ญํ• ์—๋งŒ ์ง‘์ค‘ํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์ „์ฒด์˜ ๋ณต์žก๋„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ง€ํ˜œ. --- > ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(SoC)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ ๋ถ€๋ถ„์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ํŠน์ • ๊ด€์‹ฌ์‚ฌ์—๋งŒ ์ง‘์ค‘ํ•˜๋„๋ก ์‹œ์Šคํ…œ์„ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ๊ทผ๋ณธ์ ์ธ ์›์น™์ž…๋‹ˆ๋‹ค [1-3]. 1974๋…„ ์—์ธ ํ—ˆ๋ฅด ๋ฐ์ดํฌ์ŠคํŠธ๋ผ(Edsger W. Dijkstra)๊ฐ€ ์ธ๊ฐ„์˜ ์ง€์  ํ•œ๊ณ„๋กœ ์ธํ•œ ๋ณต์žก์„ฑ์„ ํ†ต์ œํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆํ•œ ๊ฐœ๋…์œผ๋กœ, ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ์กฐ๊ฐ์œผ๋กœ ๋ถ„ํ•ดํ•˜์—ฌ ๋ชจ๋“ˆ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [1, 3-6]. ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ๊ฒฉ๋ฆฌํ•จ์œผ๋กœ์จ, ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๊ณ  ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์ฒ ํ•™์ž…๋‹ˆ๋‹ค [7-9]. --- > ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(Separation of Concerns, SoC)๋Š” ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ์ž‘๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ๊ฐœ๋ณ„ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด, ๊ฐ ๋ถ€๋ถ„์ด ๋‹จ์ผํ•œ ๊ธฐ๋Šฅ์  ์ธก๋ฉด์ด๋‚˜ '๊ด€์‹ฌ์‚ฌ'๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ํ•ต์‹ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ์›์น™์ž…๋‹ˆ๋‹ค [1-3]. 1974๋…„ ์—์ธ ํ—ˆ๋ฅด ๋ฐ์ดํฌ์ŠคํŠธ๋ผ(Edsger W. Dijkstra)๊ฐ€ ์ธ๊ฐ„์˜ ์ธ์ง€์  ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ๋ณต์žก์„ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ ์ œ์•ˆํ•œ ์ฒ ํ•™์— ๊ธฐ์›์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [4-6]. ์ด ์›์น™์€ ๋ชจ๋“ˆ ๋‚ด์˜ ์‘์ง‘๋„(Cohesion)๋ฅผ ๋†’์ด๊ณ  ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„(Coupling)๋ฅผ ๋‚ฎ์ถ”์–ด ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค [7-10]. ## ๐Ÿ“– Core Content * **๋ณต์žก์„ฑ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ ์›๋ฆฌ:** ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋ณต์žก์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ๊ทผ๋ณธ์ ์ธ ์›์น™์ด๋‹ค [7]. ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…ํŠธ๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค์–‘ํ•œ ์ดํ•ด๊ด€๊ณ„์ž์˜ ๊ด€์‹ฌ์‚ฌ์™€ ์—ฐ๊ด€๋œ ๋…๋ฆฝ์ ์ธ ๊ด€์ (view)์œผ๋กœ ๋ชจ๋ธ๋งํ•˜๊ณ  ์„ค๋ช…ํ•จ์œผ๋กœ์จ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ  ์‹œ์Šคํ…œ์˜ ๊ฐœ๋…์  ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค [1]. * **๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)์˜ ์ ์šฉ:** ์ด ์›์น™์€ ์‹œ์Šคํ…œ์„ ์ˆ˜ํ‰์ ์ธ ๊ณ„์ธต(์˜ˆ: ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/์„œ๋น„์Šค, ๋„๋ฉ”์ธ/๋น„์ฆˆ๋‹ˆ์Šค, ๋ฐ์ดํ„ฐ/ํผ์‹œ์Šคํ„ด์Šค)์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ ๋‘๋“œ๋Ÿฌ์ง€๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค [3, 6, 8]. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์„ž์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ  ์ฝ”๋“œ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค [9-11]. * **ํด๋ฆฐ ๋ฐ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•œ ๋ถ„๋ฆฌ ๊ทน๋Œ€ํ™”:** ํ—ฅ์‚ฌ๊ณ ๋‚ (Hexagonal), ์–‘ํŒŒ(Onion), ํด๋ฆฐ(Clean) ์•„ํ‚คํ…์ฒ˜๋Š” ๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€ ์‚ฌํ•ญ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์›น ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ)์œผ๋กœ๋ถ€ํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ ํŒจํ„ด์ด๋‹ค [12]. ๋„๋ฉ”์ธ ๋กœ์ง์„ ์ธํ”„๋ผ๋‚˜ ์ „์†ก ๊ณ„์ธต์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ๋ช…์‹œ์ ์ธ ๊ฒฝ๊ณ„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ–ฅ์ƒ๋œ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ๊ณผ ๊ฐ์‚ฌ ๊ฐ€๋Šฅ์„ฑ(Auditability)์„ ์ œ๊ณตํ•œ๋‹ค [13, 14]. * **๋ณด์•ˆ ๋ฐ ๊ทœ์ œ ์ค€์ˆ˜ ์ง€์›:** ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋œ ๊ด€์‹ฌ์‚ฌ๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ถ”์ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜์—ฌ ์—„๊ฒฉํ•œ ๋ณด์•ˆ์ด๋‚˜ ๊ทœ์ œ(์˜ˆ: GDPR, HIPAA) ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ ๊ฐ•๋ ฅํ•œ ํ†ต์ œ๋ ฅ์„ ์ œ๊ณตํ•œ๋‹ค [13, 15, 16]. --- - **์ถ”์ถœ๋œ ํŒจํ„ด:** ์‹œ์Šคํ…œ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋…๋ฆฝ๋œ ๊ตฌ์„ฑ ์š”์†Œ(Module/Service)๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๋Š” '๋””์ปคํ”Œ๋ง(Decoupling)' ํŒจํ„ด. - **์„ธ๋ถ€ ๋‚ด์šฉ:** - **๋ชจ๋“ˆ์„ฑ([[Modularity|Modularity]]):** ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์บก์Аํ™”ํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž„. - **๊ด€์‹ฌ์‚ฌ์˜ ๊ฒฝ๊ณ„:** UI(ํ‘œํ˜„), ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(ํŒ๋‹จ), ๋ฐ์ดํ„ฐ ์ €์žฅ(๋ณด๊ด€)์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋‚˜๋ˆ„์–ด ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ์ ˆ๊ฐ. - **์•ˆ์ •์„ฑ:** ์‹œ์Šคํ…œ์˜ ํ•œ ๋ถ€๋ถ„์ด ๊ณ ์žฅ ๋‚˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๋ถ€๋ถ„์œผ๋กœ ์ „์ด๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉํ™”๋ฒฝ ์—ญํ•  ์ˆ˜ํ–‰. --- **๊ธฐ์›๊ณผ ์ฒ ํ•™์  ํŒจ๋Ÿฌ๋‹ค์ž„** * ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์˜ ๊ธฐ์›์€ ์—์ธ ํ—ˆ๋ฅด ๋ฐ์ดํฌ์ŠคํŠธ๋ผ๊ฐ€ 1974๋…„ ๋ฐœํ‘œํ•œ ์—์„ธ์ด "๊ณผํ•™์  ์‚ฌ๊ณ ์˜ ์—ญํ• ์— ๊ด€ํ•˜์—ฌ"๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค [3]. ๊ทธ๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์ธ๊ฐ„์˜ ์ •์‹ ์ด ์••๋„๋‹นํ•˜์ง€ ์•Š๋„๋ก ํŠน์ • ์ธก๋ฉด์— ์ฃผ์˜๋ฅผ ์ง‘์ค‘ํ•˜๊ณ  ๋‹ค๋ฅธ ์ธก๋ฉด์„ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์ง€์  ์‚ฌ๊ณ ์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ๊ฐ•์กฐํ–ˆ์Šต๋‹ˆ๋‹ค [3, 6]. ์ด ์›์น™์€ ํ›„๋Œ€ ํ•™์ž๋“ค์— ์˜ํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ์„ฑ([[Modularity|Modularity]])์„ ํ™•๋ณดํ•˜๋Š” ์ผ์ฐจ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ฆฝ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ SOLID ์›์น™(ํŠนํžˆ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™๊ณผ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)์˜ ๋ชจํƒœ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [3, 7]. **"๋‡Œ์™€ ํŒ”๋‹ค๋ฆฌ์˜ ๋ถ„๋ฆฌ" ์€์œ  (ํ•ต์‹ฌ ๊ตฌ์กฐ)** * ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ๊ฐ€์žฅ ์ง๊ด€์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ๋น„์œ ๋Š” ์‹œ์Šคํ…œ์„ '๋‡Œ(Brain)'์™€ 'ํŒ”๋‹ค๋ฆฌ(Limbs)'๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [7]. * **๋‡Œ (Core/Brain):** ์•„ํ‚คํ…์ฒ˜์˜ ์‹ฌ์žฅ๋ถ€๋กœ, ์‹œ์Šคํ…œ์ด ์กด์žฌํ•˜๋Š” ๊ทผ๋ณธ ์ด์œ ์ธ ๊ณ ์ˆ˜์ค€์˜ '๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ'์™€ '์œ ์Šค์ผ€์ด์Šค'๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [10-12]. ์ด ์˜์—ญ์€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI, ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ)์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ์ˆœ์ˆ˜ํ•œ ์ƒํƒœ๋กœ ๋ณด์กด๋˜์–ด์•ผ ํ•˜๋ฉฐ ๊ฐ€์žฅ ๋†’์€ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๋…๋ฆฝ์„ฑ์„ ์ง€๋…€์•ผ ํ•ฉ๋‹ˆ๋‹ค [12, 13]. * **ํŒ”๋‹ค๋ฆฌ (Peripheral/Limbs):** ํ•ต์‹ฌ ๋กœ์ง์„ ๊ฐ์‹ธ๊ณ  ์™ธ๋ถ€ ์„ธ๊ณ„์™€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์†Œํ†ตํ•˜๋Š” ์ €์ˆ˜์ค€์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. SQL ์ฟผ๋ฆฌ, REST API, HTML/CSS ์›น ์ธํ„ฐํŽ˜์ด์Šค, ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์ด ํฌํ•จ๋˜๋ฉฐ, ํ•ต์‹ฌ ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์–ธ์ œ๋“  ๊ต์ฒด ๊ฐ€๋Šฅํ•œ 'ํ”Œ๋Ÿฌ๊ทธ์ธ' ํ˜•ํƒœ๋กœ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [12, 13]. * **์‹ ๊ฒฝ๊ณ„ (Wiring):** ๋‡Œ์™€ ํŒ”๋‹ค๋ฆฌ ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ค‘์žฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ DTO ๋“ฑ์˜ ์†Œํ†ต ๊ฒฝ๋กœ๋กœ, ์˜์กด์„ฑ ์—ญ์ „์„ ํ†ตํ•ด ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [14, 15]. **๊ตฌํ˜„์„ ์œ„ํ•œ ๊ณตํ•™์  ์ฒ™๋„: ์‘์ง‘๋„์™€ ๊ฒฐํ•ฉ๋„** * **๋†’์€ ์‘์ง‘๋„ (High Cohesion):** ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ์š”์†Œ๋“ค์ด ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์  ์‘์ง‘๋„๊ฐ€ ๋†’์€ ์ฝ”๋“œ๋Š” ๊ฐ€๋…์„ฑ์ด ์ข‹๊ณ  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฌ์šฐ๋ฉฐ ์ˆ˜์ • ์‹œ ์˜ํ–ฅ ๋ฒ”์œ„๊ฐ€ ํ•œ์ •๋ฉ๋‹ˆ๋‹ค [2, 16-18]. * **๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ (Low Coupling):** ํ•œ ๋ชจ๋“ˆ์ด ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜์กดํ•˜๋Š” ์ •๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ์˜์กด์„ฑ ์ฃผ์ž…(DI)์„ ํ†ตํ•ด ๋ชจ๋“ˆ ๊ฐ„์˜ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜์—ฌ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ถ€์ž‘์šฉ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [2, 19-21]. **์•„ํ‚คํ…์ฒ˜ ๋ฐ ์‚ฐ์—… ์ ์šฉ ์‚ฌ๋ก€** * **์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜:** ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„๋Š” 3๊ณ„์ธต ๊ตฌ์กฐ์™€ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์˜ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์˜ ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค [8, 22-24]. ์ด๋•Œ ์†Œ์Šค ์ฝ”๋“œ ์˜์กด์„ฑ์€ ํ•ญ์ƒ ์™ธ๋ถ€(์ €์ˆ˜์ค€)์—์„œ ๋‚ด๋ถ€(๊ณ ์ˆ˜์ค€ ์ •์ฑ…)๋ฅผ ํ–ฅํ•ด์•ผ ํ•œ๋‹ค๋Š” '์˜์กด์„ฑ ๊ทœ์น™'์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [25]. * **๋‹ค์–‘ํ•œ ์‚ฐ์—…์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ:** HTML(๊ตฌ์กฐ), CSS(ํ‘œํ˜„), JS(๋™์ž‘)์˜ ์›น ํ‘œ์ค€ ๊ธฐ์ˆ  [26, 27], ๋กœ๋ณดํ‹ฑ์Šค ์ œ์–ด ์‹œ์Šคํ…œ์—์„œ์˜ ์„ผ์„œ(์ž…๋ ฅ), ์ปจํŠธ๋กค๋Ÿฌ(๋‡Œ), ์•ก์ถ”์—์ดํ„ฐ(๊ทผ์œก) ๋ถ„๋ฆฌ [28], ๊ฑด์ถ• ์‚ฐ์—…์—์„œ์˜ ๋ชจ๋“ˆ๋Ÿฌ ํ†ตํ•ฉ ๊ฑด์„ค(MiC) [29] ๋“ฑ ๋ฌผ๋ฆฌ์ , ์‹œ์Šคํ…œ์  ๋ณต์žก์„ฑ์„ ๋‹ค๋ฃจ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์˜์—ญ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. --- * **์ฃผ์š” ๊ฐœ๋… ๋ฐ ์ฒ ํ•™**: * **๊ด€์‹ฌ์‚ฌ(Concern)์˜ ์ •์˜**: ์‹œ์Šคํ…œ ๋‚ด์˜ ํŠน์ •ํ•œ ๊ธฐ๋Šฅ์  ์ธก๋ฉด, ๋™์ž‘ ๋˜๋Š” ์ฑ…์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ Œ๋”๋ง, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๋“ฑ) [3, 11, 12]. * **์‘์ง‘๋„์™€ ๊ฒฐํ•ฉ๋„**: ์ข‹์€ SoC ์„ค๊ณ„๋Š” ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ์š”์†Œ๋“ค์ด ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ํ˜‘๋ ฅํ•˜๋Š” '๋†’์€ ์‘์ง‘๋„(High Cohesion)'์™€, ๋ชจ๋“ˆ ๊ฐ„ ์ƒํ˜ธ ์˜์กด์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๋Š” '๋‚ฎ์€ ๊ฒฐํ•ฉ๋„(Low Coupling)'๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค [7-10, 13]. * **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•œ ์ด์ **: * **์œ ์ง€๋ณด์ˆ˜ ๋ฐ ํ™•์žฅ์„ฑ์˜ ํ–ฅ์ƒ**: ์‹œ์Šคํ…œ์˜ ํ•œ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ(์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ)์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์–ด, ๋ณ€ํ™”ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14-16]. * **๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ**: ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์ด ์™ธ๋ถ€ ์ธํ”„๋ผ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI ๋“ฑ)์™€ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ€์งœ ๊ฐ์ฒด(Mock)๋‚˜ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•œ ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค [16, 17]. * **๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ๋ฐ ํ˜‘์—… ํšจ์œจ์„ฑ**: ์—ญํ• ์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค์ •๋˜๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋‚˜ ํŒ€์ด ์„œ๋กœ์˜ ์ž‘์—…์— ๊ฐ„์„ญํ•˜์ง€ ์•Š๊ณ  ๋™์‹œ์— ๋ณ‘๋ ฌ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [14, 17, 18]. * **์‹ค๋ฌด ์ ์šฉ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด**: * **์›น ํ‘œ์ค€ ๊ธฐ์ˆ **: ์›น ๊ฐœ๋ฐœ์—์„œ ๊ตฌ์กฐ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” HTML, ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” CSS, ๋™์  ๋™์ž‘์„ ๋‹ด๋‹นํ•˜๋Š” [[JavaScript|JavaScript]]๋กœ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ณ ์ „์ ์ธ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค [19-21]. * **๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜ (Layered [[Architecture|Architecture]])**: ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต ๋“ฑ ๋…ผ๋ฆฌ์  ์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [22-25]. MVC(Model-View-Controller) ํŒจํ„ด์ด ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค [22, 26]. * **๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ (MSA)**: ๊ฑฐ๋Œ€ํ•œ ๋ชจ๋†€๋ฆฌ์‹(Monolithic) ์‹œ์Šคํ…œ์„ ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค)๋“ค๋กœ ์ชผ๊ฐœ์–ด ๋ถ„๋ฆฌํ•˜๋Š” ์ ‘๊ทผ๋ฒ•์ž…๋‹ˆ๋‹ค [22, 27-29]. * **ํ•œ๊ณ„ ๋ฐ ์ฃผ์˜์‚ฌํ•ญ**: * **๊ณผ๋„ํ•œ ๋ถ„๋ฆฌ์˜ ๋ถ€์ž‘์šฉ**: ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋งน๋ชฉ์ ์œผ๋กœ ํ˜น์€ ์ง€๋‚˜์น˜๊ฒŒ ์ž˜๊ฒŒ ์ชผ๊ฐœ๋ฉด ์ถ”์ƒํ™” ๊ณ„์ธต์ด ๋Š˜์–ด๋‚˜๊ณ  ๊ฐ„์ ‘ ์ฐธ์กฐ๊ฐ€ ์ฆ๊ฐ€ํ•ด, ์˜คํžˆ๋ ค ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” '์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง'์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [30, 31]. * **์กฐ์ • ๋ฐ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ**: ๋ถ„๋ฆฌ๋œ ๋ชจ๋“ˆ์ด๋‚˜ ์„œ๋น„์Šค ๊ฐ„์— ํ†ต์‹ ํ•ด์•ผ ํ•  ์ผ์ด ๋Š˜์–ด๋‚˜๋ฉฐ, ํŠนํžˆ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ๋ฐ ์ง๋ ฌํ™” ๋น„์šฉ ๋“ฑ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋™๋ฐ˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [30, 32, 33]. ## โš–๏ธ Trade-offs & Caveats * **๊ตฌ์กฐ์  ๋ณต์žก์„ฑ ์ฆ๊ฐ€ ๋ฐ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ:** ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ณ„์ธต๊ณผ ์–ด๋Œ‘ํ„ฐ, ์ถ”์ƒํ™” ๊ณ„์ธต์„ ๋‘๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ ์„ค๊ณ„๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์ถ”๊ฐ€์ ์ธ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(Boilerplate) ์ฝ”๋“œ๋ฅผ ์–‘์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค [17, 18]. ๋˜ํ•œ, ์š”์ฒญ์ด ์—ฌ๋Ÿฌ ๋ถ„๋ฆฌ๋œ ๊ณ„์ธต์„ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋‚˜ ์ง€์—ฐ ์‹œ๊ฐ„(Latency)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [19-21]. * **๋‹จ์ˆœํ•œ ์‹œ์Šคํ…œ์—์„œ์˜ ๊ณผ์ž‰ ์—”์ง€๋‹ˆ์–ด๋ง:** ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ๋‹จ์ˆœํ•œ CRUD ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ทน๋„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚ ์ด๋‚˜ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ์ดˆ๊ธฐ ์„ค์ • ๋น„์šฉ์„ ๋†’์ด๊ณ  ๋ถˆํ•„์š”ํ•œ ๊ณผ์ž‰ ์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์ด ๋  ์ˆ˜ ์žˆ๋‹ค [22, 23]. * **๊ฒฝ๊ณ„ ๊ด€๋ฆฌ ์‹คํŒจ ์‹œ์˜ ๋ถ€์ž‘์šฉ:** ๊ณ„์ธต๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ๊ฒฝ๊ณ„๊ฐ€ ์—„๊ฒฉํ•˜๊ฒŒ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๋ˆ„์ˆ˜(leak)๋˜๊ฑฐ๋‚˜ ๊ฒฐ๊ตญ ์‹œ์Šคํ…œ์ด ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š”(Tightly coupled) ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์„ ์ˆ˜ ์žˆ๋‹ค [19, 24, 25]. --- - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ๊ณผ๊ฑฐ์—๋Š” ๋ฌผ๋ฆฌ์  ๊ณ„์ธต(Tier) ๋ถ„๋ฆฌ์— ์ง‘์ค‘ํ–ˆ์œผ๋‚˜, ํ˜„๋Œ€ ์•„ํ‚คํ…์ฒ˜๋Š” ๋…ผ๋ฆฌ์  ๋„๋ฉ”์ธ(Bounded Context) ์ค‘์‹ฌ์˜ ๋ถ„๋ฆฌ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ด๋™ํ•จ. - **์ •์ฑ… ๋ณ€ํ™”:** Antigravity ํ”„๋กœ์ ํŠธ์—์„œ๋Š” AI ์—์ด์ „ํŠธ์˜ '๊ฒฐ์ • ๋ฃจํ”„'์™€ '์‹คํ–‰ ๋„๊ตฌ'๋ฅผ SoC ์›์น™์— ๋”ฐ๋ผ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ํ•จ. --- - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. --- - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด] - [[Layered Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ์Šคํ…œ์„ ์—ญํ• ์— ๋”ฐ๋ผ ์ˆ˜ํ‰์ ์ธ ์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€์ค‘์ ์ด๊ณ  ๊ธฐ๋ณธ์ ์ธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2, 3, 6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋ฆฌ๊ฐ€ ์‹œ์Šคํ…œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์— ๋ฏธ์น˜๋Š” ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ์™€ ์˜ํ–ฅ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [2, 11]. - [[Clean Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์™€ ๋”๋ถˆ์–ด ์˜์กด์„ฑ ์—ญ์ „์„ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์™ธ๋ถ€ ์š”์†Œ๋กœ๋ถ€ํ„ฐ ์™„์ „ํžˆ ๋…๋ฆฝ์‹œํ‚ค๋Š” ๊ณ ๋„ํ™”๋œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๋‹ค [12, 26]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ธฐ์ˆ  ์Šคํƒ์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋ถ€ํ„ฐ ์ฝ”์–ด ๋กœ์ง์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•˜๋Š”์ง€ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค [27, 28]. - [[Model-View-Controller (MVC)]] - ์—ฐ๊ฒฐ ์ด์œ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋ชจ๋ธ(๋ฐ์ดํ„ฐ), ๋ทฐ(๋ ˆ์ด์•„์›ƒ), ์ปจํŠธ๋กค๋Ÿฌ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ์š”์†Œ๋กœ ๋ช…ํ™•ํžˆ ๋‚˜๋ˆ„์–ด ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋Œ€ํ‘œ์  ํŒจํ„ด์ด๋‹ค [29]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ์—ญํ• ์ด ์–ด๋–ป๊ฒŒ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋˜๋ฉฐ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ด‰์ง„ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [5]. #### [๊ด€๊ณ„ ์œ ํ˜• B: ์„ค๊ณ„ ์›์น™ ๋ฐ ์‹œ์Šคํ…œ ํŠน์„ฑ] - [[Modularity]] (๋ชจ๋“ˆ์„ฑ) - ์—ฐ๊ฒฐ ์ด์œ : ๊ด€์‹ฌ์‚ฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ถ„๋ฆฌํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ํŠน์„ฑ์œผ๋กœ, ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [2, 30, 31]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”์–ด ์‹œ์Šคํ…œ๊ณผ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์ปค๋„(Microkernel) ๋“ฑ์—์„œ ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ํ™•์žฅ์„ฑ์˜ ์›๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค [32]. - [[Coupling]] (๊ฒฐํ•ฉ๋„) - ์—ฐ๊ฒฐ ์ด์œ : ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋Š” ํ•„์—ฐ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š”(Loose coupling) ๋ฐฉํ–ฅ์œผ๋กœ ์ž‘์šฉํ•œ๋‹ค [14, 33]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์š”์†Œ๋“ค ๊ฐ„์˜ ์ƒํ˜ธ ์˜์กด์„ฑ์„ ์ตœ์†Œํ™”ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ํŒŒ๊ธ‰ ํšจ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ค„์–ด๋“œ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [34, 35]. ### Deeper Research Questions - ์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•  ๋•Œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๊ฐ€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์œ ๋ฐœํ•œ๋‹ค๋ฉด, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ ํ™” ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - ํ—ฅ์‚ฌ๊ณ ๋‚  ๋ฐ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ด€์‹ฌ์‚ฌ์˜ ์—„๊ฒฉํ•œ ๋ถ„๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ์™€ ์ถ”์ƒํ™” ๊ณ„์ธต์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋ก ์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๋‹จ์œ„์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์ ์šฉํ•  ๋•Œ, ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ(Data Consistency) ๊ฐ„์—๋Š” ์–ด๋– ํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€? - ๋น ๋ฅธ ์‹œ์žฅ ์ง„์ž…์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” MVP(Minimum Viable Product) ๊ฐœ๋ฐœ ์‹œ, ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ ์•ˆ์—์„œ ๋ฏธ๋ž˜์˜ ํ™•์žฅ์„ ๋Œ€๋น„ํ•œ '์ ์ ˆํ•œ ์ˆ˜์ค€'์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - 4+1 ์•„ํ‚คํ…์ฒ˜ ๋ทฐ ๋ชจ๋ธ ๋“ฑ์—์„œ ๋‹ค๋ฃจ์–ด์ง€๋Š” ๋‹ค์–‘ํ•œ ์ดํ•ด๊ด€๊ณ„์ž์˜ ์ƒ์ถฉ๋˜๋Š” ๊ด€์‹ฌ์‚ฌ(๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ vs ๋น„๊ธฐ๋Šฅ์  ํ’ˆ์งˆ ์†์„ฑ)๋Š” ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์–ด๋–ป๊ฒŒ ์กฐ์œจ๋˜๊ณ  ํ†ตํ•ฉ๋˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ”„๋ŸฐํŠธ์—”๋“œ(UI ์š”์†Œ)์™€ ๋ฐฑ์—”๋“œ ๋กœ์ง์„ ํ˜ผํ•ฉํ•˜์ง€ ์•Š๊ณ  ํ…œํ”Œ๋ฆฟ ์—”์ง„ ๋“ฑ์„ ํ™œ์šฉํ•ด ๋ถ„๋ฆฌ ์ž‘์„ฑํ•˜์—ฌ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ฒ„๊ทธ ๋ฐœ์ƒ ํ™•๋ฅ ์„ ์ค„์ด๋Š” ๋ฐ ํ™œ์šฉ๋œ๋‹ค [11, 36]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ์„œ๋น„์Šค, ๋„๋ฉ”์ธ, ๋ฐ์ดํ„ฐ ๊ณ„์ธต ๋“ฑ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋„์ž…ํ•˜์—ฌ, ๊ฐ ๋ชจ๋“ˆ์ด ๋‹จ์ผ ์ฑ…์ž„์„ ์ง€๋„๋ก ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐ ์ ์šฉ๋œ๋‹ค [3, 37]. - **Operation / Maintenance:** ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌ๋œ ์‹œ์Šคํ…œ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ UI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ „ํ˜€ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ ˆ๊ฐํ•œ๋‹ค [12, 38, 39]. - **Learning Path:** ๋‹จ์ˆœํ•œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์ˆ˜ํ‰์  ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์˜ ๊ฐœ๋…์„ ์ตํžŒ ํ›„, ํ—ฅ์‚ฌ๊ณ ๋‚  ๋ฐ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ•™์Šตํ•˜๋ฉฐ ์˜์กด์„ฑ ์—ญ์ „์„ ํ†ตํ•œ ๊ณ ์ฐจ์›์ ์ธ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ๊ธฐ๋ฒ•์„ ๋งˆ์Šคํ„ฐํ•˜๋Š” ํ•™์Šต ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค [26, 40]. - **My Project Relevance:** ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€ํ™”๋‚˜ ํŒ€์˜ ํ™•์žฅ์— ๋Œ€๋น„ํ•˜์—ฌ, ์ฝ”๋“œ๊ฐ€ ์ŠคํŒŒ๊ฒŒํ‹ฐ์ฒ˜๋Ÿผ ์–ฝํžˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํŠน์ • ํŒ€(UIํŒ€ vs ๋ฐฑ์—”๋“œํŒ€)์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๋งคํฌ๋กœ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ํ•„์ˆ˜์ ์ธ ํŒ๋‹จ ๊ธฐ์ค€์ด ๋œ๋‹ค [9, 41]. ### Adjacent Topics - [[Dependency Inversion]] (์˜์กด์„ฑ ์—ญ์ „) - ํ™•์žฅ ๋ฐฉํ–ฅ: ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๋“ฑ์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด์„ฑ ๋ฐฉํ–ฅ์„ ํ•ญ์ƒ ๋‚ด๋ถ€ ๋„๋ฉ”์ธ์œผ๋กœ ํ–ฅํ•˜๊ฒŒ ํ•˜๋Š” ์„ค๊ณ„ ์›์น™์„ ๊นŠ์ด ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค [12, 42]. - [[Domain-Driven Design (DDD)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ์ž‘์šฉํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค '๋„๋ฉ”์ธ' ์ค‘์‹ฌ์˜ ์„ค๊ณ„ ๊ธฐ๋ฒ•๊ณผ Bounded Context ๊ฐœ๋…์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [38, 43, 44]. --- *Last updated: 2026-05-02* --- - [[WebWorker_Performance|WebWorker_Performance]] - [[Single_Source_of_Truth|Single_Source_of_Truth]] --- - **Parent:** 10_Wiki/๐Ÿ’ก Topics/AI - **Related:** Single-Responsibility-Principle, Decoupling, Bounded-Context - **Raw Source:** 00_Raw/2026-04-20/๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ.md --- - **Related Topics:** [[แ„‹แ…ณแ†ผแ„Œแ…ตแ†ธแ„ƒแ…ฉแ„‹แ…ช แ„€แ…งแ†ฏแ„’แ…กแ†ธแ„ƒแ…ฉ (Cohesion and Coupling)|์‘์ง‘๋„์™€ ๊ฒฐํ•ฉ๋„ (Cohesion and Coupling]], ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture), [[แ„ƒแ…กแ†ซแ„‹แ…ตแ†ฏ แ„Žแ…ขแ†จแ„‹แ…ตแ†ท แ„‹แ…ฏแ†ซแ„Žแ…ตแ†จ (Single Responsibility Principle)|๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle]], [[แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„€แ…ฒแ„Žแ…ตแ†จ (Dependency Rule)|์˜์กด์„ฑ ๊ทœ์น™ (Dependency Rule]] - **Projects/Contexts:** ๋„ทํ”Œ๋ฆญ์Šค ์ฝ”์Šค๋ชจ์Šค ํ”Œ๋žซํผ (Netflix Cosmos Platform), [[แ„‰แ…ณแ„‘แ…ฉแ„แ…ตแ„‘แ…กแ„‹แ…ต แ„Œแ…กแ„‹แ…ฒแ†ฏแ„Œแ…ฅแ†จ แ„‡แ…ฎแ†ซแ„ƒแ…ข แ„†แ…ฉแ„ƒแ…ฆแ†ฏ แ„†แ…ตแ†พ แ„†แ…กแ„‹แ…ตแ„แ…ณแ„…แ…ฉ แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ (Spotify Squads and Micro Frontends)|์Šคํฌํ‹ฐํŒŒ์ด ์ž์œจ์  ๋ถ„๋Œ€ ๋ชจ๋ธ ๋ฐ ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ (Spotify Squads and Micro Frontends]], ํ™”์‹ ์‚ฐ ๋ณ‘์› ๋ชจ๋“ˆ๋Ÿฌ ํ†ตํ•ฉ ๊ฑด์„ค (Huoshenshan Hospital Modular Construction) - **Contradictions/Notes:** ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋Š” ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ๋‚ฎ์ถ”์ง€๋งŒ, ๋งน๋ชฉ์ ์œผ๋กœ ์ถ”๊ตฌํ•˜์—ฌ ๊ณผ๋„ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•  ๊ฒฝ์šฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๊นŠ์ด ์ฆ๊ฐ€, ๋„คํŠธ์›Œํฌ ์ง€์—ฐ, ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์˜ค๋ฒ„ํ—ค๋“œ ๋“ฑ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [30]. ๋˜ํ•œ ์ง€๋‚˜์นœ ์ถ”์ƒํ™”๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ๋ฏธ๊ถ์— ๋น ๋œจ๋ ค ๊ฐ€๋…์„ฑ์„ ์ €ํ•˜์‹œํ‚ค๋Š” '์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง'์˜ ๋ถ€์ž‘์šฉ์„ ๋‚ณ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์œ ์‚ฌ ์ฝ”๋“œ๊ฐ€ ์ตœ์†Œ 3๋ฒˆ ์ด์ƒ ์ค‘๋ณต๋  ๋•Œ ์ถ”์ƒํ™”๋ฅผ ๊ณ ๋ คํ•˜๋Š” "[[Rule of Three|Rule of Three]]"๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์‹ค๋ฌด์ ์ธ ๋ถ„๋ฆฌ์˜ ์ž„๊ณ„์ ์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค [31, 32]. --- *Last updated: 2026-04-18* --- --- - **Related Topics:** [[แ„ƒแ…กแ†ซแ„‹แ…ตแ†ฏ แ„Žแ…ขแ†จแ„‹แ…ตแ†ท แ„‹แ…ฏแ†ซแ„Žแ…ตแ†จ (SRP)|๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP]], ์‘์ง‘๋„(Cohesion)์™€ ๊ฒฐํ•ฉ๋„(Coupling), ๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜(Layered Architecture) - **Projects/Contexts:** ๋„ทํ”Œ๋ฆญ์Šค(Netflix)์˜ ์ฝ”์Šค๋ชจ์Šค(Cosmos) ํ”Œ๋žซํผ๊ณผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ „ํ™˜, ์Šคํฌํ‹ฐํŒŒ์ด(Spotify)์˜ ๋งˆ์ดํฌ๋กœ ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ ์Šค์ฟผ๋“œ ๋ชจ๋ธ, HTML, CSS, JavaScript์˜ ์›น ํ‘œ์ค€ 3์š”์†Œ ๋ถ„๋ฆฌ - **Contradictions/Notes:** ๋งŽ์€ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ์€ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ์„ ์ œ์ ์œผ๋กœ ์—„๊ฒฉํžˆ ์„ค๊ณ„ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€๋งŒ, ์ผ๋ถ€ ์ „๋ฌธ๊ฐ€๋“ค์€ ์ฝ”๋“œ ์ž‘์„ฑ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์™„๋ฒฝํ•˜๊ฒŒ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์˜ˆ์ธกํ•˜์—ฌ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค [34, 35]. ๋Œ€์‹ , ์œ ์‚ฌํ•œ ์ฝ”๋“œ๊ฐ€ 3๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ ์ถ”์ถœํ•˜๋Š” '[[Rule of Three|Rule of Three]]'์ฒ˜๋Ÿผ, ๋ฐ˜๋ณต๋˜๋Š” ํŒจํ„ด์„ ํ™•์ธํ•œ ๋’ค์— ๊ฒฝํ—˜์ ์œผ๋กœ ์‚ฌํ›„์— ๋ถ„๋ฆฌํ•˜๋Š” ์‹ค์šฉ์ ์ด๊ณ  ์ ์ง„์ ์ธ ์ ‘๊ทผ(DRY ์›์น™๊ณผ ๋ณ‘ํ–‰)์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค [31, 35, 36]. --- *Last updated: 2026-04-18* --- ## ๐ŸŽฏ ๊ฐœ์š” (Overview) ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ์—ญํ• ๋ณ„๋กœ ๊ตฌ๋ถ„๋œ ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ๋‚˜๋ˆ„์–ด, ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์„ค๊ณ„ ์ฒ ํ•™์ž…๋‹ˆ๋‹ค. ## ๐Ÿš€ ๊ณ„์ธต๊ตฌ์กฐ ์˜ˆ์‹œ (Layering Example) 1. **Logic Engine**: ์ˆœ์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ ๊ทœ์น™ ์ˆ˜ํ–‰ (์˜ˆ: `gameWorker.js`) 2. **State Manager**: ๋ฐ์ดํ„ฐ์˜ ์ค‘์•™ ์ง‘์ค‘ ์ฒ˜๋ฆฌ (์˜ˆ: `TetrisGame.jsx`) 3. **View Layer**: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํ‘œํ˜„ ๋ฐ ๋ Œ๋”๋ง (์˜ˆ: React Components) ## ๐Ÿ’ก ๋ ˆ์Šจ ๋Ÿฐ (Lesson Learned) > [!IMPORTANT] > **"์ฝ”๋“œ์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•  ๋•Œ ์‹œ์Šคํ…œ์€ ๋น„๋กœ์†Œ ๊ฑด๊ฐ•ํ•ด์ง„๋‹ค."** > ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๋ณด๋‹ค ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์„ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.