# [[Clean Code and SOLID Principles]] ## ๐Ÿ“Œ Brief Summary Clean Code์™€ SOLID ์›์น™์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์œ ์ง€๋ณด์ˆ˜์„ฑ, ๊ฐ€๋…์„ฑ, ํ™•์žฅ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™์ด๋‹ค [1]. SOLID๋Š” SRP, OCP, LSP, ISP, DIP์˜ 5๊ฐ€์ง€ ์›์น™์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋ช…ํ™•ํ•˜๊ณ  ์ž˜ ์กฐ์ง๋œ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์กฐ๋ฅผ ์•ˆ๋‚ดํ•˜๋ฉฐ, ๊ฐ์ฒด ์ง€ํ–ฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ React์˜ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—๋„ ์œ ํšจํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค [1, 2]. ๋”๋ถˆ์–ด DRY, KISS, YAGNI์™€ ๊ฐ™์€ Clean Code ์›์น™๋“ค์€ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ค‘๋ณต๊ณผ ๋ณต์žก์„ฑ์„ ์ค„์—ฌ, ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค [3, 4]. ## ๐Ÿ“– Core Content **SOLID ์›์น™์˜ React ์ ์šฉ** * **๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (SRP - Single Responsibility Principle):** ์ปดํฌ๋„ŒํŠธ๋‚˜ ์ปค์Šคํ…€ ํ›…์€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•  ์ด์œ ๊ฐ€ ๋‹จ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค [5]. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ํฌ๊ธฐ๊ฐ€ 300์ค„์„ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ, UI ์ปดํฌ๋„ŒํŠธ(์˜ˆ: UserProfile, UserPosts)๋‚˜ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค [2, 5]. * **๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (OCP - Open/Closed Principle):** ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค [6]. React์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ(Composition), `children` prop, ํ˜น์€ ๋ Œ๋” ํ”„๋กญ์Šค(render-props)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [2, 7, 8]. * **๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (LSP - Liskov Substitution Principle):** ํ•˜์œ„ ํƒ€์ž…์€ ์ƒ์œ„ ํƒ€์ž…์„ ๋ฌด๋ฆฌ ์—†์ด ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค [6]. ํ˜„๋Œ€ React๋Š” ํด๋ž˜์Šค ์ƒ์†์„ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ์˜ ์ž๋ฆฌ๋ฅผ ๋งค๋„๋Ÿฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด ์›์น™์„ ์ ์šฉํ•œ๋‹ค [2, 8]. * **์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (ISP - Interface Segregation Principle):** ์ปดํฌ๋„ŒํŠธ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” props์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค [2, 7]. ๊ฑฐ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ํ†ต์งธ๋กœ props๋กœ ๋„˜๊ธฐ๊ธฐ๋ณด๋‹ค๋Š”, ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ช…ํ™•ํ•˜๊ณ  ์ž‘์€ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค [7, 8]. * **์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (DIP - Dependency Inversion Principle):** ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„(Concretions)์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค [2]. ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ง์ ‘์ ์ธ ๊ฒฐํ•ฉ์„ ํ”ผํ•˜๊ณ , props๋‚˜ Context๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค [2, 8]. **์ถ”๊ฐ€์ ์ธ Clean Code ์›์น™** * **DRY (Don't Repeat Yourself):** ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(HOC)๋กœ ์ถ”์ถœํ•œ๋‹ค [4, 9]. ๋‹จ, ์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ„ด์ด ์ตœ์†Œ ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค [10]. * **KISS (Keep It Simple, Stupid):** ๋ณต์žก์„ฑ๋ณด๋‹ค ๋‹จ์ˆœ์„ฑ์„ ์ตœ์šฐ์„ ์œผ๋กœ ํ•ด์•ผ ํ•œ๋‹ค [4]. ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ์ˆ˜๋ฅผ '๋‹จ์ˆœํ•˜๊ณ  ๋ฐ”๋ณด๊ฐ™์ด(simple and dumb)' ์œ ์ง€ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ์กฐ๊ธฐ ์ตœ์ ํ™”๋ฅผ ํ”ผํ•ด์•ผ ํ•œ๋‹ค [9, 11]. * **YAGNI (You Aren't Gonna Need It):** ๋ฏธ๋ž˜์— ์‚ฌ์šฉ๋ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ์ด์œ ๋กœ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค [4, 12]. ํ˜„์žฌ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ์ฃฝ์€ ์ฝ”๋“œ(dead code)๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค [9, 13]. ## โš–๏ธ Trade-offs & Caveats * **SOLID ๋„์ž…์˜ ๋ณต์žก์„ฑ:** SOLID ์›์น™์„ ๋„์ž…ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ณ ๋„๋กœ ์ฒด๊ณ„ํ™”๋˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋˜์ง€๋งŒ, ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ๋Š” ๊ตฌ์กฐ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ๋‹ค [14]. * **DRY ์›์น™๊ณผ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”:** ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ ์šฉํ•  ๊ฒฝ์šฐ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์ถ”์ƒํ™”(overly complex abstractions)๋ฅผ ์ดˆ๋ž˜ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค [10, 14]. * **KISS ์›์น™์˜ ์ง€๋‚˜์นœ ๋‹จ์ˆœํ™”:** ๋””๋ฒ„๊น…์„ ์‰ฝ๊ฒŒ ํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋‚˜, ๋•Œ๋กœ๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ๋„ˆ๋ฌด ๋‹จ์ˆœํ™”(oversimplify)ํ•  ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค [14]. * **YAGNI์™€ ํ™•์žฅ์„ฑ ๊ฐ„๊ณผ:** ๋‚ญ๋น„๋˜๋Š” ๋…ธ๋ ฅ์„ ์ค„์ด๊ณ  ๊ธฐ๋ฏผํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์ง€๋งŒ, ํ˜„์žฌ์—๋งŒ ๋„ˆ๋ฌด ์ง‘์ค‘ํ•œ ๋‚˜๋จธ์ง€ ๋ฏธ๋ž˜์˜ ํ™•์žฅ์„ฑ(future scalability)์„ ๊ฐ„๊ณผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค [14]. * **Clean Code ์œ ์ง€๋ฅผ ์œ„ํ•œ ๊ทœ์œจ:** ์ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ํŒ€ ์ „์ฒด์˜ ์ง€์†์ ์ธ ๋…ธ๋ ฅ๊ณผ ๊ฐ•๋ ฅํ•œ ๊ทœ์œจ(discipline)์ด ์š”๊ตฌ๋œ๋‹ค [14]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์•„ํ‚คํ…์ฒ˜ ์›์น™] - [[Feature-Sliced Design]] - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๋ฅผ ๊ธฐ์ˆ ์ ์ธ ํŒŒ์ผ ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ(Feature)์ด๋‚˜ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™) ๋ฐ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์—์„œ ์‹คํ˜„ํ•œ๋‹ค [15-17]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ ํ•˜์œ„ ๋ ˆ์ด์–ด๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜์กด์„ฑ์„ ์ œ์–ด(DIP์™€ ์œ ์‚ฌ)ํ•˜์—ฌ, ๋…๋ฆฝ์ ์ธ ์ฝ”๋“œ ๋ชจ๋“ˆํ™”๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [16, 17]. #### [React ๊ตฌํ˜„ ํŒจํ„ด ๋ฐ ๊ธฐ์ˆ ] - [[Custom Hooks]] - ์—ฐ๊ฒฐ ์ด์œ : React์—์„œ DRY ์›์น™์„ ์‹คํ˜„ํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ UI์™€ ๋ถ„๋ฆฌํ•˜์—ฌ SRP๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฆฌํŒฉํ† ๋ง ๋‹จ์œ„์ด์ž ๋„๊ตฌ์ด๋‹ค [10, 18]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ํผ(Form) ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๋ณต์žกํ•œ ๋…ผ๋ฆฌ๋ฅผ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ(KISS) ์œ ์ง€ํ•˜๋Š” ํŒจํ„ด์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [9]. - [[Component Composition]] - ์—ฐ๊ฒฐ ์ด์œ : OCP(๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)๋ฅผ React์—์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ํŒจํ„ด์œผ๋กœ, ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  `children`์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์กฐํ•ฉ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค [7, 8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: React ํ™˜๊ฒฝ์—์„œ ์ƒ์† ์—†์ด ํ•ฉ์„ฑ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ### Deeper Research Questions - React์˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ ํด๋ž˜์Šค ์ƒ์†์„ ์ „์ œ๋กœ ํ•œ LSP(๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)๋Š” ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ์‹œ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์žฌํ•ด์„๋˜๊ณ  ์ ์šฉ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€? - DRY ์›์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ๊ณตํ†ต ๋กœ์ง์„ ์ถ”์ƒํ™”ํ•  ๋•Œ, ์ง€๋‚˜์นœ ์ถ”์ƒํ™”๋ฅผ ๊ฒฝ๊ณ„ํ•˜๋Š” KISS ์›์น™๊ณผ ์ถฉ๋Œํ•œ๋‹ค๋ฉด ์ด๋ฅผ ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•œ ์‹ค๋ฌด์ ์ธ ๊ธฐ์ค€(์˜ˆ: Rule of three) ์™ธ์— ์–ด๋–ค ์ฒ™๋„๊ฐ€ ์žˆ๋Š”๊ฐ€? - ISP(์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)๋ฅผ ์œ„๋ฐฐํ•˜์—ฌ ๊ฑฐ๋Œ€ํ•œ Props ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฌธ์ œ๋ฅผ React ์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - Feature-Sliced Design(FSD)๊ณผ ๊ฐ™์ด ๊ณ„์ธต๊ณผ ๊ทœ์น™์ด ์—„๊ฒฉํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•  ๋•Œ, YAGNI ์›์น™์„ ํ•จ๊ป˜ ์ ์šฉํ•˜์—ฌ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - SRP๋ฅผ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด 300์ค„ ์ด์ƒ์˜ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์ˆ˜์˜ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” Props ๋“œ๋ฆด๋ง(Prop Drilling) ๋ฌธ์ œ๋ฅผ ์•„ํ‚คํ…์ฒ˜ ์ธก๋ฉด์—์„œ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** 300์ค„์ด ๋„˜๋Š” ๋น„๋Œ€ํ•ด์ง„ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์ƒํƒœ ๊ด€๋ฆฌ๋‚˜ API ํ˜ธ์ถœ ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์œผ๋กœ, ๋…๋ฆฝ์ ์ธ UI ์š”์†Œ๋Š” ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ชผ๊ฐœ์–ด SRP์™€ Clean Code๋ฅผ ์‹คํ˜„ํ•œ๋‹ค [5, 18]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š” ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฏธ๋ž˜ ๊ธฐ๋Šฅ๊นŒ์ง€ ํฌํ•จํ•˜์ง€ ์•Š๊ณ (YAGNI), ๋Œ€์‹  ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์‰ฝ๊ฒŒ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋„๋ก ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ํ™œ์šฉํ•œ OCP ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค [7, 9]. - **Operation / Maintenance:** ESLint ๋ฐ Prettier์™€ ๊ฐ™์€ ๋„๊ตฌ์™€ Husky๋ฅผ ์—ฐ๋™ํ•˜์—ฌ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ฝ”๋“œ๊ฐ€ ์ปค๋ฐ‹๋˜๊ธฐ ์ „ Clean Code ๊ทœ์น™๊ณผ ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™์ด ์ž๋™ ์ค€์ˆ˜๋˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค [19]. - **Learning Path:** ์ฒ˜์Œ React๋ฅผ ๋ฐฐ์šธ ๋•Œ๋Š” KISS ์›์น™์— ์ž…๊ฐํ•œ ๋‹จ์ˆœํ•œ ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ์„ ์—ฐ์Šตํ•˜๊ณ , ์ ์ฐจ DRY๋ฅผ ์œ„ํ•œ ์ปค์Šคํ…€ ํ›… ๋ถ„๋ฆฌ๋ฅผ ๊ฑฐ์ณ SOLID ์›์น™์ด ๊ฒฐํ•ฉ๋œ ๋Œ€๊ทœ๋ชจ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋กœ ํ•™์Šต์„ ํ™•์žฅํ•œ๋‹ค. - **My Project Relevance:** ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐฉ๋Œ€ํ•œ ๊ฐ์ฒด ์†์„ฑ์ด props๋กœ ์ „๋‹ฌ๋˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ์ ๊ฒ€ํ•˜์—ฌ(ISP ์ ์šฉ), ์ฝ”๋“œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์— ์ฆ‰์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ### Adjacent Topics - [[State Management Architecture]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปดํฌ๋„ŒํŠธ ๋ ˆ๋ฒจ์—์„œ์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ฅผ ๋„˜์–ด, Context API, Zustand, Redux ๋“ฑ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•  ๋•Œ ๊ฐ ๋„๋ฉ”์ธ์˜ ์ƒํƒœ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ(SRP)ํ•˜๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ• ์ง€ ํƒ๊ตฌํ•œ๋‹ค. - [[Frontend Performance Optimization]] - ํ™•์žฅ ๋ฐฉํ–ฅ: Clean Code์™€ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ(์˜ˆ: ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…, ์ง€์—ฐ ๋กœ๋”ฉ)๊ฐ€ React ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ(Core Web Vitals)์„ ์–ด๋–ป๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š”์ง€ ์—ฐ๊ณ„ํ•˜์—ฌ ์กฐ์‚ฌํ•œ๋‹ค. --- *Last updated: 2026-04-30*