diff --git a/10_Wiki/Topics/Business_Strategy/E-commerce Platforms.md b/10_Wiki/Topics/Business_Strategy/E-commerce Platforms.md new file mode 100644 index 00000000..b3ff3f19 --- /dev/null +++ b/10_Wiki/Topics/Business_Strategy/E-commerce Platforms.md @@ -0,0 +1,22 @@ +# [[E-commerce Platforms]] + +## ๐Ÿ“Œ Brief Summary +E-commerce Platforms(์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ)์€ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒฐ์ œ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์˜จ๋ผ์ธ ์ƒ๊ฑฐ๋ž˜๋ฅผ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ์€ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)๋ฅผ ํ†ตํ•œ ์ œํ’ˆ ๋ฐœ๊ฒฌ, ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์„ ํ†ตํ•œ ๊ตฌ๋งค ์ „ํ™˜์œจ ํ–ฅ์ƒ, ๊ทธ๋ฆฌ๊ณ  ์žฌ๊ณ  ๋ฐ ๊ฐ€๊ฒฉ ๋ณ€๋™์„ ๋ฐ˜์˜ํ•˜๋Š” ์ตœ์‹  ๋ฐ์ดํ„ฐ์˜ ์œ ์ง€์ž…๋‹ˆ๋‹ค [3-5]. ์†Œ์Šค ์ž๋ฃŒ์— ๋”ฐ๋ฅด๋ฉด, ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์€ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด SSR(์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง), ISR(์ ์ง„์  ์ •์  ์žฌ์ƒ์„ฑ)๊ณผ ๊ฐ™์€ ์ตœ์ ํ™”๋œ ์›น ๋ Œ๋”๋ง ์ „๋žต๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(CBA)๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค [2, 6]. + +## ๐Ÿ“– Core Content +* **์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์›น ๋ Œ๋”๋ง ์ „๋žต (Web Rendering Strategies):** + * **SSR (Server-Side Rendering):** ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์˜ ์ œํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€, ์นดํ…Œ๊ณ ๋ฆฌ ํƒ์ƒ‰ ๋ฐ ๊ฐœ๋ณ„ ์ œํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๋ Œ๋”๋ง ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค [3]. ์„œ๋ฒ„์—์„œ ์ œํ’ˆ์˜ ์„ธ๋ถ€ ์ •๋ณด, ๊ฐ€๊ฒฉ, ๊ตฌ๋งค ๋ฒ„ํŠผ์ด ํฌํ•จ๋œ ์™„์ „ํ•œ HTML์„ ์ฆ‰์‹œ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ๋”ฉ์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณด์—ฌ์ฃผ์–ด ๊ตฌ๋งค ์ „ํ™˜์œจ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [5]. ๋˜ํ•œ ํ›Œ๋ฅญํ•œ SEO๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ œํ’ˆ ๊ฒ€์ƒ‰ ๋…ธ์ถœ์— ์œ ๋ฆฌํ•˜๋ฉฐ, ํ•ญ์ƒ ์ตœ์‹ ์˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ฒฐ์ œ(Checkout) ํŽ˜์ด์ง€์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [3, 7]. + * **SSG (Static Site Generation):** ์ œํ’ˆ ๋ผ์ธ์ด ๋ณ€๋™ ์—†์ด ์•ˆ์ •์ ์ด๊ณ  ์ฝ˜ํ…์ธ  ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๊ฐ€ ๊ทœ์น™์ ์ธ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ ํŽ˜์ด์ง€์— ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8]. + * **ISR (Incremental Static Regeneration):** ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์— ์ตœ์ ์˜ ๊ท ํ˜•(์„ฑ๋Šฅ๊ณผ ์ตœ์‹ ์„ฑ)์„ ์ œ๊ณตํ•˜๋Š” ๊ณ ๋„ํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [4, 6]. ๋Œ€๊ทœ๋ชจ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ดˆ๊ณ ์†์œผ๋กœ ๋กœ๋”ฉํ•˜๋Š” ๋™์‹œ์—, ์ „์ฒด ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์žฌ๊ณ  ์ •๋ณด์™€ ๊ฐ€๊ฒฉ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 6, 9]. + +* **์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ (Component-Based Architecture):** + * ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์€ ์ œํ’ˆ ๋ชฉ๋ก(Product listings), ๊ฒฐ์ œ ๊ฒŒ์ดํŠธ์›จ์ด(Payment gateways), ์žฅ๋ฐ”๊ตฌ๋‹ˆ(Shopping carts), ๊ณ ๊ฐ ๋ฆฌ๋ทฐ ๋ชจ๋“ˆ ๋“ฑ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์กฐ๋ฆฝ์œผ๋กœ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค [2]. + * ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์‹ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค๊ฐ€ ํ™•์žฅ๋จ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๊ฒฐ์ œ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œํ’ˆ ์ถ”์ฒœ ๊ธฐ๋Šฅ์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•  ๋•Œ, ํ”Œ๋žซํผ ์ „์ฒด์— ์ค‘๋‹จ์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋งŒ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค [2, 10]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Server-Side Rendering (SSR)]], [[Incremental Static Regeneration (ISR)]], [[Component-Based Architecture]], [[Search Engine Optimization (SEO)]] +- **Projects/Contexts:** ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ๋„ ๊ฒ€์ƒ‰ ์—”์ง„ ๋…ธ์ถœ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ /๊ฐ€๊ฒฉ ๋ณ€๋™์„ ๋ฐ˜์˜ํ•ด์•ผ ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ Œ๋”๋ง ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ• ๋งฅ๋ฝ [3, 4, 7]. +- **Contradictions/Notes:** ์ œ๊ณต๋œ ์†Œ์Šค๋Š” ์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ์˜ ๋ฐฑ์—”๋“œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ์šด์˜ ๋ชจ๋ธ๋ณด๋‹ค๋Š” ์ฃผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ์˜ ํ™”๋ฉด ๋ Œ๋”๋ง ์ตœ์ ํ™”(SSR/ISR)์™€ ์•„ํ‚คํ…์ฒ˜(์ปดํฌ๋„ŒํŠธํ™”) ์ธก๋ฉด์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์–ด, ๊ฒฐ์ œ ์‹œ์Šคํ…œ์˜ ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ ๋“ฑ์— ๋Œ€ํ•ด์„œ๋Š” ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Business_Strategy/Meta Quest Store.md b/10_Wiki/Topics/Business_Strategy/Meta Quest Store.md new file mode 100644 index 00000000..04477daf --- /dev/null +++ b/10_Wiki/Topics/Business_Strategy/Meta Quest Store.md @@ -0,0 +1,18 @@ +# [[Meta Quest Store]] + +## ๐Ÿ“Œ Brief Summary +Meta Quest Store๋Š” Meta์—์„œ ์šด์˜ํ•˜๋Š” ํ”Œ๋žซํผ์œผ๋กœ, ์ œ๊ณต๋œ ๋ฌธ์„œ ๋‚ด์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋„๊ตฌ์ธ React Compiler๋ฅผ ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์„ฑ๊ณต์ ์œผ๋กœ ๋„์ž…ํ•œ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€๋กœ๋งŒ ์งง๊ฒŒ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค [1, 2]. ํ•ด๋‹น ์Šคํ† ์–ด์˜ ๊ตฌ์ฒด์ ์ธ ์„œ๋น„์Šค ๋ชฉ์ , ํŒ๋งค ํ•ญ๋ชฉ, ํ˜น์€ ์ „๋ฐ˜์ ์ธ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ๋Š” ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. + +## ๐Ÿ“– Core Content +- **React Compiler์˜ ์„ฑ๊ณต์  ๋ฐฐํฌ**: Meta๋Š” ๋Œ€์ค‘์—๊ฒŒ ๊ณต๊ฐœํ•˜๊ธฐ ์ „ ์ž์‚ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๊ณ„ ์ „๋ฐ˜์— ๊ฑธ์ณ React Compiler๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ, Instagram๊ณผ ํ•จ๊ป˜ Meta Quest Store์— ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค [1, 2]. +- **๋กœ๋”ฉ ์†๋„ ์ง€ํ‘œ ๊ฐœ์„ **: ์ˆ˜๋™ ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Manual Memoization) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” React Compiler ์ ์šฉ ๊ฒฐ๊ณผ, Quest Store์˜ ๋กœ๋”ฉ ์†๋„๋Š” ์ตœ์†Œ 4% ์ด์ƒ ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ, ์ดˆ๊ธฐ ๋กœ๋”ฉ(initial loads) ์‹œ๊ฐ„์€ ์ตœ๋Œ€ 12%๊นŒ์ง€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [2]. +- **์ƒํ˜ธ์ž‘์šฉ(Interaction)์˜ ์ฆ‰๊ฐ์„ฑ**: ์ตœ์ ํ™”์˜ ๊ฒฐ๊ณผ๋กœ Quest Store ๋‚ด์˜ ๋ณต์žกํ•œ ์ œํ’ˆ ํŽ˜์ด์ง€(complex product pages)๋“ค์ด ๋ˆˆ์— ๋„๊ฒŒ ๋น ๋ฅด๊ฒŒ ๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [1]. ํŠนํžˆ ์ผ๋ถ€ ์ƒํ˜ธ์ž‘์šฉ์€ 2๋ฐฐ ์ด์ƒ ๋นจ๋ผ์ ธ ์‚ฌ์šฉ์ž๋“ค์ด ๊ฑฐ์˜ ์ฆ‰๊ฐ์ (instantaneous)์ด๋ผ๊ณ  ๋А๋‚„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค [1, 2]. +- ์ด์™ธ์— ํ”Œ๋žซํผ ์ž์ฒด์˜ ์ƒ์—…์  ๊ธฐ๋Šฅ์ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋“ฑ์— ๋Œ€ํ•ด์„œ๋Š” ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[React Compiler]], [[Performance Optimization]] +- **Projects/Contexts:** [[Meta's Internal Testing (React Compiler ์„ฑ๋Šฅ ๊ฒ€์ฆ)]] +- **Contradictions/Notes:** Meta Quest Store์— ๋Œ€ํ•œ ๋…๋ฆฝ์ ์ด๊ณ  ํฌ๊ด„์ ์ธ ์„ค๋ช…์€ ์ œ๊ณต๋œ ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์˜ค์ง React Compiler์˜ ์ ์šฉ์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ง€ํ‘œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋‹จํŽธ์ ์ธ ์‚ฌ๋ก€(Case Study)๋กœ๋งŒ ํ™œ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Business_Strategy/SaaS ํ”Œ๋žซํผ ๋ฐ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ ๊ฐœ๋ฐœ.md b/10_Wiki/Topics/Business_Strategy/SaaS ํ”Œ๋žซํผ ๋ฐ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ ๊ฐœ๋ฐœ.md new file mode 100644 index 00000000..6a68f440 --- /dev/null +++ b/10_Wiki/Topics/Business_Strategy/SaaS ํ”Œ๋žซํผ ๋ฐ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ ๊ฐœ๋ฐœ.md @@ -0,0 +1,23 @@ +# [[SaaS ํ”Œ๋žซํผ ๋ฐ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ ๊ฐœ๋ฐœ]] + +## ๐Ÿ“Œ Brief Summary +SaaS ํ”Œ๋žซํผ๊ณผ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ, ํ’๋ถ€ํ•œ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ, ๊ทธ๋ฆฌ๊ณ  ๋งค๋„๋Ÿฌ์šด ํ™”๋ฉด ์ „ํ™˜์ด ํ•„์ˆ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์€ ๋Œ€๋ถ€๋ถ„ ๋กœ๊ทธ์ธ ๋ฒฝ(Authentication wall) ๋’ค์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)์˜ ์ค‘์š”์„ฑ์ด ๋‚ฎ์•„ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)์ด ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๋ Œ๋”๋ง ๋ฐฉ์‹์œผ๋กœ ํ‰๊ฐ€๋ฐ›์Šต๋‹ˆ๋‹ค [1, 3, 4]. ๋˜ํ•œ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๋ณต์žกํ•œ UI ์—…๋ฐ์ดํŠธ ์‹œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์™€ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrent Rendering) ๊ฐ™์€ ์ตœ์ ํ™” ๊ธฐ์ˆ ์ด ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [5, 6]. + +## ๐Ÿ“– Core Content +- **์ตœ์ ์˜ ๋ Œ๋”๋ง ์ „๋žต (CSR์˜ ํ™œ์šฉ):** + SaaS ํ”Œ๋žซํผ ๋ฐ ์‚ฌ์šฉ์ž ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์ถ• ์‹œ์—๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)์ด ์ฃผ๋กœ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [1, 2]. ๋Œ€์‹œ๋ณด๋“œ ํŠน์„ฑ์ƒ ๊ฒ€์ƒ‰ ์—”์ง„ ์ธ๋ฑ์‹ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ณ  ๋™์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1, 3]. ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋Š” ๋‹ค์†Œ ๋А๋ฆด ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ ์œผ๋กœ ๋ผ์šฐํŒ…๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„น์…˜์„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ณ  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์•ฑ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [2, 3, 7]. ์ผ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์ด ์ค‘์š”ํ•œ ๋Œ€์‹œ๋ณด๋“œ์—๋Š” CSR์„, ๊ทธ ์™ธ ๋ฌธ์„œ๋‚˜ ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€์—๋Š” SSG๋‚˜ SSR์„ ์‚ฌ์šฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค [8, 9]. + +- **๋ฐ์ดํ„ฐ ์ง‘์•ฝ์  ๋Œ€์‹œ๋ณด๋“œ์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”:** + - **์ž๋™ ๋ฐฐ์นญ(Automatic Batching):** ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์€ ๋Œ€์‹œ๋ณด๋“œ์—์„œ React 18์˜ ์ž๋™ ๋ฐฐ์นญ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋‹จ์ผ ๋ฆฌ๋ Œ๋”๋ง์œผ๋กœ ๋ฌถ์—ฌ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค [10, 11]. ๋‚ด๋ถ€ ์‚ฌ๋ก€ ์—ฐ๊ตฌ์— ๋”ฐ๋ฅด๋ฉด, ์ด๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ ๋ถ€ํ•˜ ์‹œ ์ด ๋ Œ๋”๋ง ํšŸ์ˆ˜๋ฅผ ์•ฝ 40% ์ค„์ด๊ณ  ํ”„๋ ˆ์ž„ ์†๋„๋ฅผ 25% ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12, 13]. + - **๋™์‹œ์„ฑ ๊ธฐ๋Šฅ(Concurrent Features):** ๋Œ€์‹œ๋ณด๋“œ์—์„œ 10,000๊ฐœ ์ด์ƒ์˜ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ฑฐ๋‚˜ ์ฐจํŠธ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๋“ฑ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—… ์‹œ UI๊ฐ€ ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5, 14]. `useTransition`์ด๋‚˜ `useDeferredValue` ํ›…์„ ์‚ฌ์šฉํ•ด ๋ฌด๊ฑฐ์šด ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์—ฐ์‹œํ‚ค๋ฉด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  UI์˜ ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์‘์„ฑ(์˜ˆ: ํƒ€์ดํ•‘ ์‹œ ์ž…๋ ฅ ์ง€์—ฐ ๋ฐฉ์ง€)์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 14, 15]. + +- **์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(CBA)์˜ ์ ์šฉ:** + ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋Œ€์‹œ๋ณด๋“œ๋Š” ์ฐจํŠธ, ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”, ๊ทธ๋ž˜ํ”„ ๋“ฑ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ๊ตฌ์ถ•ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [6, 16]. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ๋ณ„ ๋ชจ๋“ˆํ™”๊ฐ€ ์ด๋ฃจ์–ด์ ธ ์ผ๋ถ€ ๊ธฐ๋Šฅ(์˜ˆ: ๊ฒฐ์ œ ํ”„๋กœ์„ธ์„œ ๊ต์ฒด, ํŠน์ • ์œ„์ ฏ ์—…๋ฐ์ดํŠธ)๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค [17, 18]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Client-Side Rendering (CSR)]], [[Component-Based Architecture]], [[Automatic Batching]], [[Concurrent Rendering]] +- **Projects/Contexts:** [[๋ฐ์ดํ„ฐ ์ง‘์•ฝ์  ๋Œ€์‹œ๋ณด๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์‚ฌ๋ก€]], [[Sanity Studio]] +- **Contradictions/Notes:** React ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC) ์ ์šฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์†Œ์Šค ๊ฐ„ ์‹œ๊ฐ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์†Œ์Šค๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ ๋””์Šคํ”Œ๋ ˆ์ด(์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ, ๋‹จ์ˆœ ๋Œ€์‹œ๋ณด๋“œ)์— RSC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ JavaScript ๋ฒˆ๋“ค์„ 40-60%๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€๋งŒ [19], ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ๋Š” ๋นˆ๋ฒˆํ•œ ๋ฆฌ๋ Œ๋”๋ง๊ณผ ๋กœ์ปฌ ์ƒํƒœ, ์ง์ ‘์ ์ธ ๋ธŒ๋ผ์šฐ์ € API์— ํฌ๊ฒŒ ์˜์กดํ•˜๋Š” '๋ณต์žกํ•œ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ๊ณ ๋„์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค'์—๋Š” RSC๊ฐ€ ๋ถ€์ ํ•ฉ(Poor fit)ํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค [20]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Business_Strategy/์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ (E-commerce Platforms).md b/10_Wiki/Topics/Business_Strategy/์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ (E-commerce Platforms).md new file mode 100644 index 00000000..18a11cd5 --- /dev/null +++ b/10_Wiki/Topics/Business_Strategy/์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ (E-commerce Platforms).md @@ -0,0 +1,24 @@ +# [[์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ (E-commerce Platforms)]] + +## ๐Ÿ“Œ Brief Summary +์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์€ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ, ์žฌ๊ณ  ๊ด€๋ฆฌ, ๊ฒฐ์ œ ์‹œ์Šคํ…œ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋„์˜ ํ™•์žฅ์„ฑ๊ณผ ๋ Œ๋”๋ง ์ตœ์ ํ™”๊ฐ€ ์š”๊ตฌ๋˜๋Š” ๋ณต์žกํ•œ ์›น ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค [1-3]. ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)์™€ ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„, ๊ทธ๋ฆฌ๊ณ  ์žฅ๋ฐ”๊ตฌ๋‹ˆ์™€ ๊ฐ™์€ ๋™์  ์ƒํ˜ธ์ž‘์šฉ ๊ฐ„์˜ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค [1, 4, 5]. ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ˜„๋Œ€์˜ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์€ SSR, ISR, SSG์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ์ „๋žต๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(CBA)๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [6-8]. + +## ๐Ÿ“– Core Content +* **์ „์ž์ƒ๊ฑฐ๋ž˜๋ฅผ ์œ„ํ•œ ์ตœ์ ์˜ ๋ Œ๋”๋ง ์ „๋žต:** + * **์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง (SSR):** ์ œํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€, ์นดํ…Œ๊ณ ๋ฆฌ ํƒ์ƒ‰ ๋ฐ ๊ฐœ๋ณ„ ์ œํ’ˆ ์ƒ์„ธ ๋ทฐ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ๊ฒ€์ƒ‰ ์—”์ง„ ๊ฐ€์‹œ์„ฑ(SEO)์„ ๋ณด์žฅํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ฒ˜๋ฆฌ ์ง€์—ฐ ์—†์ด ์ œํ’ˆ์˜ ๊ฐ€๊ฒฉ๊ณผ ์žฌ๊ณ  ๋“ฑ์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์ „ํ™˜์œจ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [1]. + * **์ ์ง„์  ์ •์  ์žฌ์ƒ์„ฑ (ISR):** ๋น ๋ฅธ ์ œํ’ˆ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ ์ „์ฒด ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š” ์—†์ด ์žฌ๊ณ  ์ •๋ณด ๋ฐ ๊ฐ€๊ฒฉ์„ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ๋Œ€๊ทœ๋ชจ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์— ์™„๋ฒฝํ•œ ๊ท ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [4, 6, 7]. + * **์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ (SSG):** ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ  ๋ณ€๊ฒฝ๋ณด๋‹ค๋Š” ์˜ˆ์•ฝ๋œ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์ œํ’ˆ ์ •๋ณด๊ฐ€ ์ฃผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์•ˆ์ •์ ์ธ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ ํŽ˜์ด์ง€์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [9, 10]. + * **ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง (CSR):** ์†Œ์…œ ๋ฏธ๋””์–ด๋‚˜ ์ „์ž์ƒ๊ฑฐ๋ž˜ ์›น์‚ฌ์ดํŠธ์ฒ˜๋Ÿผ ๊ณ ๋„์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ถ€๋ถ„์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [5]. + +* **์ „์ž์ƒ๊ฑฐ๋ž˜์—์„œ์˜ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜ (CBA) ํ™œ์šฉ:** + * ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์€ ์ œํ’ˆ ๋ชฉ๋ก, ๊ฒฐ์ œ ๊ฒŒ์ดํŠธ์›จ์ด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ณ ๊ฐ ๋ฆฌ๋ทฐ ๋ชจ๋“ˆ๊ณผ ๊ฐ™์€ ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์ถ•ํ•˜์—ฌ ์•„ํ‚คํ…์ฒ˜์˜ ๋ชจ๋“ˆํ™”์™€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [2, 3]. + * ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ ์‡ผํ•‘ ์นดํŠธ ์ปดํฌ๋„ŒํŠธ์™€ ๊ฐ™์€ ํŠน์ • ์ธ์Šคํ„ด์Šค๋งŒ ์ถ”๊ฐ€ํ•˜์—ฌ ์›ํ™œํ•œ ์šด์˜์„ ์œ ์ง€ํ•˜๋Š” ๋“ฑ ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [8]. + * ๋งˆ์ผ€ํŒ… ์บ ํŽ˜์ธ์ด๋‚˜ ์‹œ์ฆŒ๋ณ„ ํ”„๋กœ๋ชจ์…˜์— ๋งž์ถฐ ๊ธฐ๋ณธ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ํ…Œ๋งˆ๋ฅผ ์ ์šฉํ•˜์—ฌ ์‚ฌ์ดํŠธ์˜ ๋””์ž์ธ์„ ์‹ ์†ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Server-Side Rendering (SSR)]], [[Incremental Static Regeneration (ISR)]], [[Component-Based Architecture (CBA)]] +- **Projects/Contexts:** [[์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์‹œ์Šคํ…œ (Product Catalogs and Shopping Carts)]] +- **Contradictions/Notes:** ์†Œ์Šค [5]์—์„œ๋Š” ๋†’์€ ์ˆ˜์ค€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•œ ์ „์ž์ƒ๊ฑฐ๋ž˜ ์›น์‚ฌ์ดํŠธ์— CSR์ด ํ”ํžˆ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์†Œ์Šค๋“ค์€ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)์™€ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์ œ๊ณต์˜ ์ค‘์š”์„ฑ ๋•Œ๋ฌธ์— ์ œํ’ˆ ํƒ์ƒ‰ ๋ฐ ์„ธ๋ถ€ ํŽ˜์ด์ง€์—๋Š” SSR ๋˜๋Š” ISR์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ด์ƒ์ ์ด๊ณ  ํ•„์ˆ˜์ ์ด๋ผ๊ณ  ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค [1, 4, 7]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/2026-04-25-Skybound_Vampire_Survivors_Loop_and_Stage_Curve_Preparation.md b/10_Wiki/Topics/Frontend_Mastery/2026-04-25-Skybound_Vampire_Survivors_Loop_and_Stage_Curve_Preparation.md new file mode 100644 index 00000000..04f297a2 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/2026-04-25-Skybound_Vampire_Survivors_Loop_and_Stage_Curve_Preparation.md @@ -0,0 +1,116 @@ +# Skybound Vampire Survivors Loop and Stage Curve Preparation + +์ž‘์„ฑ์ผ: 2026-04-25 23:52 KST + +## ์š”์ฒญ ์š”์•ฝ + +- Skybound๊ฐ€ ๋ฑ€ํŒŒ์ด์–ด ์„œ๋ฐ”์ด๋ฒŒ ๊ณ„์—ด ๊ฒŒ์ž„์ฒ˜๋Ÿผ ๋А๊ปด์ง€๋„๋ก ์žฌ๋ฏธ ์š”์†Œ์™€ ์Šคํ…Œ์ด์ง€๋ณ„ ๋ ˆ๋ฒจ ๊ตฌ์กฐ๋ฅผ ์ค€๋น„ํ•œ๋‹ค. +- ๋‹จ์ˆœํžˆ ์ ์„ ๋งŽ์ด ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์„ฑ์žฅ ์„ ํƒ, ๋ฐ€๋„ ์ƒ์Šน, ์ง„ํ™” ์™„์„ฑ, ๋ณด์Šค ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด์–ด์ง€๋„๋ก ๋งŒ๋“ ๋‹ค. + +## ํ•ต์‹ฌ ๋ฐฉํ–ฅ + +Skybound๋Š” ํƒ‘๋‹ค์šด ์ƒ์กด ์Šˆํ„ฐ์ด์ง€๋งŒ, ๊ธฐ์กด ๊ตฌ์กฐ๋Š” ์Šคํ…Œ์ด์ง€ ์‹œ๊ฐ„์ด ์งง๊ณ  ๋ณด์Šค ์ง„์ž…์ด ๋นจ๋ผ ๋นŒ๋“œ๊ฐ€ ์™„์„ฑ๋˜๊ธฐ ์ „์— ์ „ํˆฌ๊ฐ€ ๋Š๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋ฑ€์„œ๋ฅ˜ ์žฌ๋ฏธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ฃจํ”„๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ๋ฐ˜๋ณต๋˜์–ด์•ผ ํ•œ๋‹ค. + +1. ์ดˆ๋ฐ˜: ์ฒซ ๋ฌด๊ธฐ ์„ ํƒ ํ›„ ์•ฝํ•œ ์ ์„ ๋งŽ์ด ์ฒ˜์น˜ํ•˜๋ฉฐ ๋น ๋ฅด๊ฒŒ 1-2ํšŒ ์„ฑ์žฅํ•œ๋‹ค. +2. ์ค‘๋ฐ˜: ์  ๋ฐ€๋„์™€ ์—˜๋ฆฌํŠธ ์••๋ฐ•์ด ์˜ฌ๋ผ๊ฐ€๋ฉฐ ๊ด‘์—ญ/๊ด€ํ†ต/๋ฐฉ์–ด ์„ ํƒ์˜ ์˜๋ฏธ๊ฐ€ ์ƒ๊ธด๋‹ค. +3. ํ›„๋ฐ˜: ์Šค์›œ๊ณผ ๋ฏธ๋‹ˆ๋ณด์Šค๊ฐ€ ๋“ค์–ด์˜ค๋ฉฐ ๋นŒ๋“œ ์กฐํ•ฉ๊ณผ ์ง„ํ™” ๋ฌด๊ธฐ๊ฐ€ ํ•„์š”ํ•ด์ง„๋‹ค. +4. ๋ณด์Šค: ์™„์„ฑ๋œ ๋นŒ๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค. +5. ๋‹ค์Œ ์Šคํ…Œ์ด์ง€: ๊ฐ™์€ ๋นŒ๋“œ๋ฅผ ์ด์–ด๊ฐ€๋˜ ์  ๋ฐ€๋„, ํŒจํ„ด, ๋ณด์Šค ๊ธฐ๋ฏน์ด ์ƒ์Šนํ•œ๋‹ค. + +## ์ ์šฉํ•œ ๋ณ€๊ฒฝ + +### 8์Šคํ…Œ์ด์ง€ Survivor ํ”„๋กœํ•„ ์ถ”๊ฐ€ + +`CombatTimeline.ts`์— `SURVIVOR_STAGE_PROFILES`๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๊ฐ ์Šคํ…Œ์ด์ง€๋Š” ์•„๋ž˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง„๋‹ค. + +- ์Šคํ…Œ์ด์ง€ ์ด๋ฆ„ +- ์Šคํ…Œ์ด์ง€ ๊ธธ์ด +- ๊ธฐ๋ณธ ๋‚œ์ด๋„ ๋ฐฐ์œจ +- ๋™์‹œ ์  ์ˆ˜ ๊ธฐ์ค€ +- ์Šคํฐ ํ…œํฌ +- ์˜คํ”„๋‹ ์›จ์ด๋ธŒ +- ์••๋ฐ• ์—˜๋ฆฌํŠธ ์›จ์ด๋ธŒ +- ์Šค์›œ ์›จ์ด๋ธŒ +- ํด๋ผ์ด๋งฅ์Šค ์—˜๋ฆฌํŠธ ์›จ์ด๋ธŒ +- ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒดํฌํฌ์ธํŠธ + +### ์Šคํ…Œ์ด์ง€๋ณ„ ๊ตฌ์กฐ + +- Stage 1 `First Contact`: ์ฒซ ๋ฌด๊ธฐ์™€ ๊ธฐ๋ณธ ์ƒ์กด ํ•™์Šต +- Stage 2 `Fast Lanes`: ๋น ๋ฅธ ์ ๊ณผ ์ด๋™ ์••๋ฐ• +- Stage 3 `Ruined Circuit`: ํ˜ผํ•ฉ ํŽธ๋Œ€์™€ ์—˜๋ฆฌํŠธ ์••๋ฐ• +- Stage 4 `Crossfire Grid`: ๊ธธ๋ง‰/๋ผ์ธ ํด๋ฆฌ์–ด ์••๋ฐ• +- Stage 5 `Magma Forge`: ๊ณ ๋ฐ€๋„ ์Šค์›œ ์‹œ์ž‘ +- Stage 6 `Storm Foundry`: ๋นŒ๋“œ ์™„์„ฑ ์š”๊ตฌ +- Stage 7 `Arcane Collapse`: ์ง„ํ™” ๋ฌด๊ธฐ ๊ถŒ์žฅ +- Stage 8 `Final Singularity`: ์™„์„ฑ ๋นŒ๋“œ ๊ฒ€์ฆ + +### ์Šคํ…Œ์ด์ง€ ์‹œ๊ฐ„ ์กฐ์ • + +๊ธฐ์กด Standard ์Šคํ…Œ์ด์ง€๋Š” ์•ฝ 165์ดˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋นŒ๋“œ์—… ์‹œ๊ฐ„์ด ๋ถ€์กฑํ–ˆ๋‹ค. ์ƒˆ ๊ตฌ์กฐ์—์„œ๋Š” Stage 1์ด 240์ดˆ, Stage 8์ด 420์ดˆ๊นŒ์ง€ ์ฆ๊ฐ€ํ•œ๋‹ค. + +์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”Œ๋ ˆ์ด์–ด๋Š” ํ•œ ์Šคํ…Œ์ด์ง€ ์•ˆ์—์„œ ๋‹ค์Œ ๋ฆฌ๋“ฌ์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค. + +- 0-25%: ์„ธํŒ…๊ณผ ์ฒซ ์„ฑ์žฅ +- 25-48%: ์—˜๋ฆฌํŠธ ์••๋ฐ• +- 48-72%: ์Šค์›œ ์••๋ฐ• +- 72%-๋ณด์Šค ์ „: ํด๋ผ์ด๋งฅ์Šค์™€ ๋ฏธ๋‹ˆ๋ณด์Šค +- ๋งˆ์ง€๋ง‰ 35์ดˆ ์ „ํ›„: ๋ณด์Šค์ „ ์ง„์ž… + +### ์Šคํฐ ๋ฐ€๋„ ์กฐ์ • + +- ์  ํ•˜๋“œ์บก์„ 56์—์„œ 76์œผ๋กœ ์˜ฌ๋ ธ๋‹ค. +- ์Šค์›œ ๋ฐฐ์น˜ ๋‹จ์œ„๋ฅผ 6์—์„œ 8๋กœ ์˜ฌ๋ ธ๋‹ค. +- ๊ธฐ๋ณธ ์ ˆ์ฐจ ์Šคํฐ ๊ฐ„๊ฒฉ์„ 96ํ”„๋ ˆ์ž„์—์„œ 84ํ”„๋ ˆ์ž„์œผ๋กœ ์ค„์˜€๋‹ค. + +๋ชฉํ‘œ๋Š” โ€œ๊ฐ€๋งŒํžˆ ์žˆ์–ด๋„ ํด๋ฆฌ์–ดโ€๊ฐ€ ์•„๋‹ˆ๋ผ, ์ ์  ๋ฐ€๋ ค์˜ค๋Š” ์••๋ฐ•์„ ์›€์ง์ž„๊ณผ ๋นŒ๋“œ ์„ ํƒ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. + +### Tac EXP ์ปค๋ธŒ ์กฐ์ • + +๋ฐ”๋‹ฅ EXP ์ ฌ์„ ๋‹ค์‹œ ๋ฟŒ๋ฆฌ์ง€๋Š” ์•Š๊ณ , ์ฒ˜์น˜ ์ฆ‰์‹œ Tac EXP๋ฅผ ์ง€๊ธ‰ํ•˜๋Š” ํ˜„์žฌ ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ–ˆ๋‹ค. ๋‹ค๋งŒ ๋ฑ€์„œ๋ฅ˜ ์„ฑ์žฅ ๋ฆฌ๋“ฌ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ฒ˜์น˜ ๊ฒฝํ—˜์น˜๋ฅผ ์กฐ์ •ํ–ˆ๋‹ค. + +- ์ผ๋ฐ˜ ์ : `+2 TAC` +- ์—˜๋ฆฌํŠธ ์ : `+10 TAC` +- ๋ฏธ๋“œ๋ณด์Šค: `+30 TAC` + +์ดˆ๊ธฐ ์š”๊ตฌ EXP๋Š” `90`์—์„œ `80`์œผ๋กœ ๋‚ฎ์ท„๋‹ค. ๋Œ€์‹  ๋ ˆ๋ฒจ์—… ํ›„ ์ดˆ๊ณผ EXP carryover๋Š” 25%๋งŒ ์œ ์ง€ํ•ด ์—ฐ์† ๋ ˆ๋ฒจ์—… ํญ์ฃผ๋Š” ๋ง‰๋Š”๋‹ค. + +๋ ˆ๋ฒจ ์š”๊ตฌ๋Ÿ‰ ๋ฐฐ์œจ์€ ์•„๋ž˜์ฒ˜๋Ÿผ ์กฐ์ •ํ–ˆ๋‹ค. + +- Level 1-4: `x1.34` +- Level 5-8: `x1.42` +- Level 9-14: `x1.52` +- Level 15+: `x1.62` + +## ์„ค๊ณ„ ์˜๋„ + +์ด๋ฒˆ ๋ณ€๊ฒฝ์€ โ€œVampire Survivors์˜ ์žฌ๋ฏธโ€๋ฅผ ๋‹ค์Œ ์š”์†Œ๋กœ ํ•ด์„ํ–ˆ๋‹ค. + +- ์ ์€ ์ ์  ๋งŽ์•„์ง„๋‹ค. +- ํ”Œ๋ ˆ์ด์–ด๋Š” ๋” ์ž์ฃผ ์„ ํƒํ•˜๊ณ  ๊ฐ•ํ•ด์ง„๋‹ค. +- ์„ ํƒ์—๋Š” ๋นŒ๋“œ ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋‹ค. +- ์ค‘๋ฐ˜ ์ดํ›„์—๋Š” ๊ด‘์—ญ, ๊ด€ํ†ต, ๋ฐฉ์–ด, ๊ธฐ๋™ ์ค‘ ์ตœ์†Œ ํ•˜๋‚˜๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์••๋ฐ•์„ ๋А๋‚€๋‹ค. +- ๋ณด์Šค๋Š” ๋‹จ์ ˆ๋œ ์—”๋”ฉ์ด ์•„๋‹ˆ๋ผ ๋นŒ๋“œ ๊ฒ€์ฆ ๊ตฌ๊ฐ„์ด๋‹ค. +- ๋‹ค์Œ ์Šคํ…Œ์ด์ง€๋Š” ์ƒˆ ๊ฒŒ์ž„์ด ์•„๋‹ˆ๋ผ ์ด์ „ ๋นŒ๋“œ์˜ ํ™•์žฅ ์‹œํ—˜์ด๋‹ค. + +## ์ˆ˜์ • ํŒŒ์ผ + +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/config/CombatTimeline.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/SpawnerSystem.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/CombatSystem.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/ProgressionSystem.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/types.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/store/useGameStore.ts` + +## ๊ฒ€์ฆ + +- `npm run build` ์„ฑ๊ณต +- Vite ๊ฒฝ๊ณ : `/sprites/player.png referenced in /sprites/player.png didn't resolve at build time` +- ์œ„ ๊ฒฝ๊ณ ๋Š” ๊ธฐ์กด ๋Ÿฐํƒ€์ž„ ๊ฒฝ๋กœ ๊ฒฝ๊ณ ์ด๋ฉฐ ์ด๋ฒˆ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋นŒ๋“œ ์‹คํŒจ๋Š” ์•„๋‹ˆ๋‹ค. + +## ํ›„์† ์ž‘์—… ์ œ์•ˆ + +- ๊ฐ ์Šคํ…Œ์ด์ง€๋ณ„ ๊ณ ์œ  ๋ชฌ์Šคํ„ฐ ์—ญํ•  ๋น„์ค‘์„ ๋” ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•œ๋‹ค. +- ์Šคํ…Œ์ด์ง€๋ณ„ ๋ณด์Šค ํŒจํ„ด์„ ํ˜„์žฌ๋ณด๋‹ค ๋” ๊ฐ•ํ•˜๊ฒŒ ์ฐจ๋ณ„ํ™”ํ•œ๋‹ค. +- ์ง„ํ™” ๋ฌด๊ธฐ๋ณ„ ํ™”๋ฉด ๊ฐ€๋…์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ํ”Œ๋ ˆ์ดํ…Œ์ŠคํŠธ๋กœ ๊ฒ€์ฆํ•œ๋‹ค. +- ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜ ์‹œ ๋ณด๋ฌผ์ƒ์ž/์นด๋“œ ์„ ํƒ ๋ณด์ƒ์„ ํ™•์ • ์ง€๊ธ‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฑ€์„œ๋ฅ˜ ๋ณด์ƒ๊ฐ์ด ๋” ๊ฐ•ํ•ด์ง„๋‹ค. diff --git a/10_Wiki/Topics/Frontend_Mastery/2026-04-26-Skybound_Miniboss_Treasure_Cache_Reward_Loop.md b/10_Wiki/Topics/Frontend_Mastery/2026-04-26-Skybound_Miniboss_Treasure_Cache_Reward_Loop.md new file mode 100644 index 00000000..0bc19fac --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/2026-04-26-Skybound_Miniboss_Treasure_Cache_Reward_Loop.md @@ -0,0 +1,109 @@ +# Skybound Miniboss Treasure Cache Reward Loop + +์ž‘์„ฑ์ผ: 2026-04-26 09:32 KST + +## ์š”์ฒญ ์š”์•ฝ + +- ๋ฑ€ํŒŒ์ด์–ด ์„œ๋ฐ”์ด๋ฒŒ ๊ณ„์—ด์˜ ์žฌ๋ฏธ๋ฅผ ๋” ๊ฐ•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ, ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜ ๋ณด์ƒ ๋ฃจํ”„๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. +- ๋‹จ์ˆœ EXP ์„ฑ์žฅ๋งŒ ๋ฐ˜๋ณต๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ค‘๊ฐ„ ๊ฐ•์ ์„ ์žก์•˜์„ ๋•Œ ๋นŒ๋“œ ๋ฐฉํ–ฅ์„ ๊ฐ•ํ™”ํ•˜๋Š” ํ™•์ • ๋ณด์ƒ์„ ์ œ๊ณตํ•œ๋‹ค. +- ๋ณด์ƒ์€ ๊ธฐ์กด Tac Level Up ํ™”๋ฉด์„ ์žฌ์‚ฌ์šฉํ•˜๋˜, ๋ณด๋ฌผ์ƒ์ž ์„ฑ๊ฒฉ์˜ `Emergency Supply` ์นด๋“œ ์„ ํƒ์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค. + +## ํ•ต์‹ฌ ๋ฐฉํ–ฅ + +Skybound์˜ ํ˜„์žฌ ์ „ํˆฌ ๋ฃจํ”„๋Š” ์ ์„ ์ฒ˜์น˜ํ•˜๋ฉด Tac EXP๋ฅผ ๋ฐ”๋กœ ์–ป๊ณ , ์ผ์ • EXP์— ๋„๋‹ฌํ•˜๋ฉด ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ตฌ์กฐ๋‹ค. ์ด ๋ฐฉ์‹์€ ํ™”๋ฉด ๊ฐ€๋…์„ฑ์—๋Š” ์ข‹์ง€๋งŒ, ํ”Œ๋ ˆ์ด ์ค‘๊ฐ„์— โ€œ๊ฐ•์ ์„ ์žก์•„์„œ ํŠน๋ณ„ํ•œ ๋ณด์ƒ์„ ์–ป์—ˆ๋‹คโ€๋Š” ๋ฑ€์„œ๋ฅ˜ ํŠน์œ ์˜ ๋ณด์ƒ๊ฐ์ด ๋ถ€์กฑํ–ˆ๋‹ค. + +์ด๋ฒˆ ๋ณ€๊ฒฝ์˜ ๋ชฉํ‘œ๋Š” ๋ฏธ๋‹ˆ๋ณด์Šค๋ฅผ ๋‹ค์Œ ์—ญํ• ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. + +1. ์ „ํˆฌ ํ๋ฆ„ ์ค‘๊ฐ„์˜ ์••๋ฐ• ์ฒดํฌํฌ์ธํŠธ +2. ํ”Œ๋ ˆ์ด์–ด ๋นŒ๋“œ๊ฐ€ ์ถฉ๋ถ„ํžˆ ๊ฐ•ํ•œ์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์€ ๊ฒ€์ฆ ๊ตฌ๊ฐ„ +3. ์ฒ˜์น˜ํ•˜๋ฉด ํ˜„์žฌ ๋นŒ๋“œ๋ฅผ ๋” ์„ ๋ช…ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ™•์ • ์—…๊ทธ๋ ˆ์ด๋“œ ๋ณด์ƒ +4. ๋ณด์Šค ์ „ ์ง„ํ™”/EVO ๊ฒฝ๋กœ๋ฅผ ์™„์„ฑํ•  ๊ธฐํšŒ๋ฅผ ์ฃผ๋Š” ์ค‘๊ฐ„ ๋ณด๋ฌผ์ƒ์ž + +## ์ ์šฉํ•œ ๋ณ€๊ฒฝ + +### ๋ฏธ๋‹ˆ๋ณด์Šค ์‹๋ณ„ ํ”Œ๋ž˜๊ทธ ์ถ”๊ฐ€ + +๊ธฐ์กด `MINI_BOSS` ์Šคํฐ์€ ๋‚ด๋ถ€์ ์œผ๋กœ `ELITE` ์ ์„ ์ƒ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฒ˜์น˜ ์‹œ ์ผ๋ฐ˜ ์—˜๋ฆฌํŠธ์™€ ๊ตฌ๋ถ„๋˜๋Š” ๋ณด์ƒ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ค์› ๋‹ค. `SystemEnemy`์— ์•„๋ž˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. + +- `isMiniBoss` +- `rewardClaimed` + +`SpawnerSystem`์˜ `MINI_BOSS` ์Šคํฐ์—์„œ๋Š” ์ด์ œ `isMiniBoss: true`๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค. + +### ๋ฏธ๋‹ˆ๋ณด์Šค HP ์Šค์ผ€์ผ๋ง + +๋ฏธ๋‹ˆ๋ณด์Šค๊ฐ€ ํ›„๋ฐ˜ ์Šคํ…Œ์ด์ง€์—์„œ๋„ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋…น์ง€ ์•Š๋„๋ก ์Šคํ…Œ์ด์ง€์™€ ๋‚œ์ด๋„ ๋ฐฐ์œจ์„ ๋ฐ˜์˜ํ–ˆ๋‹ค. + +- ๊ธฐ๋ณธ HP: `620` +- ์Šคํ…Œ์ด์ง€๋‹น ์ฆ๊ฐ€: `+22%` +- ํ˜„์žฌ `difficultyMult` ๋ฐ˜์˜ + +์˜๋„๋Š” ๋ฏธ๋‹ˆ๋ณด์Šค๊ฐ€ ๋ณด์Šค๋งŒํผ ๊ธธ์ง€๋Š” ์•Š์ง€๋งŒ, ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์œ„์น˜์™€ ๊ณต๊ฒฉ ๋ฐฉํ–ฅ์„ ์‹ ๊ฒฝ ์จ์•ผ ํ•˜๋Š” ์งง์€ ์ „ํˆฌ ๋ชฉํ‘œ๊ฐ€ ๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. + +### ์ฒ˜์น˜ ๋ณด์ƒ ์ธํ…ํŠธ ์ถ”๊ฐ€ + +`EngineProtocol`์— `MINIBOSS_REWARD` ์ธํ…ํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. `CombatSystem`์€ ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜ ์‹œ ์ง์ ‘ UI๋ฅผ ์—ด์ง€ ์•Š๊ณ , ์—”์ง„ ์ธํ…ํŠธ๋ฅผ ํ†ตํ•ด ๋ณด์ƒ ์ฒ˜๋ฆฌ๋ฅผ ์š”์ฒญํ•œ๋‹ค. + +์ด๋ ‡๊ฒŒ ํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. + +- ์ „ํˆฌ ์‹œ์Šคํ…œ์ด UI ์ƒํƒœ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค. +- ๊ธฐ์กด `LEVEL_UP` ์ด๋ฒคํŠธ์™€ `LevelUpModal` ํ๋ฆ„์„ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. +- ์ถ”ํ›„ ๋ณด๋ฌผ์ƒ์ž ์—ฐ์ถœ, ๋ฃฐ๋ ›, ๋ณด์ƒ ํ‹ฐ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฝ๋‹ค. + +### ๋นŒ๋“œ ์šฐ์„  ๋ณด์ƒ ์นด๋“œ ์ƒ์„ฑ + +`ProgressionSystem`์— `generateMiniBossRewardCards`๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ด ๋ณด์ƒ์€ ์ผ๋ฐ˜ ๋ ˆ๋ฒจ์—… ์นด๋“œ๋ณด๋‹ค ๋” ์ „๋žต์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. + +์šฐ์„ ์ˆœ์œ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. + +1. ์ด๋ฏธ ๋ณด์œ ํ•œ ๋ฌด๊ธฐ/์Šคํ‚ฌ์˜ ๋ ˆ๋ฒจ์—… +2. Lv.3 ์ด์ƒ ๋ฌด๊ธฐ์˜ EVO์— ํ•„์š”ํ•œ ์„œํฌํŠธ ํŒจ์‹œ๋ธŒ +3. ์Šค์›œ/์••๋ฐ• ๊ตฌ๊ฐ„ ๋Œ€์‘์šฉ `isSpikeCounter` ์Šคํ‚ฌ +4. ๋ถ€์กฑํ•œ ์ž๋ฆฌ๋Š” ๊ธฐ์กด 3์นด๋“œ ์ƒ์„ฑ ๊ทœ์น™์œผ๋กœ ๋ณด์ถฉ + +์ด ๊ตฌ์กฐ๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์•„๋ฌด ์นด๋“œ๋‚˜ ๊ณ ๋ฅด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, โ€œ๋‚ด ๋นŒ๋“œ๋ฅผ ์™„์„ฑํ•ด๊ฐ€๋Š” ์„ ํƒโ€์„ ํ•˜๋„๋ก ์œ ๋„ํ•œ๋‹ค. + +### ๋ณด์ƒ UI ์—ฐ๊ฒฐ + +๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜ ์‹œ ์•„๋ž˜ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. + +1. ๋ฏธ๋‹ˆ๋ณด์Šค ์‚ฌ๋ง +2. `CombatSystem`์ด `MINIBOSS_REWARD` ์ธํ…ํŠธ ๋ฐœํ–‰ +3. `useGameEngine`์ด ํ˜„์žฌ ์Šคํ‚ฌ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด์ƒ ์นด๋“œ ์ƒ์„ฑ +4. ๊ฒŒ์ž„ ์ผ์‹œ์ •์ง€ +5. `LEVEL_UP` ์ด๋ฒคํŠธ๋ฅผ `isChest: true`๋กœ ๋ฐœํ–‰ +6. ๊ธฐ์กด `Emergency Supply` ์นด๋“œ ์„ ํƒ UI ํ‘œ์‹œ +7. `COMMAND CACHE UNLOCKED` ํ”ผ๋“œ๋ฐฑ ํ…์ŠคํŠธ ์ถœ๋ ฅ + +## ์„ค๊ณ„ ์˜๋„ + +์ด ๋ณ€๊ฒฝ์€ Skybound์˜ ๋ชฉ์ ์„ฑ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด๋‹ค. + +- ์ผ๋ฐ˜ ์  ์ฒ˜์น˜: Tac EXP๋ฅผ ์Œ“๋Š” ๊ธฐ๋ณธ ์„ฑ์žฅ +- ์—˜๋ฆฌํŠธ ์ฒ˜์น˜: ๋” ๋งŽ์€ EXP์™€ ์žฌ๋ฃŒ/์žฅ๋น„ ๊ฐ€๋Šฅ์„ฑ +- ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜: ํ™•์ • ๋นŒ๋“œ ๊ฐ•ํ™” ์„ ํƒ +- ์Šคํ…Œ์ด์ง€ ๋ณด์Šค ์ฒ˜์น˜: ๋‹ค์Œ ์Šคํ…Œ์ด์ง€ ์ง„ํ–‰๊ณผ ์˜๊ตฌ ๋ณด์ƒ + +์ฆ‰, ์ „ํˆฌ ์ค‘ ๋ชฉํ‘œ๊ฐ€ โ€œ๊ทธ๋ƒฅ ๋ฒ„ํ‹ฐ๊ธฐโ€์—์„œ โ€œ์œ„ํ—˜ํ•œ ํƒ€์ด๋ฐ์„ ๋„˜๊ธฐ๊ณ  ๋นŒ๋“œ๋ฅผ ์™„์„ฑํ•˜๊ธฐโ€๋กœ ๋ฐ”๋€๋‹ค. + +## ์ˆ˜์ • ํŒŒ์ผ + +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/hooks/useGameEngine.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/CombatSystem.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/EngineProtocol.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/ProgressionSystem.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/SpawnerSystem.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/types.ts` + +## ๊ฒ€์ฆ + +- `npm run build` ์„ฑ๊ณต +- Vite ๊ฒฝ๊ณ : `/sprites/player.png referenced in /sprites/player.png didn't resolve at build time` +- ์œ„ ๊ฒฝ๊ณ ๋Š” ๊ธฐ์กด ๋Ÿฐํƒ€์ž„ ๊ฒฝ๋กœ ๊ฒฝ๊ณ ์ด๋ฉฐ ์ด๋ฒˆ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋นŒ๋“œ ์‹คํŒจ๋Š” ์•„๋‹ˆ๋‹ค. + +## ํ›„์† ์ž‘์—… ์ œ์•ˆ + +- ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜ ์ˆœ๊ฐ„์— ์‹ค์ œ ์ƒ์ž/์ฝ”์–ด๊ฐ€ ์—ด๋ฆฌ๋Š” 0.6์ดˆ ์ „์šฉ ์—ฐ์ถœ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. +- ๋ณด์ƒ ์นด๋“œ์— `EVO READY`, `BUILD CORE`, `SURVIVAL PICK` ๊ฐ™์€ ํƒœ๊ทธ๋ฅผ ๋ถ™์—ฌ ์„ ํƒ ์ด์œ ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค. +- ์Šคํ…Œ์ด์ง€๋ณ„ ๋ฏธ๋‹ˆ๋ณด์Šค ์™ธํ˜•๊ณผ ํƒ„๋ง‰ ํŒจํ„ด์„ ๋ถ„๋ฆฌํ•ด โ€œ์ด๋ฒˆ ์Šคํ…Œ์ด์ง€์˜ ์ค‘๊ฐ„ ์œ„ํ˜‘โ€ ์ •์ฒด์„ฑ์„ ๊ฐ•ํ™”ํ•œ๋‹ค. +- ๋ณด๋ฌผ์ƒ์ž ๋ณด์ƒ์„ 1์žฅ ์„ ํƒ์—์„œ 3์žฅ ์ˆœ์ฐจ ์˜คํ”ˆ ๋˜๋Š” ํฌ๊ท€๋„ ๋ณด์ƒ์œผ๋กœ ํ™•์žฅํ• ์ง€ ํ”Œ๋ ˆ์ดํ…Œ์ŠคํŠธ ํ›„ ๊ฒฐ์ •ํ•œ๋‹ค. diff --git a/10_Wiki/Topics/Frontend_Mastery/2026-04-26-Skybound_Reward_Card_Clarity_and_Command_Cache_UI.md b/10_Wiki/Topics/Frontend_Mastery/2026-04-26-Skybound_Reward_Card_Clarity_and_Command_Cache_UI.md new file mode 100644 index 00000000..38aedfa3 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/2026-04-26-Skybound_Reward_Card_Clarity_and_Command_Cache_UI.md @@ -0,0 +1,104 @@ +# Skybound Reward Card Clarity and Command Cache UI + +์ž‘์„ฑ์ผ: 2026-04-26 09:40 KST + +## ์š”์ฒญ ์š”์•ฝ + +- ๋ฏธ๋‹ˆ๋ณด์Šค ๋ณด์ƒ ๋ฃจํ”„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ, ๋ณด์ƒ ์นด๋“œ๊ฐ€ ์™œ ์ข‹์€ ์„ ํƒ์ธ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ์ฆ‰์‹œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐœ์„ ํ•œ๋‹ค. +- ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜ ๋ณด์ƒ๊ณผ ์œ„๊ธฐ ๋ณด๊ธ‰ ๋ณด์ƒ์„ ๊ฐ™์€ ํ™”๋ฉด์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ๊ตฌ๋ถ„ํ•œ๋‹ค. +- Stylized Casual Magitech ํ†ค์•ค๋งค๋„ˆ ์•ˆ์—์„œ ๋ณด์ƒ๊ฐ ์žˆ๋Š” ์นด๋“œ ์„ ํƒ UI๋ฅผ ๊ฐ•ํ™”ํ•œ๋‹ค. + +## ํ•ต์‹ฌ ๋ฐฉํ–ฅ + +์ด์ „ ๋‹จ๊ณ„์—์„œ ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜ ์‹œ ํ™•์ • ์—…๊ทธ๋ ˆ์ด๋“œ ์„ ํƒ ๋ณด์ƒ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์นด๋“œ 3์žฅ์ด ๋œจ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ โ€œ์™œ ์ด ๋ณด์ƒ์ด ์ง€๊ธˆ ๋‚ด ๋นŒ๋“œ์— ์ข‹์€์ง€โ€ ๋ฐ”๋กœ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค. + +์ด๋ฒˆ ๋ณ€๊ฒฝ์˜ ๋ชฉํ‘œ๋Š” ๋ณด์ƒ ํ™”๋ฉด์„ ๋‹จ์ˆœ ์„ ํƒ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ, ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” UI๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. + +1. ์ด ์นด๋“œ๋Š” ํ˜„์žฌ ์ฃผ๋ ฅ ๋นŒ๋“œ๋ฅผ ๊ฐ•ํ™”ํ•œ๋‹ค. +2. ์ด ์นด๋“œ๋Š” EVO ์ง„ํ™” ๊ฒฝ๋กœ์— ํ•„์š”ํ•˜๋‹ค. +3. ์ด ์นด๋“œ๋Š” ์Šค์›œ/์••๋ฐ• ์ƒํ™ฉ์—์„œ ์ƒ์กด์— ๋„์›€์ด ๋œ๋‹ค. +4. ์ด ์นด๋“œ๋Š” ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ ํŒจํ„ด์„ ์—ด์–ด์ค€๋‹ค. + +## ์ ์šฉํ•œ ๋ณ€๊ฒฝ + +### ๋ณด์ƒ ์ถœ์ฒ˜ ํƒ€์ž… ์ถ”๊ฐ€ + +`LEVEL_UP` ์ด๋ฒคํŠธ์— `rewardSource`๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. + +- `STARTER` +- `LEVEL_UP` +- `POWER_SPIKE` +- `MINIBOSS` + +๊ธฐ์กด์—๋Š” `isChest`๋งŒ ์žˆ์–ด์„œ ๋ฏธ๋‹ˆ๋ณด์Šค ๋ณด์ƒ๊ณผ ์œ„๊ธฐ ๋ณด๊ธ‰ ๋ณด์ƒ์ด ๋ชจ๋‘ ๊ฐ™์€ `Emergency Supply`์ฒ˜๋Ÿผ ๋ณด์˜€๋‹ค. ์ด์ œ ๋ณด์ƒ ์ถœ์ฒ˜์— ๋”ฐ๋ผ ํ—ค๋”, ๋ฌธ๊ตฌ, ์นด๋“œ ํƒœ๊ทธ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. + +### ๋ฏธ๋‹ˆ๋ณด์Šค ๋ณด์ƒ ํ—ค๋” ์ฐจ๋ณ„ํ™” + +๋ฏธ๋‹ˆ๋ณด์Šค ๋ณด์ƒ์€ ์ด์ œ `Emergency Supply`๊ฐ€ ์•„๋‹ˆ๋ผ `Command Cache`๋กœ ํ‘œ์‹œ๋œ๋‹ค. + +- Badge: `Cache` +- Title: `Command Cache` +- Subtitle: `Choose one build-defining reward` + +์œ„๊ธฐ ๋ณด๊ธ‰์€ ๊ธฐ์กด ์˜๋„๋Œ€๋กœ `Emergency Supply`๋ฅผ ์œ ์ง€ํ•œ๋‹ค. + +### ์นด๋“œ ์„ ํƒ ์ด์œ  ํƒœ๊ทธ ์ถ”๊ฐ€ + +๊ฐ ์นด๋“œ ์ƒ๋‹จ์— ๋ณด์ƒ ์ด์œ  ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. + +- `FIRST CORE`: ์ฒซ ๋ฌด๊ธฐ ์„ ํƒ, ๋Ÿฐ์˜ ์‹œ์ž‘ ๋ฐฉํ–ฅ ๊ฒฐ์ • +- `CORE UPGRADE`: ํ˜„์žฌ ์ฃผ๋ ฅ ๋ฌด๊ธฐ ๊ฐ•ํ™” +- `MODULE BOOST`: ๋ณด์œ  ํŒจ์‹œ๋ธŒ/๋ชจ๋“ˆ ๊ฐ•ํ™” +- `EVO LINK`: ํ˜„์žฌ ๋ฌด๊ธฐ์˜ ์ง„ํ™” ์กฐ๊ฑด์„ ์ง€์› +- `EVO READY`: ์ง„ํ™” ์กฐ๊ฑด ์™„์„ฑ +- `SURVIVAL PICK`: ์Šค์›œ/์••๋ฐ• ๊ตฌ๊ฐ„ ๋Œ€์‘ +- `NEW WEAPON`: ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ ํŒจํ„ด ๊ฐœ๋ฐฉ +- `UTILITY MOD`: ๊ธฐ๋ณธ ์„ฑ๋Šฅ ๊ฐ•ํ™” + +์ด ํƒœ๊ทธ๋Š” ๋‹จ์ˆœ ๋ผ๋ฒจ์ด ์•„๋‹ˆ๋ผ, ์นด๋“œ๊ฐ€ โ€œ์™œ ์ง€๊ธˆ ์˜๋ฏธ ์žˆ๋Š” ์„ ํƒ์ธ์ง€โ€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์งง์€ ๋ฌธ์žฅ๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋œ๋‹ค. + +### Command Cache ์—ฐ์ถœ ์ถ”๊ฐ€ + +๋ณด์ƒ ํ™”๋ฉด ์ƒ๋‹จ์— ์ž‘์€ ๋งˆ๋ฒ•๊ณตํ•™ ์บ์‹œ ์ฝ”์–ด๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. + +- ํŒ ์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜ +- ํšŒ์ „ํ•˜๋Š” ์ ์„  ๋ง +- ๋ฏธ๋‹ˆ๋ณด์Šค ์บ์‹œ๋Š” ์ฒญ๋ก/๋ผ์ž„ ๊ณ„์—ด ๋น› +- ์ผ๋ฐ˜ ๋ณด๊ธ‰์€ ์˜ค๋ Œ์ง€/์‹œ์•ˆ ๊ณ„์—ด ๋น› + +์‹ค์ œ ๊ฒŒ์ž„ ์‹œ๊ฐ„์„ ๋” ์ง€์—ฐ์‹œํ‚ค์ง€๋Š” ์•Š์ง€๋งŒ, ํ™”๋ฉด์ด ๋œจ๋Š” ์ˆœ๊ฐ„ ๋ณด์ƒ ์ƒ์ž๊ฐ€ ์—ด๋ฆฐ๋‹ค๋Š” ๊ฐ๊ฐ์„ ๊ฐ•ํ™”ํ•œ๋‹ค. + +## ์„ค๊ณ„ ์˜๋„ + +๋ฑ€ํŒŒ์ด์–ด ์„œ๋ฐ”์ด๋ฒŒ ๊ณ„์—ด์˜ ์žฌ๋ฏธ๋Š” ๋‹จ์ˆœํžˆ ๋ ˆ๋ฒจ์—…์„ ๋งŽ์ด ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, โ€œ๋‚ด๊ฐ€ ๊ณ ๋ฅธ ์„ ํƒ ๋•Œ๋ฌธ์— ๋นŒ๋“œ๊ฐ€ ๊ฐ•ํ•ด์ง€๊ณ  ์žˆ๋‹คโ€๋Š” ํ™•์‹ ์—์„œ ๋‚˜์˜จ๋‹ค. + +์ด๋ฒˆ ๋ณ€๊ฒฝ์€ ๊ทธ ํ™•์‹ ์„ UI๋กœ ๋ณด๊ฐ•ํ•œ๋‹ค. + +- ๋ฏธ๋‹ˆ๋ณด์Šค ์ฒ˜์น˜: `Command Cache` +- ์œ„๊ธฐ ๋ณด๊ธ‰: `Emergency Supply` +- ์ผ๋ฐ˜ ๋ ˆ๋ฒจ์—…: `Tactical Upgrade` +- ์‹œ์ž‘ ์„ ํƒ: `Choose First Weapon` + +์ด์ œ ๊ฐ ์„ฑ์žฅ ์ด๋ฒคํŠธ๋Š” ๊ฐ™์€ ์นด๋“œ ์„ ํƒ์ด๋ผ๋„ ์„œ๋กœ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. + +## ์ˆ˜์ • ํŒŒ์ผ + +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/hooks/useGameEngine.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/ProgressionSystem.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/types.ts` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/GameSceneRenderer.tsx` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/LevelUpModal.tsx` +- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/ui/LevelUpModal.css` + +## ๊ฒ€์ฆ + +- `npm run build` ์„ฑ๊ณต +- Vite ๊ฒฝ๊ณ : `/sprites/player.png referenced in /sprites/player.png didn't resolve at build time` +- ์œ„ ๊ฒฝ๊ณ ๋Š” ๊ธฐ์กด ๋Ÿฐํƒ€์ž„ ๊ฒฝ๋กœ ๊ฒฝ๊ณ ์ด๋ฉฐ ์ด๋ฒˆ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋นŒ๋“œ ์‹คํŒจ๋Š” ์•„๋‹ˆ๋‹ค. + +## ํ›„์† ์ž‘์—… ์ œ์•ˆ + +- ์Šคํ…Œ์ด์ง€๋ณ„ ๋ฏธ๋‹ˆ๋ณด์Šค ํŒจํ„ด์„ ๋ถ„๋ฆฌํ•ด `Command Cache`๋ฅผ ์–ป๋Š” ๊ณผ์ • ์ž์ฒด๋ฅผ ๋” ์žฌ๋ฏธ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค. +- ๋ณด์ƒ ์นด๋“œ์— ์‹ค์ œ EVO ๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์•„์ด์ฝ˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค. +- ๋ณด๋ฌผ์ƒ์ž ๋ณด์ƒ์„ 1์žฅ ์„ ํƒ์—์„œ ํฌ๊ท€๋„ ๊ธฐ๋ฐ˜ ๋‹ค์ค‘ ๋ณด์ƒ์œผ๋กœ ํ™•์žฅํ• ์ง€ ํ”Œ๋ ˆ์ดํ…Œ์ŠคํŠธํ•œ๋‹ค. +- Command Cache๊ฐ€ ์—ด๋ฆฌ๋Š” ์งง์€ 0.5์ดˆ ์ „์šฉ ์ปท์ธ/์ƒ์ž ์˜คํ”ˆ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ Canvas ์œ„์— ์ถ”๊ฐ€ํ•œ๋‹ค. diff --git a/10_Wiki/Topics/Frontend_Mastery/CSS Modules.md b/10_Wiki/Topics/Frontend_Mastery/CSS Modules.md new file mode 100644 index 00000000..120c47a5 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/CSS Modules.md @@ -0,0 +1,30 @@ +# [[CSS Modules]] + +## ๐Ÿ“Œ Brief Summary +CSS Modules๋Š” ํ‘œ์ค€ CSS ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ํด๋ž˜์Šค๋ช…์„ ๊ณ ์œ ํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ์ž๋™์œผ๋กœ ์Šค์ฝ”ํ•‘(scoping)ํ•˜๋Š” CSS ์•„ํ‚คํ…์ฒ˜ ์ ‘๊ทผ๋ฒ•์ž…๋‹ˆ๋‹ค [1-3]. ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด BEM๊ณผ ๊ฐ™์€ ์ˆ˜๋™ ๊ทœ์น™์— ์˜์กดํ•˜๋Š” ๋Œ€์‹ , ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๊ณ ์œ ํ•œ ํ•ด์‹œ ํด๋ž˜์Šค๋ช…์„ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [4, 5]. ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†๋Š” ์ •์  CSS๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ, React ๋ฐ Next.js์™€ ๊ฐ™์€ ์ตœ์‹  ํ”„๋ ˆ์ž„์›Œํฌ ํ™˜๊ฒฝ์—์„œ ์ „์—ญ ์˜ค์—ผ ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ UI๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค [6-8]. + +## ๐Ÿ“– Core Content +* **๋™์ž‘ ๋ฐฉ์‹ ๋ฐ ํŠน์ง•:** + CSS Modules๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์ต์ˆ™ํ•œ ํ‘œ์ค€ CSS ๋ฌธ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 9]. ์ž‘์„ฑ๋œ CSS ํŒŒ์ผ(`.module.css`)์„ JavaScript ์ปดํฌ๋„ŒํŠธ์— ์ž„ํฌํŠธํ•˜๋ฉด, ๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ `.button`๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค๋ช…์„ `Button_button__x9KdL`๊ณผ ๊ฐ™์€ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค [3, 9]. ๋˜ํ•œ, `composes` ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ธฐ์กด ์Šคํƒ€์ผ์„ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ [1], Sass(SCSS)๋‚˜ PostCSS์™€ ๊ฐ™์€ ๊ธฐ์กด CSS ๋„๊ตฌ์™€๋„ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค [1, 10]. + +* **์žฅ์ :** + * **์™„๋ฒฝํ•œ ์Šค์ฝ”ํ•‘ ๋ฐ ์ถฉ๋Œ ๋ฐฉ์ง€:** ํด๋ž˜์Šค๋ช…์ด ์ž๋™์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์— ์Šค์ฝ”ํ•‘๋˜๋ฏ€๋กœ, ์Šคํƒ€์ผ์ด ์˜๋„์น˜ ์•Š๊ฒŒ ๋‹ค๋ฅธ ๊ณณ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ „์—ญ ์ถฉ๋Œ(global namespace collision) ๋ฌธ์ œ๋ฅผ ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค [5, 6, 9, 11]. + * **์ œ๋กœ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ (Zero Runtime Overhead):** ์Šคํƒ€์ผ์ด ๋นŒ๋“œ ํƒ€์ž„์— ์ฒ˜๋ฆฌ๋˜์–ด ์ •์  CSS๋กœ ์ถœ๋ ฅ๋˜๋ฏ€๋กœ, ๋Ÿฐํƒ€์ž„์— ์Šคํƒ€์ผ์„ ํŒŒ์‹ฑํ•˜๋Š” CSS-in-JS ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉฐ ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 7, 12]. + * **๊ธฐ์กด CSS ์ƒํƒœ๊ณ„ ๋ฐ ์œ ์—ฐ์„ฑ ํ™œ์šฉ:** ๋ณต์žกํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ, ๊ฐ€์ƒ ์š”์†Œ(pseudo-elements) ๋ฐ ๋ณต์žกํ•œ ์„ ํƒ์ž ๋“ฑ CSS์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ œํ•œ ์—†์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 9]. ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ์— ์ข…์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [7]. + * **๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ:** TypeScript์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ชจ๋“ˆ ํด๋ž˜์Šค๋ช…์— ๋Œ€ํ•œ ํƒ€์ดํ•‘์„ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ์˜คํƒ€๋ฅผ ๋นŒ๋“œ ํƒ€์ž„์— ์žก์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13]. + +* **๋‹จ์  ๋ฐ ํ•œ๊ณ„:** + * **ํŒŒ์ผ ์ „ํ™˜ (Context Switching):** ์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•  ๋•Œ JavaScript/JSX ํŒŒ์ผ๊ณผ `.module.css` ํŒŒ์ผ์„ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ ์ž‘์—…ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค [7]. + * **๋™์  ์Šคํƒ€์ผ๋ง์˜ ์–ด๋ ค์›€:** CSS-in-JS์™€ ๋‹ฌ๋ฆฌ CSS์™€ JavaScript ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ(Props)์— ๋”ฐ๋ฅธ ๋™์ ์ธ ์Šคํƒ€์ผ์„ ์ง์ ‘ ๋ถ€์—ฌํ•˜๋Š” ๊ณผ์ •์ด ๊นŒ๋‹ค๋กœ์šฐ๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ์กฐ๊ฑด๋ถ€ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ(string concatenation) ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [1, 7, 10]. + * **๋„ค์ด๋ฐ ํ”ผ๋กœ (Naming Fatigue):** ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Tailwind CSS์™€ ๋‹ฌ๋ฆฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฌ์ „ํžˆ ์š”์†Œ๋งˆ๋‹ค ์˜๋ฏธ ์žˆ๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ณ ๋ฏผํ•˜๊ณ  ์ง€์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14]. + +* **์‹ค๋ฌด ํ™œ์šฉ ์ „๋žต:** + CSS Modules๋Š” ํƒ„ํƒ„ํ•œ CSS ์—ญ๋Ÿ‰์„ ๊ฐ–์ถ˜ ํŒ€์ด๋‚˜, ๋ณต์žกํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ์„ธ๋ฐ€ํ•œ CSS ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [14]. ํŠนํžˆ 2025๋…„ ๊ธฐ์ค€ Next.js App Router์™€ ๊ฐ™์€ React Server Components(RSC) ํ™˜๊ฒฝ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด Tailwind CSS๋‚˜ CSS Modules๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [8, 15]. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ์‹ค๋ฌด์—์„œ๋Š” ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ฐ„๊ฒฉ์—๋Š” ๋น ๋ฅด๊ณ  ์ผ๊ด€๋œ Tailwind CSS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ณต์žกํ•œ ์ปค์Šคํ…€ ๋กœ์ง์ด๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ์—๋Š” CSS Modules๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‘ ๊ธฐ์ˆ ์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค [16-18]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[BEM]], [[Tailwind CSS]], [[CSS-in-JS]], [[SCSS]] +- **Projects/Contexts:** [[์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜]], [[React Server Components]], [[Next.js App Router]] +- **Contradictions/Notes:** ์†Œ์Šค ๋ฌธํ—Œ๋“ค์€ BEM์ด ๊ฐœ๋ฐœ์ž์˜ ์ˆ˜๋™์ ์ธ ๋ช…๋ช… ๊ทœ์น™ ์ค€์ˆ˜์— ์˜์กดํ•ด ํœด๋จผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด ๋ฐ˜๋ฉด, CSS Modules๋Š” ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด "์ž๋™ํ™”๋œ ์บก์Аํ™”"๋ฅผ ์ œ๊ณตํ•˜์—ฌ BEM์ด ํ’€๊ณ ์ž ํ–ˆ๋˜ ๋ฌธ์ œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค [4, 5, 11, 13]. ๋˜ํ•œ, Tailwind CSS๋Š” ํด๋ž˜์Šค๋ช…์„ ์ง“๋Š” ์ˆ˜๊ณ ์™€ ํŒŒ์ผ ์ „ํ™˜์˜ ํ”ผ๋กœ๋ฅผ ์—†์• ์ฃผ์ง€๋งŒ ๋งˆํฌ์—… ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ณ  ์ž์˜์ ์ธ ๊ฐ’์ด ์Œ“์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, CSS Modules๋Š” ๊น”๋”ํ•œ HTML์„ ์œ ์ง€ํ•˜์ง€๋งŒ ํŒŒ์ผ ์ „ํ™˜๊ณผ ๋„ค์ด๋ฐ ํ”ผ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค [7, 14, 19, 20]. + +--- +*Last updated: 2026-04-26* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/CSS-in-JS.md b/10_Wiki/Topics/Frontend_Mastery/CSS-in-JS.md new file mode 100644 index 00000000..ff0076f6 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/CSS-in-JS.md @@ -0,0 +1,28 @@ +# [[CSS-in-JS]] + +## ๐Ÿ“Œ Brief Summary +CSS-in-JS๋Š” JavaScript ํŒŒ์ผ ๋‚ด์—์„œ CSS๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์Šคํƒ€์ผ์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ชจ๋˜ ์›น ์Šคํƒ€์ผ๋ง ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [1, 2]. ๊ธฐ์กด์˜ ์ „ํ†ต์ ์ธ CSS๊ฐ€ ๊ฐ€์ง„ ๊ธ€๋กœ๋ฒŒ ์Šค์ฝ”ํ”„(Global Scope) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ(State)๋‚˜ ํ”„๋กญ์Šค(Props)์— ๊ธฐ๋ฐ˜ํ•œ ๋™์  ์Šคํƒ€์ผ๋ง์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [1, 3, 4]. ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” styled-components์™€ Emotion์ด ์žˆ์ง€๋งŒ, ์ตœ๊ทผ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ํ”„๋ ˆ์ž„์›Œํฌ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋นŒ๋“œ ํƒ€์ž„์— CSS๋ฅผ ์ถ”์ถœํ•˜๋Š” Zero-Runtime ๋ฐฉ์‹์œผ๋กœ ์ง„ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [5-8]. + +## ๐Ÿ“– Core Content +- **์ฃผ์š” ์žฅ์ :** + - **์Šค์ฝ”ํ”„ ๊ณ ๋ฆฝ ๋ฐ ์ถฉ๋Œ ๋ฐฉ์ง€:** ์ž๋™์œผ๋กœ ๊ณ ์œ ํ•œ ํด๋ž˜์Šค๋ช…์„ ์ƒ์„ฑํ•˜์—ฌ ์Šคํƒ€์ผ์˜ ์ถฉ๋Œ์„ ๋ง‰์•„์ฃผ๋ฉฐ, BEM๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜ ์—†์ด๋„ ์บก์Аํ™”๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9, 10]. + - **๋™์  ์Šคํƒ€์ผ๋ง ๋ฐ ํ…Œ๋งˆ ์ ์šฉ:** ์ปดํฌ๋„ŒํŠธ์˜ ํ”„๋กญ์Šค(Props)์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ(State)์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด, ๋ณต์žกํ•œ ํ…Œ๋งˆ(Theming) ์‹œ์Šคํ…œ์„ ๋งค๋„๋Ÿฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 4, 8]. + - **์‘์ง‘๋„(Co-location):** ์ปดํฌ๋„ŒํŠธ์˜ ๋กœ์ง๊ณผ ์Šคํƒ€์ผ์ด ํ•œ ํŒŒ์ผ์— ์œ„์น˜ํ•˜๋ฏ€๋กœ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ์Šคํƒ€์ผ ์ฝ”๋“œ๊ฐ€ ๋ฒ„๋ ค์ง€๋Š”(orphaned CSS) ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [3, 4, 11]. + - **๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜(DX):** TypeScript ํ†ตํ•ฉ์„ ํ†ตํ•œ ํƒ€์ž… ์•ˆ์ •์„ฑ, ์ž๋™ ์™„์„ฑ, ์ž๋™ ๋ฒค๋” ํ”„๋ฆฌํ”ฝ์‹ฑ(Vendor prefixing) ๋“ฑ์„ ์ง€์›ํ•˜์—ฌ ๋ฒ„๊ทธ๋ฅผ ์ค„์ด๊ณ  ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ต๋‹ˆ๋‹ค [12, 13]. + +- **์ฃผ์š” ๋‹จ์  ๋ฐ ํ•œ๊ณ„:** + - **๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ:** ๋ธŒ๋ผ์šฐ์ € ๋Ÿฐํƒ€์ž„์—์„œ CSS ๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๊ณ  DOM์— ์ฃผ์ž…ํ•ด์•ผ ํ•˜๋ฉฐ, ํ”„๋กญ์Šค ๋ณ€๊ฒฝ ์‹œ ์Šคํƒ€์ผ์„ ์žฌ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ Œ๋”๋ง ์‹œ๊ฐ„์ด ์ง€์—ฐ๋ฉ๋‹ˆ๋‹ค [4, 12, 14, 15]. + - **๋ฒˆ๋“ค ํฌ๊ธฐ ์ฆ๊ฐ€:** styled-components(์•ฝ 12.7kb~30kb)๋‚˜ Emotion(์•ฝ 7.9kb~12kb) ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด๊ฐ€ JavaScript ๋ฒˆ๋“ค์— ์ถ”๊ฐ€๋˜์–ด ์ดˆ๊ธฐ ๋กœ๋”ฉ ๋ฐ ์‹คํ–‰์— ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค [7, 14]. + - **React Server Components (RSC) ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** React์˜ ์ปจํ…์ŠคํŠธ(Context)์— ์˜์กดํ•˜๋Š” ๋Ÿฐํƒ€์ž„ CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋˜๋Š” React Server Components ํ™˜๊ฒฝ๊ณผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์•„, 2024~2025๋…„ ์ดํ›„ ํ˜„๋Œ€์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ(์˜ˆ: Next.js App Router) ํ™˜๊ฒฝ์—์„œ ํฐ ๋ฌธ์ œ๋กœ ๋Œ€๋‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค [7, 8, 16]. + +- **๋ฏธ๋ž˜ ๋™ํ–ฅ ๋ฐ ํ•ด๊ฒฐ์ฑ… (Zero-Runtime CSS-in-JS):** + - ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐ RSC ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐœ๋ฐœ ์‹œ์—๋Š” CSS-in-JS์˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋˜ ๋นŒ๋“œ ํƒ€์ž„(Build time)์— ์ •์ ์ธ CSS ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๋Š” **Zero-Runtime** ์ ‘๊ทผ๋ฒ•์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค [5, 6, 15, 16]. + - Linaria, vanilla-extract, Panda CSS ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ด๋ฉฐ, ์ด๋“ค์€ ๋Ÿฐํƒ€์ž„ ํŽ˜๋„ํ‹ฐ ์—†์ด ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง์˜ ์ด์ ์„ ์ œ๊ณตํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ๋„ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [15, 17, 18]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[CSS Modules]], [[Tailwind CSS]], [[Zero-Runtime CSS-in-JS]], [[React Server Components]], [[Design Tokens]] +- **Projects/Contexts:** [[์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜]], [[Next.js App Router ํ”„๋กœ์ ํŠธ]], [[๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ…Œ๋งˆ ์‹œ์Šคํ…œ]] +- **Contradictions/Notes:** ์†Œ์Šค ๋ฌธํ—Œ๋“ค์€ CSS-in-JS๊ฐ€ ๊ฐ•๋ ฅํ•œ ๋™์  ์Šคํƒ€์ผ๋ง๊ณผ ์šฐ์ˆ˜ํ•œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ๋™์˜ํ•˜์ง€๋งŒ [3, 4, 8], ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์ตœ์‹  React Server Components์˜ ๋“ฑ์žฅ์ด๋ผ๋Š” ๊ธฐ์ˆ ์  ๋ฐฐ๊ฒฝ ๋ณ€ํ™”๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„ ๊ธฐ๋ฐ˜์˜ CSS-in-JS(styled-components, Emotion ๋“ฑ)์˜ ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ณ , ๋Œ€์‹  [[Tailwind CSS]], [[CSS Modules]], ํ˜น์€ [[vanilla-extract]] ๊ฐ™์€ Zero-runtime ์†”๋ฃจ์…˜์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [8, 16, 19]. + +--- +*Last updated: 2026-04-26* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/CSSOM(CSS Object Model).md b/10_Wiki/Topics/Frontend_Mastery/CSSOM(CSS Object Model).md new file mode 100644 index 00000000..e171a627 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/CSSOM(CSS Object Model).md @@ -0,0 +1,18 @@ +# [[CSSOM(CSS Object Model)]] + +## ๐Ÿ“Œ Brief Summary +CSSOM(CSS Object Model)์€ ์›น ํŽ˜์ด์ง€์˜ DOM(Document Object Model) ์š”์†Œ๋“ค์ด ์–ด๋–ป๊ฒŒ ์Šคํƒ€์ผ๋ง๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค [1, 2]. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณต๋ฐ›์€ CSS ๊ทœ์น™์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ถ€๋ชจ, ์ž์‹, ํ˜•์ œ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค [3, 4]. ์™„์„ฑ๋œ CSSOM์€ DOM๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ํ™”๋ฉด์— ํ”ฝ์…€์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [5, 6]. + +## ๐Ÿ“– Core Content +- **๋ Œ๋”๋ง ์ฐจ๋‹จ ํŠน์„ฑ (Render-Blocking):** DOM ํŠธ๋ฆฌ์˜ ์ƒ์„ฑ์€ ์ ์ง„์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€๋งŒ, CSSOM ์ƒ์„ฑ์€ ์ ์ง„์ ์ด์ง€ ์•Š์€ ๋ Œ๋”๋ง ์ฐจ๋‹จ(render-blocking) ์ž‘์—…์ž…๋‹ˆ๋‹ค [1, 2]. ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ๋‚  ๊ฒƒ์˜ HTML ์ฝ˜ํ…์ธ ๊ฐ€ ํ™”๋ฉด์— ๋ฒˆ์ฉ์ด๋ฉฐ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ(FOUC, Flash of Unstyled Content)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜์—ฌ CSSOM์ด ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค [1, 2]. +- **ํŠธ๋ฆฌ ๊ตฌ์กฐ์™€ ์บ์Šค์ผ€์ด๋”ฉ (Cascading):** CSSOM์€ CSS ๊ทœ์น™์— ๋”ฐ๋ผ ๋…ธ๋“œ ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•˜๋ฉฐ, ํ•˜์œ„ ๋…ธ๋“œ๋Š” ์ƒ์œ„ ๋…ธ๋“œ์˜ ์Šคํƒ€์ผ ์ผ๋ถ€๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค(ํ•˜ํ–ฅ์‹ ์ข…์†) [3, 7]. ์ดํ›„์— ํŒŒ์‹ฑ๋œ ๊ทœ์น™์ด ์ด์ „ ๊ทœ์น™์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ „์ฒด CSS๊ฐ€ ์™„์ „ํžˆ ํŒŒ์‹ฑ๋  ๋•Œ๊นŒ์ง€ CSSOM์„ ๋ Œ๋” ํŠธ๋ฆฌ ๊ตฌ์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค [7]. CSSOM ํŠธ๋ฆฌ์—๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ(User Agent) ์Šคํƒ€์ผ์‹œํŠธ ์ •๋ณด๋„ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™๋ถ€ํ„ฐ ๊ตฌ์ฒด์ ์ธ ๊ทœ์น™์„ ๊ฑฐ๋“ญ ์ ์šฉํ•˜์—ฌ ์ตœ์ข… ์Šคํƒ€์ผ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค [8]. +- **์„ ํƒ์ž ํŒŒ์‹ฑ ์›๋ฆฌ์™€ ์„ฑ๋Šฅ:** ๋ธŒ๋ผ์šฐ์ €๋Š” CSS ์„ ํƒ์ž๋ฅผ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค [9]. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๊ฒฐํ•ฉ๋œ ๊ตฌ์ฒด์ ์ธ ์„ ํƒ์ž(์˜ˆ: `.container.navigation.item`)๋Š” ์กฐ์ƒ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด DOM ํŠธ๋ฆฌ๋ฅผ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ, ๋‹จ์ˆœํ•œ ์„ ํƒ์ž(์˜ˆ: `.item`)์— ๋น„ํ•ด ๋ธŒ๋ผ์šฐ์ €์— ์•ฝ๊ฐ„์˜ ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ๋” ์ค๋‹ˆ๋‹ค [9, 10]. +- **๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)์™€์˜ ๊ฒฐํ•ฉ:** ๋ธŒ๋ผ์šฐ์ €๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด DOM ํŠธ๋ฆฌ์™€ CSSOM ํŠธ๋ฆฌ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค [6, 11]. DOM ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ์—์„œ ์‹œ์ž‘ํ•ด ๋ˆˆ์— ๋ณด์ด๋Š” ๊ฐ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ ์ ˆํ•œ CSSOM ๊ทœ์น™์„ ์ฐพ์•„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [6]. ์ด๋•Œ ํ™”๋ฉด์— ์‹œ๊ฐ์  ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋…ธ๋“œ๋‚˜ `display: none` ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ ๋…ธ๋“œ๋Š” ๋ Œ๋” ํŠธ๋ฆฌ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค [6, 11]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[DOM(Document Object Model)]], [[Render Tree]], [[Critical Rendering Path]], [[Reflow & Repaint]] +- **Projects/Contexts:** [[๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์ตœ์ ํ™”(Browser Rendering Optimization)]] +- **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด CSSOM ๊ตฌ์ถ•์€ ์ค‘์š”ํ•œ ๋ Œ๋”๋ง ์ฐจ๋‹จ ๊ณผ์ •์ด์ง€๋งŒ, ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์—์„œ CSSOM ์ƒ์„ฑ ๋ฐ ์Šคํƒ€์ผ ๊ณ„์‚ฐ ์†๋„๋Š” ๋งˆ์ดํฌ๋กœ์ดˆ ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์งˆ ๋งŒํผ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค [8-10]. ๋”ฐ๋ผ์„œ CSS ์„ ํƒ์ž์˜ ๊ตฌ์ฒด์„ฑ์„ ๋‚ฎ์ถ”๋Š” ๋“ฑ์˜ ๋งˆ์ดํฌ๋กœ ์ตœ์ ํ™”๋ณด๋‹ค๋Š”, ํ•„์š” ์—†๋Š” CSS ๊ทœ์น™์„ ์ตœ์†Œํ™”ํ•˜๊ฑฐ๋‚˜ ๋…ผ๋ธ”๋กœํ‚น(non-blocking) ์š”์ฒญ์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์˜๋ฏธ ์žˆ๋Š” ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ง€์ ํ•ฉ๋‹ˆ๋‹ค [8, 10, 12]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/Component-Based Architecture (CBA).md b/10_Wiki/Topics/Frontend_Mastery/Component-Based Architecture (CBA).md new file mode 100644 index 00000000..3c3e07ea --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/Component-Based Architecture (CBA).md @@ -0,0 +1,30 @@ +# [[Component-Based Architecture (CBA)]] + +## ๐Ÿ“Œ Brief Summary +์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Component-Based Architecture, CBA)๋Š” ๋…๋ฆฝ์ ์ด๊ณ  ๋ชจ๋“ˆํ™”๋œ, ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์กฐ๋ฆฝํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ตœ์‹  ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค[1-3]. ๋ ˆ๊ณ  ๋ธ”๋ก์„ ๋งž์ถ”๋“ฏ ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋ช…ํ™•ํžˆ ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ํ†ตํ•ด ์„œ๋กœ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค[2, 4]. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•˜๋Š” ๋Œ€์‹  ํ‘œ์ค€ํ™”๋œ ๋ถ€ํ’ˆ์„ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์•ž๋‹น๊ธฐ๋ฉฐ ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค[4-6]. + +## ๐Ÿ“– Core ์†Œ์Šค Content + +* **์ปดํฌ๋„ŒํŠธ์˜ ์ •์˜ ๋ฐ ํ•ต์‹ฌ ํŠน์ง•** + ์ปดํฌ๋„ŒํŠธ๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ์บก์Аํ™”ํ•œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ๋…๋ฆฝ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๋‹จ์œ„์ž…๋‹ˆ๋‹ค[7]. ์ฃผ์š” ํŠน์ง•์œผ๋กœ๋Š” ๋‚ด๋ถ€ ๊ตฌํ˜„๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ธฐ๊ณ  ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋…ธ์ถœํ•˜๋Š” **์บก์Аํ™”(Encapsulation)**, ์—ฌ๋Ÿฌ ์–ธ์–ด๋‚˜ ํ”Œ๋žซํผ ๊ฐ„์—๋„ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” **์ƒํ˜ธ ์šด์šฉ์„ฑ(Interoperability)**, ๋” ํฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‰ฝ๊ฒŒ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ•  ์ˆ˜ ์žˆ๋Š” **์กฐ๋ฆฝ์„ฑ(Composability)**, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” **๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ(Replaceability)**์ด ์žˆ์Šต๋‹ˆ๋‹ค[8-13]. + +* **์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์˜ ์ฃผ์š” ์žฅ์ ** + * **๊ฐœ๋ฐœ ์†๋„ ํ–ฅ์ƒ ๋ฐ ๋น„์šฉ ์ ˆ๊ฐ(Faster Time-to-Market):** ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋”ฉ์„ ๋ฐฉ์ง€ํ•จ์œผ๋กœ์จ ์ œํ’ˆ ์ถœ์‹œ๋ฅผ ๊ฐ€์†ํ™”ํ•˜๊ณ  ๊ฐœ๋ฐœ ๋น„์šฉ์„ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค[14, 15]. + * **ํ™•์žฅ์„ฑ(Scalability):** ํŠธ๋ž˜ํ”ฝ์ด๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ฆ๊ฐ€ํ•  ๋•Œ ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒฐ์ œ ๋“ฑ ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋งŒ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[16-18]. + * **์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ(Maintainability & Collaboration):** ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฒ„๊ทธ ์ˆ˜์ •์ด๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์—ฌ๋Ÿฌ ํŒ€์ด ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ(ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ ๋“ฑ)๋ฅผ ๋™์‹œ์— ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด ํ˜‘์—…์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค[14, 16, 18-20]. + +* **์„ค๊ณ„ ์›์น™ ๋ฐ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•** + CBA ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๋ชจ๋“ˆ์„ฑ, ์ถ”์ƒํ™”, ๊ทธ๋ฆฌ๊ณ  ์—ญํ• ์— ๋”ฐ๋ฅธ '๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(Separation of Concerns)'๋ฅผ ์›์น™์œผ๋กœ ์‚ผ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค[8, 21]. ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ ๋ฐ ๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ถ„์„ํ•œ ํ›„ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD) ๋“ฑ์˜ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ ๊ฒฝ๊ณ„๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค[22, 23]. ์ดํ›„ ๋ช…ํ™•ํ•œ API ๋ฐ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ(์˜ˆ: REST, gRPC ๋“ฑ)์„ ์„ค๊ณ„ํ•˜๊ณ , ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ๋’ค, CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค[24-26]. + +* **๊ตฌํ˜„ ์‹œ ์ง๋ฉดํ•˜๋Š” ํ•œ๊ณ„ ๋ฐ ๊ณผ์ œ** + * **์ดˆ๊ธฐ ์„ค๊ณ„์˜ ๋ณต์žก์„ฑ๊ณผ ํ†ตํ•ฉ ์˜ค๋ฒ„ํ—ค๋“œ:** ์‹œ์Šคํ…œ์„ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์˜์กด์„ฑ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๋Š” ์ดˆ๊ธฐ ๊ณ„ํš ๋‹จ๊ณ„๊ฐ€ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค[27-29]. ์„œ๋กœ ๋‹ค๋ฅธ ํŒ€์ด ๊ฐœ๋ฐœํ•œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ†ต์‹ ๊ณผ ๋งค๋„๋Ÿฌ์šด ํ†ตํ•ฉ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์—๋„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค[29, 30]. + * **์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ:** ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์ด๋‚˜ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๋“ฑ ์ปดํฌ๋„ŒํŠธ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ์ง€์—ฐ(Latency)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[27, 30, 31]. ๋˜ํ•œ, ๋‹ค์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•  ๊ฒฝ์šฐ ๋ฒ„์ „ ์ถฉ๋Œ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค[31, 32]. + * **๋ณด์•ˆ ๋ฐ ๊ณผ์ž‰ ์—”์ง€๋‹ˆ์–ด๋ง ์œ„ํ—˜:** ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ ์ตœ์‹ ํ™”๋˜์ง€ ์•Š์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ[33], ์œ ์—ฐ์„ฑ๋งŒ์„ ์ถ”๊ตฌํ•˜๋‹ค ๋ณด๋ฉด ์‹œ์Šคํ…œ์„ ๋„ˆ๋ฌด ์ž˜๊ฒŒ ์ชผ๊ฐœ์–ด ๊ณผ์ž‰ ์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์œผ๋กœ ์ด์–ด์งˆ ์œ„ํ—˜๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค[34]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Microservices Architecture]], [[Service-Oriented Architecture (SOA)]], [[Monolithic Architecture]], [[Object-Oriented Architecture]] +- **Projects/Contexts:** [[React]], [[Angular]], [[Vue.js]], [[PayPal]], [[Spotify]], [[Uber]], [[Walmart]] +- **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด, ๊ฐ์ฒด ์ง€ํ–ฅ ์•„ํ‚คํ…์ฒ˜(Object-Oriented Architecture)์™€ CBA๋Š” ์›์น™์„ ์ผ๋ถ€ ๊ณต์œ ํ•˜์ง€๋งŒ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ์™€ ๋™์ž‘์„ ์บก์Аํ™”ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘”๋‹ค๋ฉด, CBA๋Š” ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์—์„œ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„ ์ƒ์„ฑ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค[35]. ๋˜ํ•œ ๊ธฐ์กด์˜ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜(Monolithic Architecture)๋Š” ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ๋ฌถ์–ด ํ™•์žฅ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต์ง€๋งŒ, CBA๋Š” ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ์™€ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค[36, 37]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/Component-Based Architecture.md b/10_Wiki/Topics/Frontend_Mastery/Component-Based Architecture.md new file mode 100644 index 00000000..3d0c239e --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/Component-Based Architecture.md @@ -0,0 +1,32 @@ +# [[Component-Based Architecture]] + +## ๐Ÿ“Œ Brief Summary +์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Component-Based Architecture, CBA)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ๋ชจ๋“ˆํ™”๋˜๊ณ  ๋…๋ฆฝ์ ์ด๋ฉฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„์ธ '์ปดํฌ๋„ŒํŠธ(Component)'๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌ์ถ•ํ•˜๋Š” ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [1, 2]. ๋ ˆ๊ณ  ๋ธ”๋ก์„ ์กฐ๋ฆฝํ•˜๋“ฏ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ํฌ๊ณ  ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ์†๋„์™€ ์‹œ์Šคํ…œ ํ™•์žฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [3, 4]. ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‚ด๋ถ€ ๋กœ์ง๊ณผ ์ƒํƒœ๋ฅผ ์บก์Аํ™”ํ•˜๊ณ  ๋ช…ํ™•ํžˆ ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด, ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํŒ€ ๊ฐ„์˜ ํ˜‘์—… ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [5, 6]. + +## ๐Ÿ“– Core Content +- **ํ•ต์‹ฌ ์›์น™ ๋ฐ ํŠน์ง•:** + - **๋ชจ๋“ˆ์„ฑ ๋ฐ ์บก์Аํ™” (Modularity & Encapsulation):** ์ปดํฌ๋„ŒํŠธ๋Š” ํŠน์ •ํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ถ€๋กœ ์ˆจ๊ธฐ๊ณ (์บก์Аํ™”), ์™ธ๋ถ€์— ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ž˜ ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค [5, 7]. + - **์žฌ์‚ฌ์šฉ์„ฑ ๋ฐ ๋…๋ฆฝ์„ฑ (Reusability & Independence):** ํ•œ ๋ฒˆ ๊ฐœ๋ฐœ๋œ ์ปดํฌ๋„ŒํŠธ๋Š” ์ˆ˜์ • ์—†์ด ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์— ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ „์ฒด ์‹œ์Šคํ…œ์„ ํŒŒ๊ดดํ•˜์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋ฐ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [8-10]. + - **์ƒํ˜ธ์šด์šฉ์„ฑ (Interoperability):** ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์ด๋‚˜ ํ”Œ๋žซํผ์œผ๋กœ ๊ตฌ์ถ•๋œ ์ปดํฌ๋„ŒํŠธ๋ผ๋„ ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค์™€ API๋ฅผ ํ†ตํ•ด ์›ํ™œํ•˜๊ฒŒ ํ†ต์‹ ํ•˜๊ณ  ๊ฒฐํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 11]. + +- **์•„ํ‚คํ…์ฒ˜์˜ ์ฃผ์š” ์ด์ :** + - **๊ฐœ๋ฐœ ์†๋„ ํ–ฅ์ƒ ๋ฐ ๋น„์šฉ ์ ˆ๊ฐ:** ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ์–ด ์ œํ’ˆ ์ถœ์‹œ ๊ธฐ๊ฐ„(Time-to-Market)์„ ์•ž๋‹น๊น๋‹ˆ๋‹ค [12, 13]. + - **ํ™•์žฅ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ:** ์ „์ฒด ์‹œ์Šคํ…œ์„ ์žฌ๊ตฌ์„ฑํ•  ํ•„์š” ์—†์ด ํŠธ๋ž˜ํ”ฝ์ด๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋งŒ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฒ„๊ทธ ์ˆ˜์ • ์‹œ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค [8, 14-16]. + - **๋ณ‘๋ ฌ ๊ฐœ๋ฐœ (Parallel Development):** ์‹œ์Šคํ…œ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋‰˜์–ด ์žˆ์–ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ํŒ€์ด ๋™์‹œ์— ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋‹ดํ•˜์—ฌ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 17]. + +- **์„ค๊ณ„ ์‹œ ๋‹น๋ฉด ๊ณผ์ œ ๋ฐ ๋‹จ์ :** + - **๋ณต์žก์„ฑ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ:** ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ, ํ˜ธํ™˜์„ฑ, ๋ฒ„์ „ ๊ด€๋ฆฌ ๋“ฑ ์˜์กด์„ฑ์„ ํ†ต์ œํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค [18-20]. + - **์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ:** ์‹œ์Šคํ…œ์„ ์ง€๋‚˜์น˜๊ฒŒ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ(Over-engineering), ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ํ†ต์‹ (๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ๋ฐ RPC ๋“ฑ)์œผ๋กœ ์ธํ•œ ์ง€์—ฐ(Latency)๊ณผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [18, 21, 22]. + - **๋ณด์•ˆ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€:** ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ, ์ œ๋•Œ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ๊ตฌ์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋  ์œ„ํ—˜์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [23]. + +- **์‹ค์ œ ํ™œ์šฉ ๋ฐ ๋Œ€์•ˆ ์•„ํ‚คํ…์ฒ˜:** + - **ํ™œ์šฉ ์‚ฌ๋ก€:** ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ, ๊ฒฐ์ œ ๊ฒŒ์ดํŠธ์›จ์ด, ์‡ผํ•‘์นดํŠธ์™€ ๊ฐ™์€ ๋ชจ๋“ˆ์ด ๋…๋ฆฝ์ ์œผ๋กœ ํ•„์š”ํ•œ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ, CRM ์‹œ์Šคํ…œ, ๋ชจ๋ฐ”์ผ ์•ฑ ๋“ฑ์—์„œ ํ™œ๋ฐœํžˆ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [24, 25]. ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(React, Angular, Vue.js)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฑ์—”๋“œ ํ”Œ๋žซํผ(Java EE, .NET ๋“ฑ)์—์„œ๋„ ์ด ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜๋ฉฐ, PayPal, Walmart, Spotify, Uber ๋“ฑ์˜ ๊ธฐ์—…๋“ค์ด ์ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•ด ํ™•์žฅ์„ฑ์„ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค [3, 26, 27]. + - **๋Œ€์•ˆ ์•„ํ‚คํ…์ฒ˜:** ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ์™€ ํŒ€ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ๊ตฌ์„ฑ๋œ [[Monolithic Architecture]], ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜ [[Microservices Architecture]], ๊ธฐ์—… ํ™˜๊ฒฝ์— ๋งž์ถ˜ [[Service-Oriented Architecture (SOA)]], [[Layered Architecture]] ๋“ฑ๊ณผ ๋น„๊ต๋˜๊ฑฐ๋‚˜ ํ˜ผํ•ฉ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [28-31]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Modularity]], [[Encapsulation]], [[Monolithic Architecture]], [[Microservices Architecture]], [[Service-Oriented Architecture (SOA)]] +- **Projects/Contexts:** [[React, Angular, Vue.js ๊ธฐ๋ฐ˜ ํ”„๋ก ํŠธ์—”๋“œ UI ๊ตฌ์ถ•]], [[์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ ๋ฐ CRM ์‹œ์Šคํ…œ ์„ค๊ณ„]], [[Java EE ๋ฐ .NET ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜]] +- **Contradictions/Notes:** ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜์ง€๋งŒ, ๋ชจ๋“ˆํ™”๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋ ค๋Š” ๋ชฉ์ ์œผ๋กœ ์‹œ์Šคํ…œ์„ ๋„ˆ๋ฌด ์ž˜๊ฒŒ ์ชผ๊ฐœ๋Š” ๊ฒƒ(Over-engineering)์€ ์˜คํžˆ๋ ค ํ†ตํ•ฉ ๋น„์šฉ๊ณผ ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ๋””๋ฒ„๊น…์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ์ ˆํ•œ ์„ธ๋ถ„ํ™”(Granularity) ์ˆ˜์ค€์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค [18, 22, 32]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/Core Web Vitals Optimization (INP, LCP ๊ฐœ์„ ).md b/10_Wiki/Topics/Frontend_Mastery/Core Web Vitals Optimization (INP, LCP ๊ฐœ์„ ).md new file mode 100644 index 00000000..a39e0ec0 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/Core Web Vitals Optimization (INP, LCP ๊ฐœ์„ ).md @@ -0,0 +1,31 @@ +# [[Core Web Vitals Optimization (INP, LCP ๊ฐœ์„ )]] + +## ๐Ÿ“Œ Brief Summary +Core Web Vitals๋Š” ๊ตฌ๊ธ€์ด ์›น ํŽ˜์ด์ง€์˜ ๊ฒ€์ƒ‰ ์ˆœ์œ„์™€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜ํ•œ ํ•ต์‹ฌ ์„ฑ๋Šฅ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค [1]. ์—ฌ๊ธฐ์—๋Š” ํ™”๋ฉด์˜ ์ฃผ์š” ์ฝ˜ํ…์ธ ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ์†๋„๋ฅผ ์ธก์ •ํ•˜๋Š” LCP(Largest Contentful Paint)์™€ ํŽ˜์ด์ง€ ์„ธ์…˜ ๋‚ด๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์— ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์‘๋‹ตํ•˜๋Š”์ง€ ์ธก์ •ํ•˜๋Š” INP(Interaction to Next Paint)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค [1, 2]. ์ด ์ง€ํ‘œ๋“ค์˜ ๊ธฐ์ค€์น˜(LCP 2.5์ดˆ ๋ฏธ๋งŒ, INP 200 ๋ฐ€๋ฆฌ์ดˆ ๋ฏธ๋งŒ)๋ฅผ ๋‹ฌ์„ฑํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ดํƒˆ๋ฅ ์„ ๋‚ฎ์ถ”๊ณ  ์œ ๊ธฐ์  ๊ฒ€์ƒ‰(SEO) ์„ฑ๊ณผ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1-3]. + +## ๐Ÿ“– Core Content + +- **Largest Contentful Paint (LCP) ์ตœ์ ํ™”** + LCP๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์˜ ๊ฐ€์žฅ ํฐ ์ฝ˜ํ…์ธ  ์š”์†Œ๊ฐ€ ๋ Œ๋”๋ง๋˜๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋ฉฐ, ์ด๋ฅผ 2.5์ดˆ ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค [1]. + - **์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…(Code Splitting):** ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒˆ๋“ค๋Ÿฌ๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•˜๋‚˜์˜ ํฐ ํŒŒ์ผ๋กœ ๋ฌถ์ง€๋งŒ, `React.lazy()` ๋“ฑ์„ ํ†ตํ•ด ๋ผ์šฐํŠธ ์ˆ˜์ค€์—์„œ ์ฝ”๋“œ๋ฅผ ๋ถ„ํ• ํ•˜๋ฉด ์ดˆ๊ธฐ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ 30~50%๊ฐ€๋Ÿ‰ ์ค„์—ฌ LCP๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. + - **๋ Œ๋”๋ง ์ „๋žต ๋ณ€๊ฒฝ:** ํด๋ผ์ด์–ธํŠธ ์ธก ๋ Œ๋”๋ง(CSR)์€ ์ดˆ๊ธฐ ๋กœ๋”ฉ์ด ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [5, 6]. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์ด๋‚˜ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG)์„ ๋„์ž…ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ ์ „์— ์™„์„ฑ๋œ HTML์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฆ‰์‹œ ์ œ๊ณตํ•จ์œผ๋กœ์จ LCP ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7-9]. + - **์ด๋ฏธ์ง€ ์ตœ์ ํ™”:** WebP๋‚˜ AVIF ๊ฐ™์€ ํ˜„๋Œ€์ ์ธ ์ด๋ฏธ์ง€ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ํ™”๋ฉด์— ๋ณด์ผ ๋•Œ๋งŒ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” `loading="lazy"` ์ง€์—ฐ ๋กœ๋”ฉ์„ ๋„์ž…ํ•ด ์ดˆ๊ธฐ ์ฃผ์š” ๋ฆฌ์†Œ์Šค์™€์˜ ๋Œ€์—ญํญ ๊ฒฝ์Ÿ์„ ๋ง‰์Šต๋‹ˆ๋‹ค [10, 11]. + +- **Interaction to Next Paint (INP) ์ตœ์ ํ™”** + INP๋Š” ๊ธฐ์กด์˜ First Input Delay(FID)๋ฅผ ๋Œ€์ฒดํ•œ ์ง€ํ‘œ๋กœ, ํด๋ฆญ์ด๋‚˜ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ ๊ฐ™์€ ์ƒํ˜ธ์ž‘์šฉ ์ง€์—ฐ ์‹œ๊ฐ„์„ 200ms ์ด๋‚ด๋กœ ์‘๋‹ตํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค [2]. + - **๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrent Rendering):** React 19์˜ `useTransition` ๋ฐ `useDeferredValue` ํ›…์„ ํ†ตํ•ด ๋ฌด๊ฑฐ์šด ์ƒํƒœ ์—…๋ฐ์ดํŠธ(์˜ˆ: ๋Œ€๊ทœ๋ชจ ๋ชฉ๋ก ํ•„ํ„ฐ๋ง)๋ฅผ ํ›„์ˆœ์œ„๋กœ ๋ฏธ๋ฃจ๊ณ , ๊ธด๊ธ‰ํ•œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ(ํƒ€์ดํ•‘ ๋“ฑ)์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ์‘๋‹ต์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [2, 12, 13]. + - **๋ฉ”๋ชจ์ด์ œ์ด์…˜๊ณผ ์—ฐ์‚ฐ ์ตœ์ ํ™”:** ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ '๋ฆฌ๋ Œ๋”๋ง ํญํฌ(Re-render Cascade)' ํ˜„์ƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด `React.memo`, `useMemo`, `useCallback`์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [14-16]. ๋”๋ถˆ์–ด ํ‚ค ์ž…๋ ฅ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ๊ณผ๋„ํ•œ API ํ˜ธ์ถœ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋””๋ฐ”์šด์‹ฑ(Debouncing)์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค [17]. + - **๋ชฉ๋ก ๊ฐ€์ƒํ™”(Virtualization):** ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๊ฐœ์˜ ํ•ญ๋ชฉ์ด ํฌํ•จ๋œ ๊ธด ๋ชฉ๋ก์„ ๋ Œ๋”๋งํ•  ๋•Œ, ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋…ธ๋“œ๋งŒ ๋ Œ๋”๋งํ•˜๋Š” ๊ฐ€์ƒํ™”๋ฅผ ๋„์ž…ํ•˜๋ฉด ๋ ˆ์ด์•„์›ƒ ๋ฐ ํŽ˜์ธํŠธ ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜์—ฌ ์ƒํ˜ธ์ž‘์šฉ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค [2, 18, 19]. + - **React Server Components (RSC):** ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ ์ „์ ์œผ๋กœ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํฌ๊ธฐ๋ฅผ 40~60% ๊ฐ์†Œ์‹œํ‚ค๊ณ , ์ƒํ˜ธ์ž‘์šฉ ์‹œ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ INP๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [20]. + +- **Cumulative Layout Shift (CLS) ๊ด€๋ฆฌ ๋ฐ ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง** + - ์‹œ๊ฐ์  ์•ˆ์ •์„ฑ์„ ์ธก์ •ํ•˜๋Š” CLS๋Š” 0.1 ๋ฏธ๋งŒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ DOM ๋…ธ๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ React Fragment์˜ ์‚ฌ์šฉ, ์ด๋ฏธ์ง€์˜ ๋ช…์‹œ์  ํฌ๊ธฐ ์ง€์ • ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค [2, 21]. + - ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ `React DevTools Profiler`๋‚˜ `Lighthouse`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ชฉ์„ ์œ ๋ฐœํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ๊ณ , ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์‹ค์ธก ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด `Web Vitals` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ•„๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [22-26]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Largest Contentful Paint (LCP)]], [[Interaction to Next Paint (INP)]], [[Concurrent Rendering]], [[Server-Side Rendering (SSR)]], [[React Server Components (RSC)]] +- **Projects/Contexts:** [[React Performance Optimization]], [[Search Engine Optimization (SEO) Strategy]] +- **Contradictions/Notes:** Lighthouse์™€ ๊ฐ™์€ ๋„๊ตฌ๋กœ ์ธก์ •ํ•œ ์—ฐ๊ตฌ์‹ค ๋ฐ์ดํ„ฐ(Lab measurements)๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ ์„ฑ๋Šฅ๊ณผ ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์„ ๊ฒช๋Š” ์‹ค์ œ ์‚ฌ์šฉ์ž๋“ค์˜ ๊ฒฝํ—˜(Field data)๊ณผ ํ•ญ์ƒ ์ผ์น˜ํ•˜์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ ํ”„๋กœ๋•์…˜ ์ƒ์˜ Web Vitals ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [23, 24]. + +--- +*Last updated: 2026-04-25* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/Core Web Vitals.md b/10_Wiki/Topics/Frontend_Mastery/Core Web Vitals.md new file mode 100644 index 00000000..77590760 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/Core Web Vitals.md @@ -0,0 +1,18 @@ +# [[Core Web Vitals]] + +## ๐Ÿ“Œ Brief Summary +Core Web Vitals(์ฝ”์–ด ์›น ๋ฐ”์ดํƒˆ)์€ ์›น์‚ฌ์ดํŠธ์˜ ์‹ค์ œ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ‰๊ฐ€ํ•˜๋Š” ํ•„์ˆ˜ ์ง€ํ‘œ๋กœ, ๋กœ๋”ฉ ์†๋„, ๋ ˆ์ด์•„์›ƒ์˜ ์•ˆ์ •์„ฑ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋ฐ˜์‘ ์†๋„๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค [1]. ํ•ต์‹ฌ ์ง€ํ‘œ๋กœ๋Š” LCP(Largest Contentful Paint), CLS(Cumulative Layout Shift), INP(Interaction to Next Paint)๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ตฌ๊ธ€์˜ ๊ฒ€์ƒ‰ ์ˆœ์œ„(Ranking signal)์™€ ๋ชจ๋ฐ”์ผ ์šฐ์„  ์ธ๋ฑ์‹ฑ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค [2, 3]. + +## ๐Ÿ“– Core Content +* **ํ•ต์‹ฌ ์ง€ํ‘œ์™€ ๋ชฉํ‘œ์น˜**: Core Web Vitals๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ง€ํ‘œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. LCP(Largest Contentful Paint)๋Š” ์ฃผ์š” ์ฝ˜ํ…์ธ ์˜ ๋กœ๋”ฉ ์†๋„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ 2.5์ดˆ ๋ฏธ๋งŒ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ , CLS(Cumulative Layout Shift)๋Š” ๋ ˆ์ด์•„์›ƒ์˜ ์‹œ๊ฐ์  ์•ˆ์ •์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ 0.1 ๋ฏธ๋งŒ์ด์–ด์•ผ ํ•˜๋ฉฐ, INP(Interaction to Next Paint)๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋ฐ˜์‘์„ฑ์„ ์ธก์ •ํ•˜์—ฌ 200๋ฐ€๋ฆฌ์ดˆ ๋ฏธ๋งŒ์„ ๋ชฉํ‘œ๋กœ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. +* **CSS ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ๊ณผ์˜ ์—ฐ๊ด€์„ฑ**: ์ž˜๋ชป๋œ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ง€์ •, ๋„ˆ๋น„(width) ๋ฐ ๋†’์ด(height) ์†์„ฑ ๋ˆ„๋ฝ, ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ํฐํŠธ ๋“ฑ์€ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ Core Web Vitals ์ ์ˆ˜ ํ•˜๋ฝ์˜ ๊ฐ€์žฅ ํ”ํ•œ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค [2, 3]. ์ž˜ ๊ตฌ์ถ•๋œ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์€ ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์•„์›ƒ ์ด๋™(Layout shift)์„ ์ค„์ด๊ณ  ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ๋ฏผ์ฒฉํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [1]. +* **์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•**: CLS๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์— `aspect-ratio` ์†์„ฑ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์ธ ๋„ˆ๋น„์™€ ๋†’์ด๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5, 6]. LCP ํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ๋Š” LCP ์š”์†Œ(์ฃผ๋กœ ํžˆ์–ด๋กœ ์ด๋ฏธ์ง€)์— `fetchpriority="high"`๋ฅผ ์„ค์ •ํ•˜๊ณ  ํด๋“œ(fold) ์•„๋ž˜์˜ ์ด๋ฏธ์ง€๋Š” ์ง€์—ฐ ๋กœ๋”ฉ(lazy-load) ์ฒ˜๋ฆฌํ•˜๋ฉฐ, WebP๋‚˜ AVIF ๊ฐ™์€ ์••์ถ•๋ฅ ์ด ๋†’์€ ์ฐจ์„ธ๋Œ€ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค [5-7]. +* **SEO ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ์˜ํ–ฅ**: ๊ตฌ๊ธ€์€ ํŽ˜์ด์ง€ ๊ฒฝํ—˜ ์‹ ํ˜ธ์˜ ์ผ๋ถ€๋กœ Core Web Vitals๋ฅผ ํ™œ์šฉํ•˜๋ฏ€๋กœ, ๋กœ๋”ฉ์ด ๋А๋ฆฌ๊ณ  ๋ ˆ์ด์•„์›ƒ ์ด๋™์ด ์žฆ์€ ๋น„๋ฐ˜์‘ํ˜• ์›น์‚ฌ์ดํŠธ๋Š” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 4]. ๋”ฐ๋ผ์„œ ์ด ์ง€ํ‘œ๋“ค์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์€ 2026๋…„ ํ˜„์žฌ ๋ฐ˜์‘ํ˜• ์›น ๋””์ž์ธ์˜ ํ•ต์‹ฌ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค [4, 8]. + +## ๐Ÿ”— Knowledge Connections +- **Related Topics:** [[Responsive Web Design]], [[CSS Performance Optimization]] +- **Projects/Contexts:** [[Search Engine Optimization (SEO)]] +- **Contradictions/Notes:** ์†Œ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ CSS ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์˜ ์ตœ์ ํ™”๊ฐ€ Core Web Vitals ์ง€ํ‘œ ๊ฐœ์„ ์œผ๋กœ ์ง๊ฒฐ๋œ๋‹ค๊ณ  ๊ฐ•์กฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์†Œ์Šค ๊ฐ„ ์ƒ์ถฉ๋˜๋Š” ์˜๊ฒฌ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. + +--- +*Last updated: 2026-04-26* \ No newline at end of file diff --git a/10_Wiki/Topics/Frontend_Mastery/DOM (Document Object Model).md b/10_Wiki/Topics/Frontend_Mastery/DOM (Document Object Model).md new file mode 100644 index 00000000..b531a1b5 --- /dev/null +++ b/10_Wiki/Topics/Frontend_Mastery/DOM (Document Object Model).md @@ -0,0 +1,25 @@ +# [[DOM (Document Object Model)]] + +## ๐Ÿ“Œ Brief Summary +DOM(Document Object Model)์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ˆ˜์‹ ํ•œ HTML ๋ฌธ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ํŽ˜์ด์ง€ ๊ตฌ์กฐ์˜ ๊ณ„์ธต์  ํŠธ๋ฆฌ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค [1-3]. ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ํƒœ๊ทธ์˜ ํฌํ•จ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ถ€๋ชจ ๋ฐ ์ž์‹ ๋…ธ๋“œ์˜ ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•˜๋ฉฐ, `` ์š”์†Œ๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๊ฐ–์Šต๋‹ˆ๋‹ค [4, 5]. DOM์€ ํŽ˜์ด์ง€์˜ ๋ชจ๋“  ์ฝ˜ํ…์ธ  ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์Šคํƒ€์ผ ์ •๋ณด๋ฅผ ๋‹ด์€ CSSOM๊ณผ ๊ฒฐํ•ฉํ•ด ์ตœ์ข… ํ™”๋ฉด ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์˜ ํ•ต์‹ฌ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค [6-8]. + +## ๐Ÿ“– Core Content +* **DOM ํŠธ๋ฆฌ์˜ ์ ์ง„์  ๊ตฌ์ถ• (Incremental Construction)** + ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด HTML ๋ฌธ์„œ์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋ฐ›๊ธฐ ์ „๋ถ€ํ„ฐ ์ ์ง„์ ์œผ๋กœ DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 4]. ์ดˆ๊ธฐ 14KB์˜ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์ด ์ˆ˜์‹ ๋˜๋ฉด ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž๋กœ, ๋ฌธ์ž๋ฅผ ํ† ํฐ(startTag ๋ฐ endTag ๋“ฑ)์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค, ์ตœ์ข…์ ์œผ๋กœ ๋…ธ๋“œ(Node)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ์กฐ๋ฆฝํ•ฉ๋‹ˆ๋‹ค [1, 4]. ์ด ์ ์ง„์  ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋•๋ถ„์— ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์ง„ํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ๋„ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ Œ๋”๋ง ์ค€๋น„๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [9]. + +* **๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ DOM๊ณผ CSSOM** + DOM์€ ๋ฌธ์„œ์˜ '์ฝ˜ํ…์ธ '๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ˜๋ฉด, CSSOM์€ ํ•ด๋‹น ์ฝ˜ํ…์ธ ์˜ '์Šคํƒ€์ผ'์„ ์ •์˜ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค [9, 10]. ์ด ๋‘ ๋ชจ๋ธ์€ ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ๊ฒฐํ•ฉ๋˜์–ด ํ™”๋ฉด์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•˜๋Š” ๋…ธ๋“œ๋งŒ์„ ํฌํ•จํ•˜๋Š” '๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)'๋กœ ํ•ฉ์„ฑ๋ฉ๋‹ˆ๋‹ค [6, 11, 12]. ์ด ๊ณผ์ •์—์„œ `