# [[Headless Components|Headless Components]] ## ๐Ÿ“Œ Brief Summary Headless Components(ํ—ค๋“œ๋ฆฌ์Šค ์ปดํฌ๋„ŒํŠธ)๋Š” ๋งˆํฌ์—…์ด๋‚˜ ์Šคํƒ€์ผ๋ง ์—†์ด ์ƒํƒœ ๊ด€๋ฆฌ([[State|State]] Management)์™€ ๋™์ž‘ ๋กœ์ง(Behavioral [[Logic|Logic]])๋งŒ์„ ์ œ๊ณตํ•˜๋Š” ํ›…(Hooks) ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค [1, 2]. ์‹œ๊ฐ์ ์ธ ๋ Œ๋”๋ง ์š”์†Œ๋Š” ์ „์ ์œผ๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์œ„์ž„ํ•˜์—ฌ ๋กœ์ง๊ณผ ๋งˆํฌ์—…์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค [3]. ๊ณ ๋„๋กœ ์ปค์Šคํ…€๋œ ๋ธŒ๋žœ๋“œ UI๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ์ ‘๊ทผ์„ฑ([[Accessibility|Accessibility]])์„ ์žƒ์ง€ ์•Š์œผ๋ฉด์„œ๋„ ํŠน์ • ๋””์ž์ธ ์‹œ์Šคํ…œ์— ์ข…์†๋˜์ง€ ์•Š๋Š” ์œ ์—ฐํ•œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ด์ƒ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [2-4]. ## ๐Ÿ“– Core Content * **๋กœ์ง๊ณผ ๋งˆํฌ์—…์˜ ์™„๋ฒฝํ•œ ๋ถ„๋ฆฌ (Separation of Logic and Markup):** Headless Components๋Š” UI(์‹œ๊ฐ์  ํ˜•ํƒœ) ์—†์ด ๋กœ์ง๋งŒ์„ ๋…ธ์ถœํ•˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์™„์ „ํžˆ ์ž์œ ๋กญ๊ฒŒ UI๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ(Composability)์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ํŠน์ • ๋””์ž์ธ ์‹œ์Šคํ…œ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค [3]. ๋˜ํ•œ 'Headless Hook'์˜ ํ˜•ํƒœ๋กœ ์ถ”์ถœ๋  ๊ฒฝ์šฐ, UI๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ๋„ ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ ธ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ([[_แ„‚แ…ฌแ„‹แ…ช แ„‘แ…กแ†ฏแ„ƒแ…กแ„…แ…ตแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต_ - แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns)|Separation of Concerns]])๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5]. * **์™„์ „ํ•œ ์Šคํƒ€์ผ๋ง ์ œ์–ด (Complete Style Control):** ๋””์ž์ธ์  ์˜๊ฒฌ(opinions)์„ ๋‚ดํฌํ•˜์—ฌ ๋ฐฐํฌ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ [[Styled Components|Styled Components]]์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, Headless Components๋Š” ์‹œ๊ฐ์  ๊ตฌํ˜„์„ ์ „์ ์œผ๋กœ ์†Œ๋น„์ž์ธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งก๊น๋‹ˆ๋‹ค [6]. ์ด ํŠน์„ฑ ๋•๋ถ„์— ์ž์ฒด์ ์ธ ๋ธŒ๋žœ๋“œ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์—„๊ฒฉํ•˜๊ฒŒ ๋ฐ˜์˜ํ•ด์•ผ ํ•˜๋Š” ๊ณ ๋„์˜ ๋ธŒ๋žœ๋”ฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(highly branded apps)์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [2]. * **๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์ ‘๊ทผ์„ฑ ๋ณด์žฅ (State Management & Accessibility):** ๋“œ๋กญ๋‹ค์šด, ๋‹ค์ด์–ผ๋กœ๊ทธ, ์ฝค๋ณด๋ฐ•์Šค(์˜ˆ: Down[[Shift|Shift]]์˜ `useCombobox()`) ๋“ฑ ์ƒํ˜ธ์ž‘์šฉ์ด ๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ, Headless ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‚ด๋ถ€ ์ƒํƒœ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ‚ค๋ณด๋“œ ํƒ์ƒ‰, ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์ง€์›๊ณผ ๊ฐ™์€ ํ•„์ˆ˜์ ์ธ ์ ‘๊ทผ์„ฑ(Accessibility) ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [3, 4]. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ๋ธŒ๋ผ์šฐ์ €๋ณ„ ํ˜ธํ™˜์„ฑ ์ด์Šˆ๋‚˜ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๋ถ€๋‹ด ์—†์ด ์‹œ๊ฐ์  ๋””์ž์ธ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. * **[[Tailwind CSS|Tailwind CSS]]์™€์˜ ์‹œ๋„ˆ์ง€ ([[Synergy|Synergy]] with Tailwind CSS):** 2025๋…„ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ ํŠธ๋ Œ๋“œ ์ค‘ ํ•˜๋‚˜๋Š” [[Radix UI|Radix UI]]๋‚˜ [[Headless UI|Headless UI]] ๊ฐ™์€ Headless ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ ๊ทน์ ์ธ ์ฑ„ํƒ์ž…๋‹ˆ๋‹ค [4]. ํŠนํžˆ ์ด ํŒจํ„ด์€ Tailwind CSS์™€ ๊ฒฐํ•ฉํ•  ๋•Œ ๊ทธ ์ง„๊ฐ€๋ฅผ ๋ฐœํœ˜ํ•˜๋Š”๋ฐ, ๋ณต์žกํ•œ ๋กœ์ง๊ณผ ์ ‘๊ทผ์„ฑ์€ Headless ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฑ…์ž„์ง€๊ณ , ์‹œ๊ฐ์  ์Šคํƒ€์ผ๋ง์€ Tailwind์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋กœ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์ ‘๊ทผ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋ธŒ๋žœ๋“œ ์ „์šฉ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Compound Components|Compound Components]], Tailwind CSS, Accessibility (A11y), [[Design Systems|DesignSystems]] - **Projects/Contexts:** [[Radix UI|Radix UI]], Headless UI, [[Downshift|Downshift]], shadcn/ui - **Contradictions/Notes:** ์ผ๋ฐ˜์ ์ธ ์Šคํƒ€์ผ๋ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: Styled Components)๋Š” ์ปดํฌ๋„ŒํŠธ์— ํŠน์ •ํ•œ ๋””์ž์ธ์  '์˜๊ฒฌ(opinions)'์ด ๊ฒฐํ•ฉ๋œ ์ฑ„๋กœ ์ œ๊ณต๋˜์ง€๋งŒ, Headless Components๋Š” ๋””์ž์ธ์„ ๋ฐฐ์ œํ•˜๊ณ  ์˜ค์ง ๋กœ์ง๊ณผ ์ƒํƒœ๋งŒ์„ ์ œ๊ณตํ•˜์—ฌ ์‹œ๊ฐ์  ์ž์œ ๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค๋Š” ์ ์—์„œ ๋ช…ํ™•ํ•œ ๋Œ€๋น„๋ฅผ ์ด๋ฃน๋‹ˆ๋‹ค [6]. --- *Last updated: 2026-04-26*