# [[Frontend Engineering Governance]] ## ๐Ÿ“Œ Brief Summary Frontend Engineering Governance๋Š” ์ผ๊ด€๋œ ๋„ค์ด๋ฐ ๊ทœ์น™, ํ”„๋กœ์ ํŠธ ํ‘œ์ค€, ์ž๋™ํ™”๋œ ๋ฆฐํŒ… ๋„๊ตฌ ๋ฐ ์—„๊ฒฉํ•œ Git ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ํ˜‘์—… ํšจ์œจ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [1, 2]. ์ˆ˜๋™์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ESLint, Prettier, Husky์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฒ€์ฆ์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค [3]. ์ด๋ฅผ ํ†ตํ•ด ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ์™€ ์•„ํ‚คํ…์ฒ˜์˜ ๋ถ•๊ดด๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [4, 5]. ## ๐Ÿ“– Core Content * **๋„ค์ด๋ฐ ๊ทœ์น™ ๋ฐ ํ‘œ์ค€ํ™” (Naming Conventions):** ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํ™˜๊ฒฝ(์˜ˆ: Linux ๊ธฐ๋ฐ˜ ์šด์˜ ์„œ๋ฒ„)์—์„œ ๋นŒ๋“œ ์‹คํŒจ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ผ ๋ฐ ํด๋” ์ด๋ฆ„์€ `kebab-case`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [6]. ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” `PascalCase`, ์‚ฌ์šฉ์ž ์ •์˜ ํ›…(Custom Hooks)๊ณผ ์ผ๋ฐ˜ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜๋Š” `camelCase`, ์ƒ์ˆ˜๋Š” `UPPER_SNAKE_CASE`๋กœ ํ‘œ์ค€ํ™”ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ํŒŒ์ผ์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค [3, 7-9]. * **์ž๋™ํ™”๋œ ํˆด ๊ธฐ๋ฐ˜ ๊ฑฐ๋ฒ„๋„Œ์Šค (Governance through Tooling):** ์ˆ˜๋™์ ์ธ ์ฝ”๋“œ ํ‘œ์ค€ ๊ฐ•์ œ๋Š” ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ํ˜„๋Œ€์ ์ธ ํ”„๋กœ์ ํŠธ๋Š” ESLint์™€ Prettier๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์œ„๋ฐ˜ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ์ฐพ์•„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค [3]. ํŠนํžˆ ESLint ๊ทœ์น™์„ ๊ตฌ์„ฑํ•˜์—ฌ ํŠน์ • ์ž„ํฌํŠธ ํŒจํ„ด(์˜ˆ: ํ•œ ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์˜ ๋‚ด๋ถ€๋ฅผ ์ง์ ‘ ์ž„ํฌํŠธํ•˜๋Š” ๊ฒƒ)์„ ๊ธˆ์ง€ํ•จ์œผ๋กœ์จ Feature-Sliced Design(FSD)๊ณผ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜์˜ ๊ณ„์ธต์  ๊ฒฝ๊ณ„๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. * **Git ํ›…(Git Hooks)์„ ํ†ตํ•œ ์‚ฌ์ „ ๋ฐฉ์ง€:** Husky์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ปค๋ฐ‹๋˜๊ธฐ ์ „์— ๋ฆฐํŒ…, ์ฝ”๋“œ ํฌ๋งทํŒ…, ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค [3]. ์ด๋ฅผ ํ†ตํ•ด ํ’ˆ์งˆ์ด ๋‚ฎ์€ ์ฝ”๋“œ๋‚˜ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•œ ์ฝ”๋“œ๊ฐ€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค [3]. * **ํ˜‘์—… ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ Git ๊ฑฐ๋ฒ„๋„Œ์Šค (Git Governance):** ๊ฐœ๋ฐœ์ž๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ  ์งง์€ ์ˆ˜๋ช…์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature Branch)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋™๋ฃŒ์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ CI/CD ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•œ ํ›„์—๋งŒ ๋ณ‘ํ•ฉ(Merge)ํ•ฉ๋‹ˆ๋‹ค [4]. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” 'Conventional Commits' ๊ทœ๊ฒฉ(`feat:`, `fix:`, `docs:`, `refactor:`, `chore:`)์„ ์ค€์ˆ˜ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ž๋™ํ™”๋ฅผ ๋•์Šต๋‹ˆ๋‹ค [10]. ๋˜ํ•œ, ์ถ”์ ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ธŒ๋žœ์น˜ ์ด๋ฆ„๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ํ‹ฐ์ผ“ ID(์˜ˆ: `PROJ-123`)๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค [11, 12]. * **์‹œ๊ฐ์  ๋ฆฌ๋ทฐ ๋ฐ PR ํ’ˆ์งˆ ๊ด€๋ฆฌ (Visual Reviews):** ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋Š” ๋‹จ์ผ ์ž‘์—…์— ์ดˆ์ ์„ ๋งž์ถฐ ์ž‘๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [10]. Storybook ๋ฐ Chromatic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜์—ฌ, PR์ด ์—ด๋ฆด ๋•Œ๋งˆ๋‹ค ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual regression testing)๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์˜๋„์น˜ ์•Š์€ UI ๋ณ€๊ฒฝ์ด ์—†๋Š”์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค [13-15]. ## โš–๏ธ Trade-offs & Caveats ๊ฐ•๋ ฅํ•œ ๋ฆฐํŒ… ๊ทœ์น™ ๋ฐ ์ž๋™ํ™”๋œ ๊ฑฐ๋ฒ„๋„Œ์Šค๋Š” ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์— ๋„๊ตฌ ์„ค์ •(ESLint, Husky, CI ์—ฐ๋™ ๋“ฑ)์— ๋งŽ์€ ์‹œ๊ฐ„ ํˆฌ์ž๋ฅผ ์š”๊ตฌํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋‹ค์†Œ ๊ฐ€ํŒŒ๋ฅธ ๋Ÿฌ๋‹ ์ปค๋ธŒ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 16]. ์—„๊ฒฉํ•œ ๊ทœ์น™์œผ๋กœ ์ธํ•ด ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด๋‚˜ ํ”„๋กœํ† ํƒ€์ดํ•‘ ์‹œ์—๋„ ๋ถ€๊ฐ€์ ์ธ ๋ฆฐํŠธ ์—๋Ÿฌ ์ˆ˜์ • ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™ ์ค€์ˆ˜๊ฐ€ ๊ฐ•์ œ๋˜์–ด ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. ๋˜ํ•œ, ์ž‘์€ ๊ทœ๋ชจ์˜ ํŒ€์ด๋‚˜ ๋‹จ์ˆœํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ Git Flow๋‚˜ ๊ณผ๋„ํ•œ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์„ค์ •์€ ๋ถˆํ•„์š”ํ•œ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ(Overhead)๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํŒ€์˜ ์„ฑ์ˆ™๋„์™€ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋งž๋Š” ์ ์ ˆํ•œ ์ˆ˜์ค€์˜ ๊ทœ์น™(์˜ˆ: ๋‹จ์ˆœํ•œ Feature-Branch ์›Œํฌํ”Œ๋กœ์šฐ)์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค [17, 18]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A (์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ )] * [[Feature-Sliced Design (FSD)]] * ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ์˜ ์Šค์ฝ”ํ”„์™€ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ณ  ๊ณ„์ธต ๊ฐ„์˜ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ทœ์น™์œผ๋กœ ๊ฐ•์ œํ•ด์•ผ ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [19, 20]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ESLint ๊ทœ์น™์„ ํ†ตํ•ด ๋ชจ๋“ˆ ๊ฐ„ ์ž„ํฌํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œํ•œํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์  ๋ถ•๊ดด๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์‹ค์งˆ์  ์ดํ•ด [3]. * [[Conventional Commits]] * ์—ฐ๊ฒฐ ์ด์œ : ๋ช…ํ™•ํ•œ Git ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ์ฑ„ํƒ๋˜๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ํ‘œ์ค€์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [10]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒ€ ์ „์ฒด์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ๋ฆด๋ฆฌ์Šค ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ• [10, 21]. #### [๊ด€๊ณ„ ์œ ํ˜• B (๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ)] * [[ESLint and Prettier]] * ์—ฐ๊ฒฐ ์ด์œ : ์ˆ˜๋™ ๋ฆฌ๋ทฐ์˜ ๋น„ํšจ์œจ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ฝ”๋”ฉ ํ‘œ์ค€๊ณผ ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™์„ ์ž๋™์œผ๋กœ ๊ฐ•์ œํ•˜๋Š” ๊ฑฐ๋ฒ„๋„Œ์Šค์˜ ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [3]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ”„๋กœ์ ํŠธ ๋‚ด ๋„ค์ด๋ฐ ๊ทœ์น™ ์ผ๊ด€์„ฑ ์œ ์ง€ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ์œ„๋ฐ˜ ๋ฐฉ์ง€๋ฅผ ์ฝ”๋“œ๋กœ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ• [3]. * [[Husky]] * ์—ฐ๊ฒฐ ์ด์œ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „(Pre-commit)์— ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ทœ์น™(๋ฆฐํŒ…, ํฌ๋งทํŒ…)์„ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ํ†ต๊ณผํ•˜๋„๋ก ํ›…(Hook)์„ ๊ฑธ์–ด์ฃผ๋Š” ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ž˜๋ชป๋œ ์ฝ”๋“œ๊ฐ€ ์›๊ฒฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ํ‘ธ์‹œ๋˜๋Š” ๊ฒƒ์„ ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ [3]. * [[Visual Regression Testing (Chromatic)]] * ์—ฐ๊ฒฐ ์ด์œ : ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ UI๊ฐ€ ๊นจ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR) ๋‹จ๊ณ„์—์„œ ๊ฒ€์ฆํ•˜๋Š” ์‹œ๊ฐ์  ํ’ˆ์งˆ ๊ฑฐ๋ฒ„๋„Œ์Šค ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค [13, 15]. * ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Storybook๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ์ธ๊ฐ„์ด ๋†“์น˜๊ธฐ ์‰ฌ์šด ํ”ฝ์…€ ๋‹จ์œ„์˜ ์‹œ๊ฐ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๋Š” ์›๋ฆฌ [22, 23]. ### Deeper Research Questions * ESLint๋ฅผ ํ™œ์šฉํ•ด Feature-Sliced Design์˜ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ(Unidirectional dependencies) ๊ทœ์น™์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๊ณ  ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? * Husky์™€ ๊ฐ™์€ Git ํ›… ๋„๊ตฌ๋ฅผ ๋„์ž…ํ–ˆ์„ ๋•Œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜(Developer Experience)์„ ์ €ํ•ดํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ํ•„์ˆ˜ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ์˜ ์†๋„ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? * ์†Œ๊ทœ๋ชจ 3์ธ ํŒ€์—์„œ ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํŒ€์œผ๋กœ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ Git ๋ธŒ๋žœ์นญ ์ „๋žต๊ณผ ๋ฆฌ๋ทฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ทœ์น™์€ ๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ์ง„ํ™”ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? * ๋‹จ์ผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ฐฉ๋Œ€ํ•œ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ(Monorepo), ๋„๋ฉ”์ธ๋ณ„ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ทœ์น™์„ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ•˜์—ฌ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? * ๊ธฐ์กด์˜ ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ(๊ฑฐ๋ฒ„๋„Œ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ)์— ์ž๋™ํ™”๋œ ๋ฆฐํŒ…, ๋„ค์ด๋ฐ ๊ทœ์น™, ํ‹ฐ์ผ“ ID ์‹œ์Šคํ…œ์„ ์—…๋ฌด ์ค‘๋‹จ ์—†์ด ์ ์ง„์ ์œผ๋กœ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts * **Implementation:** ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ธํŒ… ์‹œ Prettier, ESLint, Husky๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ •์˜ํ•˜๊ณ , ๊ฐœ๋ฐœ์ž์˜ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ž๋™์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ํฌ๋งทํŒ… ๋ฐ ๊ฒ€์ฆ๋˜๋„๋ก ๋‚ด์žฌํ™”ํ•ฉ๋‹ˆ๋‹ค [3]. * **System Design:** FSD์™€ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ํ•˜์œ„ ๊ณ„์ธต์ด ์ƒ์œ„ ๊ณ„์ธต์„ ์ž„ํฌํŠธํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์‹œ์Šคํ…œ์ ์ธ ๋ฆฐํŠธ(Lint) ๋ฃฐ์„ ํ•จ๊ป˜ ์„ค๊ณ„ํ•˜์—ฌ ์•„ํ‚คํ…์ฒ˜์˜ ์˜๋„๊ฐ€ ๋ฌด๋„ˆ์ง€์ง€ ์•Š๊ฒŒ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค [3]. * **Operation / Maintenance:** PR(Pull Request) ํ…œํ”Œ๋ฆฟ๊ณผ Conventional Commits์„ ์˜๋ฌดํ™”ํ•˜๊ณ , ๋ธŒ๋žœ์น˜๋ช…์— ์ด์Šˆ ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ(์˜ˆ: `feature/PROJ-123-user-auth`)๋ฅผ ์‚ฝ์ž…ํ•˜๊ฒŒ ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ ์‹œ ๋ณ€๊ฒฝ ์ด๋ ฅ๊ณผ ๊ธฐํš ์˜๋„๋ฅผ ์‰ฝ๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜ํ•ฉ๋‹ˆ๋‹ค [10, 24]. * **Learning Path:** React ๋ฌธ๋ฒ•๊ณผ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ๊ณ„๋ฅผ ์ตํžŒ ํ›„, ํ˜‘์—…์„ ์œ„ํ•œ ํด๋ฆฐ ์ฝ”๋“œ ์›์น™๊ณผ Git ์ „๋žต์„ ํ•™์Šตํ•˜๊ณ , ์ด๋ฅผ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ๊ฐ•์ œํ•˜๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ ๊ตฌ์ถ•(ESLint ์„ค์ • ๋“ฑ)์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ณผ์ •์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [3, 25]. * **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ์•ž์œผ๋กœ ๋„์ž…๋  ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœ์ž ๊ฐ„ ์ฝ”๋“œ ์Šคํƒ€์ผ ์ถฉ๋Œ๊ณผ ๋ถˆ๋ช…ํ™•ํ•œ ์ปค๋ฐ‹ ๋กœ๊ทธ๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ง์ ‘ Git ํ›…์„ ์„ค์ •ํ•˜๊ณ  PR ๊ทœ์น™์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 26]. ### Adjacent Topics * [[Clean Code Principles (SOLID, DRY, KISS, YAGNI)]] * ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ฑฐ๋ฒ„๋„Œ์Šค๊ฐ€ ๊ทœ์น™์˜ "๋„๊ตฌ์  ๊ฐ•์ œ"๋ผ๋ฉด, ํด๋ฆฐ ์ฝ”๋“œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ทธ ๊ตฌ์กฐ ์•ˆ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ค€์ˆ˜ํ•ด์•ผ ํ•  ๊ทผ๋ณธ์ ์ธ ์‚ฌ๊ณ ๋ฐฉ์‹๊ณผ ์ฒ ํ•™์„ ์ดํ•ดํ•˜๋„๋ก ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. * [[CI/CD Pipelines]] * ํ™•์žฅ ๋ฐฉํ–ฅ: ๋กœ์ปฌ ํ™˜๊ฒฝ์˜ Git ํ›…์„ ๋„˜์–ด ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ(GitHub Actions ๋“ฑ)์—์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ฆ, ๋นŒ๋“œ, ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌํ•˜๋Š” ์ง€์†์  ํ†ตํ•ฉ/๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ฐœ๋…์œผ๋กœ ์ดํ•ด๋ฅผ ๋„“ํž™๋‹ˆ๋‹ค. --- *Last updated: 2026-04-30*