Library/React

[ React / UI ] Headless UI ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

ma.caron_g 2025. 1. 31. 11:51

 

"๐Ÿก ๋ณด๊ธฐ ์ข‹์€ ๋–ก์ด ๋จน๊ธฐ๋„ ์ข‹๋‹ค"

์‚ฌ๋žŒ์˜ ์˜ค๊ฐ ์ค‘ ๊ฐ€์žฅ ๋ฐœ๋‹ฌํ•œ ๊ฐ๊ฐ์ด ์‹œ๊ฐ์ด๋ผ๊ณ ํ•œ๋‹ค.

์™ธ๋ถ€ ์ž๊ทน์— ๋Œ€ํ•œ ๋ฐ˜์‘์ด ๊ฐ€์žฅ ๋ฏผ๊ฐํ•˜๊ณ  ๋น ๋ฅธ ๊ฐ๊ฐ์ด๊ธฐ๋„ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์œ„ ์†๋‹ด์ด ๊ดœํžˆ ์žˆ๋Š” ๋ง์ด ์•„๋‹ˆ๋ฉฐ, ์ž‘์ž๋Š” ์š”๋ฆฌ๋ฅผ ์ทจ๋ฏธ๋กœ ํ•˜๋ฉด์„œ ํ”Œ๋ ˆ์ดํŒ…์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๊ธฐ๋Šฅ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ๋””์ž์ธ ๋˜ํ•œ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ด ๋””์ž์ธ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ํŽธ๋ฆฌํ•œ์ง€ ๋˜ํ•œ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค.

 

์ „์ฒด์ ์ธ ๋””์ž์ธ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ์ž‘ํ•˜๊ฒŒ ๋ ํ…๋ฐ ์ด๋•Œ, ์œ ์šฉํ•œ Headless UI์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

 

๐Ÿค• Headless

Headless๋ž€, ๋””์ž์ธ ์—†์ด ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

์ ‘๊ทผ์„ฑ, ์ƒํƒœ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šคํƒ€์ผ์„ ์™„์ „ํžˆ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

`MUI`, `Bootstrap` ๋“ฑ์˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋””์ž์ธ์ด ์ž…ํ˜€์ ธ์žˆ๊ณ  ํ•ด๋‹น ๋””์ž์ธ์„ ์ปค์Šคํ…€ํ•˜๊ธฐ์—๋Š” ์–ด๋ ค์›€์ด ์žˆ๋‹ค.

 

 

๐Ÿค” ๊ทธ๋Ÿผ HTML์ด ์ œ๊ณตํ•˜๋Š”๊ฑด?

HTML์—์„œ ์ œ๊ณต๋˜๋Š” <input/>,<button/> ๋˜ํ•œ ์ตœ์†Œํ•œ์˜ ์Šคํƒ€์ผ์„ ๊ฐ€์ง€๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ํ™•์žฅ ๋ฐ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์–ด๋ ต๋‹ค.

๋ฌผ๋ก , ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜๋ฉด์„œ ๋””์ž์ธ๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฑฐ๊ธฐ์— ์‹œ๊ฐ„์„ ์Ÿ๊ธฐ์—๋Š” ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์— ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋œ๋‹ค.

๋ฐ˜๋ฉด HeadlessUI ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” `DropDown`์ด๋‹ค. ๊ตฌ๋ถ„์„ , ์„œ๋ธŒ๋ฉ”๋‰ด๋“ฑ์ด ์ง€์›๋˜๋ฉด์„œ UI๋˜ํ•œ ์ปค์Šคํ…€์„ ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Headless UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” HTML์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ํƒœ๊ทธ ์™ธ์—๋„ ๊ธฐ๋ณธ ํƒœ๊ทธ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋”์šฑ ํ™•์žฅ๋˜๋ฉด์„œ ๋””์ž์ธ์„ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ถœ์ฒ˜: https://ui.shadcn.com/docs/components/dropdown-menu

 

๐Ÿค” ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

1. ์ž์œ ๋„: Headless UI๋Š” ์Šคํƒ€์ผ๋ง์ด ์—†์–ด ์ž์œ ๋กญ๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค. (tailwind css์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.)

2. ์ ‘๊ทผ์„ฑ: Headless UI๋Š” ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ‘๊ทผ์„ฑ์— ๋Œ€ํ•œ ๊ฑฑ์ • ์—†์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์žฌ์‚ฌ์šฉ์„ฑ: ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ผ๊ด€๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ณ , ๊ฐ ํ”„๋กœ์ ํŠธ์˜ ๋””์ž์ธ์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š”, ํ”„๋กœ์ ํŠธ์˜ ๋””์ž์ธ ์‹œ์Šคํ…œ ๋ฐ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ์„ฑ๋Šฅ ์ตœ์ ํ™”: ๋ถˆํ•„์š”ํ•œ ์Šคํƒ€์ผ์ด๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ  ํฌํ•จํ•˜์ง€ ์•Š์•„ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ์œ ๋ฆฌํ•˜๋‹ค.

5. ์œ ์—ฐ์„ฑ: ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ(React, Vue.js)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

6. ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ: ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•˜๋Š”๋ฐ ์œ ๋ฆฌํ•˜๋‹ค.

 

 

๐Ÿ”ฅ์ธ๊ธฐ์žˆ๋Š” HeadlessUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์ž‘์„ฑ์‹œ๊ธฐ (2025. 01. 31 ๊ธฐ์ค€)

 

โฆ Radix

 

Radix UI

Components, icons, and colors for building highโ€‘quality, accessible UI. Free and open-source.

www.radix-ui.com

 

โฆ Shadcn

 

shadcn/ui

Beautifully designed components that you can copy and paste into your apps. Accessible. Customizable. Open Source.

ui.shadcn.com

 

Shadcn๋„ ์ฝ”๋“œ๋ฅผ ํŒŒํ—ค์น˜๋ฉด radix๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

 

๐Ÿ“– ๋งˆ์น˜๋ฉฐ

์ž‘์ž๋Š” ํšŒ์‚ฌ ์™ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ์žˆ๋Š”๋ฐ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์—์„œ `radix`์—์„œ ์ œ๊ณต๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•ด์„œ @github.com/radix-ui๋ฅผ์ฐธ๊ณ ํ•˜๋ ค๋Š”๋ฐ ํŒŒํ—ค์น˜๋Š” ๊น€์— ๋ธ”๋กœ๊ทธ์— ์ž‘์„ฑํ•˜์—ฌ ๊ณต๋ถ€ํ•ด๋ณด๊ณ ์ž ์ž‘์„ฑํ•ด๋ณด๋ คํ•œ๋‹ค.