๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘จ‍๐Ÿ’ป web.dev/translates

(๋ฒˆ์—ญ) Claude๋กœ UI ๋ฒ„๊ทธ๋ฅผ ๋””๋ฒ„๊น…ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์กŒ์„๊นŒ์š”?

by HandHand 2026. 5. 22.

 

 

์›๋ฌธ: https://blog.logrocket.com/debugging-session-with-claude/

โš ๏ธ ํ˜„์žฌ ์›๋ฌธ์€ ์ ‘๊ทผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

์ง€๋‚œ 2๋…„ ๋™์•ˆ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋“ค์€ AI๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ๋Œ€์ฒดํ• ์ง€๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ๋Š” AI๊ฐ€ ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ฒดํ•˜์ง€๋Š” ์•Š๊ณ , ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋  ๊ฑฐ๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ์ €๋Š” ์œ ๋‚œํžˆ ๊นŒ๋‹ค๋กœ์šด UI ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋‚ฌ๊ณ , ์ด ์ฃผ์žฅ์„ ์ง์ ‘ ๊ฒ€์ฆํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. AI๋Š” ๋Œ€์ฒด์žฌ์ผ๊นŒ์š”, ์•„๋‹ˆ๋ฉด ๋„๊ตฌํ•จ์— ํ•˜๋‚˜ ๋” ์–น์€ ๋„๊ตฌ์ผ ๋ฟ์ผ๊นŒ์š”?

 

๋ฐฐ๊ฒฝ์„ ์กฐ๊ธˆ ๋ง์”€๋“œ๋ฆฌ๋ฉด, ์ €๋Š” 10๋…„ ๋„˜๊ฒŒ ์—…๊ณ„ ๊ฒฝ๋ ฅ์„ ์Œ“์•„ ์˜จ ํ’€์Šคํƒ ์‹œ๋‹ˆ์–ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ๊ณตํ•™ ํ•™์‚ฌ ํ•™์œ„๋ฅผ ๋ฐ›๊ณ  ์กธ์—…ํ•œ ๋’ค๋กœ ํ—ฌ์Šค์ผ€์–ด, ๊ธˆ์œต, ๊ต์œก ๋“ฑ ๋‹ค์–‘ํ•œ ์—…๊ณ„์—์„œ IC์™€ ํŒ€ ๋ฆฌ๋“œ๋ฅผ ๋‘๋ฃจ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ๋ธ”๋ก์ฒด์ธ๋ถ€ํ„ฐ ๋…ธ์ฝ”๋“œ ํ”Œ๋žซํผ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์ˆ˜๋งŽ์€ "ํŒŒ๊ดด์ " ๊ธฐ์ˆ ์ด ๋–ด๋‹ค ์‚ฌ๋ผ์ง€๋Š” ๋ชจ์Šต์„ ์ง€์ผœ๋ดค์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ ์ด๋ฒˆ AI์˜ ๋ฌผ๊ฒฐ์€ ๊ฒฐ์ด ์ข€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ ๋Šฅ๋ ฅ์ด ๋ถ€์ •ํ•  ์ˆ˜ ์—†์„ ๋งŒํผ ์ธ์ƒ์ ์ด์–ด์„œ, ์‹ค์ œ ํ˜„์žฅ์—์„œ๋Š” ์–ด๋–ค ๋ชจ์Šต์ผ์ง€ ์ง์ ‘ ์‹œํ—˜ํ•ด ๋ณด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด ๊ธ€์—์„œ๋Š” Claude ๋ชจ๋ธ๊ณผ ์ฃผ๊ณ ๋ฐ›์€ ๋Œ€ํ™”๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น… ์—ฌ์ •์„ ํ’€์–ด๋ด…๋‹ˆ๋‹ค. ๋๋ถ€๋ถ„์—๋Š” ๊ทธ ๊ณผ์ •์—์„œ ๋А๋‚€ ์ ๊ณผ ํ•จ๊ป˜ ์žฅ๋‹จ์ ์„ ์ •๋ฆฌํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

 

์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น… ์—ฌ์ •

์ฐธ๊ณ . ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๋Œ€ํ™”๋Š” ์ผ๋ถ€ ์ค„์—ฌ์„œ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.

 

์ƒํ™ฉ์„ ์ข€ ๋” ์„ค๋ช…๋“œ๋ฆฌ์ž๋ฉด, ์ €๋Š” ํˆฌ์ž ์ œ์•ˆ์„œ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ์ผ์„ ์ „๋ฌธ์œผ๋กœ ํ•˜๋Š” ์ž์‚ฐ์šด์šฉ ํšŒ์‚ฌ์—์„œ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ์ฆ‰ ์ด ๊ฒฝ์šฐ์—” ์žฌ๋ฌด ์ž๋ฌธ๊ฐ€๊ฐ€ ํ…œํ”Œ๋ฆฟ์„ ๊ณ ๋ฅด๋ฉด, ๊ณง๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์•ˆ์„œ๋ฅผ ์ƒ์„ฑํ•ด ์ค„ ์–‘์‹์„ ์ž‘์„ฑํ•˜๋ผ๋Š” ์•ˆ๋‚ด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ์—๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ…œํ”Œ๋ฆฟ์„ ๋ฐ”๊พธ๋ฉด ๋‹ค์‹œ ์–‘์‹ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ ์–‘์‹์ด ์–ผ์–ด๋ถ™์–ด, ์–ด๋–ค ์„ ํƒ์ง€๋„ ํด๋ฆญ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ์ƒ๋‹จ ๋ฐ”, ๊ฐ๊ด€์‹ ๋‹ต๋ณ€์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋‘ ๊ฐœ์˜ ์งˆ๋ฌธ, ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ ๋ฒ„ํŠผ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ‰๋ฒ”ํ•œ Next.js ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์— ์ œ๊ฐ€ ์•„๋Š” ๊ฑฐ๋ผ๊ณค, ์–ด๋А ๋‹ต๋ณ€๋„ ํด๋ฆญ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ๊ฐ€์„ค: ์–‘์‹์˜ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ

 

Claude์—๊ฒŒ ๋˜์ง„ ์ฒซ ํ”„๋กฌํ”„ํŠธ.

์ด์ƒํ•œ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ์ด ํŽ˜์ด์ง€์— ๋“ค์–ด์™”์„ ๋•Œ๋Š” ์ž˜ ๋™์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ”Œ๋กœ์šฐ ๋„์ค‘์— ์ด ํŽ˜์ด์ง€๋กœ ๋Œ์•„์˜ค๋ฉด, ํŽ˜์ด์ง€๋Š” ๋ Œ๋”๋ง๋˜์ง€๋งŒ ์–‘์‹ ์˜ต์…˜์„ ์–ด๋А ๊ฒƒ๋„ ํด๋ฆญํ•  ์ˆ˜ ์—†๊ณ , ๋ฒ„ํŠผ๋„ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ด์•ผ๋งŒ ๋‹ค์‹œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

์ฒ˜์Œ์— Claude๋Š” Form ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๋‘ ๊ฐœ์˜ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์งš์–ด ๋ƒ…๋‹ˆ๋‹ค. isProcessing๊ณผ isCreating์ž…๋‹ˆ๋‹ค. Claude๊ฐ€ ๋ณด๋Š” ๊ฑด ์ด ์ปดํฌ๋„ŒํŠธ๋ฟ์ด๋ผ, ์ดˆ๊ธฐ ๊ฐ€์„ค์€ ๋ฎคํ…Œ์ด์…˜ ์•ก์…˜ ์ชฝ์œผ๋กœ ํ–ฅํ•ฉ๋‹ˆ๋‹ค.

 

Claude: AutoCreatePage ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ ๋ฌธ์ œ๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. tRPC์—์„œ ๋ฐ›์•„ ์˜จ ๋ฎคํ…Œ์ด์…˜ ์ƒํƒœ(autoCreatePresentationMutation๊ณผ createPresentationMutation)๊ฐ€ ํŽ˜์ด์ง€๋กœ ๋‹ค์‹œ ๋Œ์•„์™”์„ ๋•Œ ๋กœ๋”ฉ ์ƒํƒœ๋‚˜ ์—๋Ÿฌ ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ์žˆ์–ด์„œ, ๋กœ์ปฌ isCreating ์ƒํƒœ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฆฌ์…‹๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์›์ธ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

 

์ด ๊ฐ€์„ค์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ธฐ ์œ„ํ•ด Claude๋Š” ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๋Š” console.log ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์ €๋Š” ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ช‡ ์ฐจ๋ก€ ์ฃผ๊ณ ๋ฐ›์€ ๋์—, Claude๋Š” ๋งˆ์นจ๋‚ด ์ง„์งœ ์›์ธ์„ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค. ์งˆ๋ฌธ ์–‘์‹์— disabledclassname์ด ์ ์šฉ๋ผ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Claude๋Š” disabled prop์„ ๋ช…์‹œ์ ์œผ๋กœ false๋กœ ๋‘์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

 

className={clsx(' px-4', {
  'pointer-events-none select-none opacity-15': disabled,
})}

 

ํ•˜์ง€๋งŒ ์ด ์ˆ˜์ •์œผ๋กœ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๊ธฐ์—, Claude์˜ ์ฒซ ๊ฐ€์„ค์€ ๋ช…๋ฐฑํžˆ ๋น—๋‚˜๊ฐ„ ์…ˆ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ง์ ‘ ์กฐ์‚ฌ๋ฅผ ์ข€ ํ•ด ๋ณด๋ฉด์„œ Claude์˜ ์ปจํ…์ŠคํŠธ ํ•œ๊ณ„๊ฐ€ ์–ด๋””๊นŒ์ง€์ธ์ง€ ์‹œํ—˜ํ•ด ๋ด…๋‹ˆ๋‹ค.

 

๋‘ ๋ฒˆ์งธ ๊ฐ€์„ค: ํ™”๋ฉด์„ ๋ง‰๊ณ  ์žˆ๋Š” ๋กœ๋”ฉ ์Šคํฌ๋ฆฐ

ํ”„๋กฌํ”„ํŠธ: ๊ณ„์† ํ…Œ์ŠคํŠธํ•ด ๋ดค๋”๋‹ˆ, ์งˆ๋ฌธ ์–‘์‹๋งŒ์ด ์•„๋‹ˆ๋ผ ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ๋ฉˆ์ถ˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ƒ๋‹จ ๋ฐ”์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ๋„, '์ˆ˜๋™์œผ๋กœ ์„ค์ •' ๋ฒ„ํŠผ๋„ ํด๋ฆญ์ด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์›์ธ์ด Next.js ํŽ˜์ด์ง€๋ฅผ ์ด ์ •๋„๋กœ ๋ฌด๋ฐ˜์‘ ์ƒํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ์š”? ์œ„์•„๋ž˜ ์Šคํฌ๋กค์€ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ์ž Claude๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ๋„“ํ˜€ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ฝ์–ด๋ณด๋”๋‹ˆ, ๊ทธ ์œ„์— fixed๋กœ ์ž๋ฆฌ ์žก์€ ๋กœ๋”ฉ ์Šคํฌ๋ฆฐ์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค.

 

<div
  role="status"
  data-testid="loading-screen"
  className="fixed left-0 top-0 z-50 flex h-full w-full flex-col items-center justify-center bg-primary-navy/[.65] p-3"
>

 

Claude๋Š” ์—ฌ์ „ํžˆ isProcessing๊ณผ isCreating ๋‘ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์–ด์„œ, ์ƒˆ๋กœ์šด ๊ฐ€์„ค์€ ์ฒซ ๋ฒˆ์งธ ์–‘์‹ ์ œ์ถœ ์ดํ›„ isCreating์ด false๋กœ ๋ฆฌ์…‹๋˜์ง€ ์•Š์•„ ํŽ˜์ด์ง€๊ฐ€ ๋ฌด๋ฐ˜์‘์ด ๋˜์—ˆ๋‹ค๋Š” ์ชฝ์œผ๋กœ ํ๋ฆ…๋‹ˆ๋‹ค.

์ด ๊ฐ€์„ค์€ ๋ฐ˜๋ฐ•ํ•˜๊ธฐ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๊ฑด ์–‘์‹์ด์ง€, ๋กœ๋”ฉ ํ™”๋ฉด์ด ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ Claude๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋ฐ”๋‹ฅ๋‚ฌ๊ณ , ์ œ๊ฐ€ ๋””๋ฒ„๊น…์„ ๋„์™€์ค˜์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Claude: ์ž, ์ด์ œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ ํ•ญ๋ชฉ๋“ค์„ ํ™•์ธํ•˜๋ฉด์„œ ๋””๋ฒ„๊น…์„ ๋„์™€์ฃผ์„ธ์š”.

  • ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์—ด๊ธฐ (F12)
  • Elements ํƒญ์œผ๋กœ ์ด๋™ํ•ด ํŽ˜์ด์ง€ ์š”์†Œ ํ™•์ธ
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ CSS๊ฐ€ ๊ฑธ๋ฆฐ ์š”์†Œ ์ฐพ๊ธฐ
    • z-index๊ฐ€ ๋†’์€ position: fixed
    • ๋ถ€๋ชจ ์š”์†Œ์— ๊ฑธ๋ฆฐ pointer-events: none
    • ํŽ˜์ด์ง€๋ฅผ ๋ฎ๊ณ  ์žˆ๋Š” ๋ณด์ด์ง€ ์•Š๋Š” div
  • Console ํƒญ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜ ํ™•์ธ
  • ํŽ˜์ด์ง€์—์„œ ์šฐํด๋ฆญ ์‹œ๋„ — ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๊ฐ€ ๋œจ๋Š”์ง€

 

Claude๋Š” ์•„์ง ๊นจ๋‹ซ์ง€ ๋ชปํ–ˆ์ง€๋งŒ, ์Šฌ์Šฌ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋“ค์–ด์„œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์„ธ ๋ฒˆ์งธ ๊ฐ€์„ค: ๋‹ซํžˆ์ง€ ์•Š๋Š” ๋ชจ๋‹ฌ

ํ”„๋กฌํ”„ํŠธ: ๋ฌด๋ฐ˜์‘์˜ ์›์ธ์„ ์ฐพ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌด์–ธ๊ฐ€๊ฐ€ body ์ „์ฒด์— pointer-events: none;์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์–ด์š”.

 

Claude: ์กฐ์‚ฌํ•œ ๋‚ด์šฉ์„ ์ข…ํ•ฉํ•ด ๋ณด๋ฉด, ์ด ๋ฌธ์ œ๋Š” ์‹ญ์ค‘ํŒ”๊ตฌ Radix UI ๋ชจ๋‹ฌ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (์ €ํฌ ๋‚ด๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜) Modal ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Radix UI๋Š” ๋ณดํ†ต ๋ชจ๋‹ฌ์ด ์—ด๋ ค ์žˆ๋Š” ๋™์•ˆ ๋’ค์ชฝ ์ฝ˜ํ…์ธ ์™€์˜ ์ธํ„ฐ๋ž™์…˜์„ ๋ง‰์œผ๋ ค๊ณ  body์— pointer-events: none์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ œ Claude๋Š” ๋ชจ๋‹ฌ์ด ์ œ๋Œ€๋กœ ๋‹ซํžˆ์ง€ ์•Š๋Š” ๊ฒŒ ๋ฌธ์ œ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ , useEffect๋ฅผ ์ถ”๊ฐ€ํ•ด isModalOpen์„ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ, ์‚ฌ์šฉ์ž๋Š” 'Change template' ์˜ต์…˜์„ ๊ณจ๋ผ ํ…œํ”Œ๋ฆฟ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ์˜ต์…˜์„ ๋ˆ„๋ฅด๋ฉด ํ…œํ”Œ๋ฆฟ ๋ชฉ๋ก์ด ๋‹ด๊ธด ๋ชจ๋‹ฌ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๋ฉด ๋‹ค์‹œ ์–‘์‹ ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.

 

Claude: TemplateSelectorModal์˜ onSelectHandler ํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด, SaveTemplateModal์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ณ ์นœ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ํŒจํ„ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. catch ๋ธ”๋ก์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ชจ๋‹ฌ์ด ์˜์˜ ๋‹ซํžˆ์ง€ ์•Š๋Š” ๊ฑฐ์ฃ .

 

ํƒ€๋‹นํ•œ ๊ฐ€์ •์ด์ง€๋งŒ, ์ด ์ ‘๊ทผ์—๋Š” ํ•œ ๊ฐ€์ง€ ๊ฑธ๋ฆผ๋Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€์„ค์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์ „์ œ๋ฅผ ๊น”๊ณ  ์žˆ๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ Claude๋Š” ์—ด๋ฆฐ ๋ชจ๋‹ฌ์ด ์žˆ๋Š”์ง€ ์ถ”์ ํ•˜๋Š” console.log๋ฅผ ์ž”๋œฉ ์ถ”๊ฐ€ํ•˜๊ณ , ์ €๋Š” ์—ด๋ฆฐ ๋ชจ๋‹ฌ์ด ์—†๋‹ค๊ณ  ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

 

// Radix ๋‹ค์ด์–ผ๋กœ๊ทธ ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (์ด๋กœ ์ธํ•ด body์— pointer-events: none์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค)
console.log('Dialog overlays:', document.querySelectorAll('[data-radix-dialog-overlay]').length);

// ์—ด๋ ค์žˆ๋Š” ๋ชจ๋‹ฌ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
console.log('Open modals:', document.querySelectorAll('[role="dialog"]').length);

// body ์Šคํƒ€์ผ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
console.log('Body pointer-events:', getComputedStyle(document.body)['pointer-events']);

// aria-hidden=true ์†์„ฑ์„ ๊ฐ€์ง„ ์š”์†Œ ์ค‘์—์„œ ํ™”๋ฉด์„ ๊ฐ€๋ฆด ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ฐพ์•„๋ด…๋‹ˆ๋‹ค
console.log('Hidden overlays:', document.querySelectorAll('[aria-hidden="true"]'));

 

์กฐ์‚ฌ๋ฅผ ์ข€ ๋” ์ง„ํ–‰ํ•œ ๋์—, pointer-events: none์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์— ์ง์ ‘ ์„ค์ •๋˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค(document.body.style.pointerEvents = 'none'). CSS ๊ทœ์น™์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ Claude๋Š” ๊ทธ ์Šคํƒ€์ผ์ด ์–ธ์ œ ์ ์šฉ๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค๊ณ  ์ถ”์ ์šฉ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Object.defineProperty(document.body.style, 'pointerEvents', {
  get: function () {
    return this._pointerEvents || '';
  },
  set: function (value) {
    console.log('Setting pointerEvents to:', value);
    if (value === 'none') {
      console.trace('Stack trace for setting pointer-events: none');
    }
    this._pointerEvents = value;
  }
});
console.log('Trace set up - now trigger the issue');

 

๋„ค ๋ฒˆ์งธ ๊ฐ€์„ค: ๋ชจ๋‹ฌ ์–ธ๋งˆ์šดํŠธ ์ด์Šˆ + Claude์˜ ์ฒซ ์ˆ˜์ •์•ˆ

 

์ถ”์ ๊ธฐ๋Š” ์ƒˆ ํ…œํ”Œ๋ฆฟ์„ ๊ณ ๋ฅด๋ ค๊ณ  ๋ชจ๋‹ฌ์„ ์—ด์—ˆ๋‹ค๊ฐ€ ์–‘์‹์œผ๋กœ ๋Œ์•„์˜ฌ ๋•Œ pointer-events๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐํ˜€๋ƒ…๋‹ˆ๋‹ค.

Claude: ์ข‹์Šต๋‹ˆ๋‹ค! ๋ฌธ์ œ๋Š” TemplateSelectorModal์„ ์—ด ๋•Œ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์–ด์š”. ์‚ฌ์‹ค ์ด๊ฑด ์˜๋„๋œ ๋™์ž‘์ž…๋‹ˆ๋‹ค. Radix UI ๋ชจ๋‹ฌ์€ ๋ชจ๋‹ฌ์ด ์—ด๋ฆด ๋•Œ ๋ฐฐ๊ฒฝ๊ณผ์˜ ์ธํ„ฐ๋ž™์…˜์„ ๋ง‰์œผ๋ ค๊ณ  body์— pointer-events: none์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ง„์งœ ๋ฌธ์ œ๋Š” ๋ชจ๋‹ฌ์ด ๋‹ซํž ๋•Œ ๊ทธ ์Šคํƒ€์ผ์ด ์ œ๊ฑฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ €๋Š”, ๋ชจ๋‹ฌ์—์„œ ํ•ญ๋ชฉ์„ ์„ ํƒํ•˜์ž๋งˆ์ž ํ™”๋ฉด ์ด๋™์ด ์ผ์–ด๋‚œ๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ํ™”๋ฉด ์ด๋™์ด ์ผ์–ด๋‚˜๊ธฐ ์ „์— ๋ชจ๋‹ฌ์ด ์™„์ „ํžˆ ๋‹ซํžˆ๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘ Claude๊ฐ€ ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์•ˆ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ์ˆ˜์ •์•ˆ: Modal.tsx ์•ˆ์—์„œ

 

// ๋ชจ๋‹ฌ์ด ๋‹ซํž ๋•Œ pointer-events๊ฐ€ ๋ฆฌ์…‹๋˜๋„๋ก ๋ณด์žฅ
// ๋ชจ๋‹ฌ์ด ์—ด๋ฆฐ ์ƒํƒœ์—์„œ ํ™”๋ฉด ์ด๋™์ด ์ผ์–ด๋‚˜๋ฉด ๋ชจ๋‹ฌ์ด ์–ธ๋งˆ์šดํŠธ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ ,
// ๊ทธ๋Ÿฌ๋ฉด body์— ๊ฑธ๋ฆฐ pointer-events:none์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์ƒˆ ํŽ˜์ด์ง€์˜ ์ธํ„ฐ๋ž™์…˜์„ ๋ง‰์„ ์ˆ˜ ์žˆ์–ด ์ถ”๊ฐ€ํ•จ. (Switch template ์•ก์…˜ ์‚ฌ๋ก€์ฒ˜๋Ÿผ)
useEffect(() => {
  if (open === false) {
    // ๋ชจ๋‹ฌ์ด ๋ช…์‹œ์ ์œผ๋กœ ๋‹ซํž ๋•Œ pointer-events ๋ฆฌ์…‹
    document.body.style.pointerEvents = '';
  }
}, [open]);

 

๋“œ๋””์–ด ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ์ˆ˜์ •์•ˆ์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ข€ ์ž„์‹œ๋ฐฉํŽธ ๊ฐ™์•„์„œ, Claude์—๊ฒŒ ์ข€ ๋” ๊ผผ๊ผผํ•˜๊ฒŒ ๋”ฐ์ ธ๋ณด๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Claude: Modal ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ์ด ์ปดํฌ๋„ŒํŠธ๋Š” Radix UI์˜ dialog ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ๊ฐ์‹ผ ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Radix UI๊ฐ€ ๋ชจ๋‹ฌ์„ ์—ด ๋•Œ pointer-events: none์„ ์„ค์ •ํ•˜์ง€๋งŒ, ํ™”๋ฉด ์ด๋™์ด ์ผ์–ด๋‚˜๋ฉด ๊ทธ ์ •๋ฆฌ๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

 

ํƒ€๋‹นํ•ด ๋ณด์ด๋Š” ์ง€์ ์ด๋ผ, ํŒ€ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด PR์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋Š” ์‚ฌ์ด ์ ์‹ฌ ์‹œ๊ฐ„์ด ๋˜์–ด ๋…ธํŠธ๋ถ์„ ๋ฎ๊ณ  ์š”๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๋Ÿฌ ๋‚˜์„ฐ์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ ๊ทผ๋ฌด์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜์ฃ . ๋Š˜ ๊ทธ๋žฌ๋“ฏ, ์†์ด ์›€์ง์ด๋Š” ๋™์•ˆ ๋จธ๋ฆฟ์†์€ ์Šฌ๊ทธ๋จธ๋‹ˆ ๋‹ค๋ฅธ ์ƒ๊ฐ์œผ๋กœ ํ˜๋Ÿฌ๊ฐ”๊ณ  ์ด๋Ÿฐ ์˜๋ฌธ์ด ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์™œ ํ•˜ํ•„ ์ง€๊ธˆ์—์„œ์•ผ ๋ฌธ์ œ๊ฐ€ ๋œ ๊ฑธ๊นŒ?

 

์ด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” pointer-events ๋ฌธ์ œ๊ฐ€ ํ•œ ๋ฒˆ๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ œํ’ˆ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ๋„ ๋ชจ๋‹ฌ์€ ์“ฐ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ๊ฒช์€ ์ ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ํ™”๋ฉด ์ด๋™ ๋•Œ๋ฌธ์ผ๊นŒ์š”? ๋งŒ์•ฝ ๊ทธ๊ฒŒ ์‚ฌ์‹ค์ด๋ผ๋ฉด, ์ด๋ ‡๊ฒŒ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ Radix๊ฐ€ ์ง„์ž‘ ์†๋ดค์„ ํ…๋ฐ์š”. ์•„๋ฌด๋ž˜๋„ ์•„์ง ํ•ต์‹ฌ์— ๋‹ฟ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๋А๋‚Œ์ด ๊ฐ€์‹œ์ง€ ์•Š์•„, ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

 

์ €๋Š” ๋ชจ๋‹ฌ์„ ์—ด๊ณ  ๋ฐ”๊นฅ์„ ํด๋ฆญํ•˜๋ฉด ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๋Š”๋ฐ, ๊ทธ ์ˆœ๊ฐ„์—๋„ pointer-events: none ๋ฌธ์ œ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ™”๋ฉด ์ด๋™์ด ๋ฌธ์ œ์˜ ์›์ธ์ด๋ผ๋Š” ๊ฐ€์„ค์„ ๋ฐ˜์ฆํ•ฉ๋‹ˆ๋‹ค.

 

ํ”„๋กฌํ”„ํŠธ: ์ž, ์ด ๋ฌธ์ œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ข€ ๋” ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ๋„ pointer-events๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๊ณ  ์‹ถ์–ด์„œ, ๋ชจ๋‹ฌ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ˆ˜์ •์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•ด ๋ดค์–ด์š”. ๊ทธ๋žฌ๋”๋‹ˆ ๋‹ค๋ฅธ ๋ชจ๋‹ฌ์—์„œ๋„ ๋ชจ๋‹ฌ ํŽ˜์ด์ง€ ๋ฐ”๊นฅ์„ ํด๋ฆญํ•ด์„œ ์—ด๊ณ  ๋‹ซ์„ ๋•Œ ๋˜‘๊ฐ™์€ ๋ฒ„๊ทธ๊ฐ€ ์žฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ์—์„œ์ธ์ง€ ๋ชจ๋‹ฌ์ด ๋‹ซํ˜€๋„, ํ™”๋ฉด ์ด๋™์ด ์—†๋Š”๋ฐ๋„, pointer-events: none์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

Claude: ์ •๋ง ์˜๋ฏธ ์žˆ๋Š” ๋ฐœ๊ฒฌ์ด์—์š”! ์ด๊ฑธ๋กœ ๋ฌธ์ œ๊ฐ€ ํ™”๋ฉด ์ด๋™์—๋งŒ ํ•œ์ •๋œ ๊ฒŒ ์•„๋‹ˆ๋ผ๋Š” ์ ์ด ํ™•์ธ๋์Šต๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋ ˆ์ด ํด๋ฆญ์œผ๋กœ ๋ชจ๋‹ฌ์„ ๋‹ซ์„ ๋•Œ์™€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋‹ซ์„ ๋•Œ, Radix UI ๋ชจ๋‹ฌ์˜ ์ •๋ฆฌ ๋กœ์ง์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋А๋ƒ์™€ ์–ฝํžŒ ๋” ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

์ด ์‹œ์ ์—์„œ Claude๋Š” Radix์˜ ๋ฌธ์ œ๋ผ๊ณ  ํ™•์‹ ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ชจ๋‹ฌ์— ์ทจ์†Œ ๋ฒ„ํŠผ์ด ์žˆ๊ณ , ๊ทธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ์งš์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ ์™œ ํ•˜ํ•„ ์ง€๊ธˆ์—์„œ์•ผ ์ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”์ง€๊ฐ€ ์ด์ƒํ•˜๋‹ค๋Š” ์ ๋„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์งš์—ˆ์Šต๋‹ˆ๋‹ค.

Claude๋Š” Radix UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•ด ๋ฌด์–ธ๊ฐ€ ์›์ธ์ด ๋  ๋งŒํ•œ ๊ฒŒ ์žˆ๋Š”์ง€ ๋ณด์ž๋Š” ๋“ฑ์˜ ๋ช‡ ๊ฐ€์ง€ ์„ ํƒ์ง€๋ฅผ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ

์ด์ฏค ๋˜๋‹ˆ Claude๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋ฐ”๋‹ฅ๋‚ฌ๊ณ , Radix ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์›์ธ์ผ ๊ฑฐ๋ผ๊ณ  ํ™•์‹ ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์˜›๋‚  ๋ฐฉ์‹๋Œ€๋กœ ๊ตฌ๊ธ€๋ง์— ๋‚˜์„ฐ์Šต๋‹ˆ๋‹ค.

 

์ €๋Š” GitHub ์ด์Šˆ ํ•˜๋‚˜๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋Š”๋ฐ, ๊ฑฐ๊ธฐ์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ ‡๊ฒŒ ๋Œ“๊ธ€์„ ๋‹ฌ์•„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋ชจ๋‹ฌ๊ณผ, ๊ทธ๊ฒƒ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐ ์“ฐ์ด๋Š” ๋‹ค๋ฅธ ๋ชจ๋‹ฌ ์ง€์› ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์˜ ์ถฉ๋Œ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์‹ญ์ค‘ํŒ”๊ตฌ ๋“œ๋กญ๋‹ค์šด์ด์ฃ . ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํŠธ๋ฆฌ๊ฑฐ ์ปดํฌ๋„ŒํŠธ์— modal={false}๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์•Œ๊ณ  ๋ณด๋‹ˆ ์ œ ๋ชจ๋‹ฌ์€ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด ์•ˆ์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋˜๊ณ  ์žˆ์—ˆ๊ณ , ๊ทธ ์ถฉ๋Œ ๋•Œ๋ฌธ์— ๋ชจ๋‹ฌ์ด ๋‹ซํ˜”๋Š”๋ฐ๋„ pointer-events: none์ด ์ถ”๊ฐ€๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” Claude๊ฐ€ ๋” ํ•„์š”ํ•˜์ง€ ์•Š์•„, ์ง์ ‘ ์ˆ˜์ •์— ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.

 

์ตœ์ข… ์ˆ˜์ •์•ˆ:

<DropdownMenu
  ariaLabel={ariaLabel}
  items={menu}
  dataTestId={dataTestId}
  modal={modal}
>
...
</DropdownMenu>

 

Claude์™€ ๋””๋ฒ„๊น…ํ•˜๋ฉด์„œ ๋“  ๋А๋‚Œ

์ „๋ฐ˜์ ์œผ๋กœ ๊ฒฝํ—˜์€ ๊ฝค ๊ธ์ •์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ์ง ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋˜ ์‹œ์ ˆ์ด ๋งŽ์ด ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค.

 

๋ช‡ ๋…„ ์ „, ์ƒˆ ํšŒ์‚ฌ์— ํ•ฉ๋ฅ˜ํ–ˆ์„ ๋•Œ ์ €๋Š” ์ฒซ ํ•œ ๋‹ฌ์„ ๋˜ ๋‹ค๋ฅธ ์‹ ๊ทœ ์ž…์‚ฌ์ž์™€ ์ง ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ตํ˜”์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์ด ์ •๋ง ์ฆ๊ฑฐ์› ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์›€์ด ์ปธ์„ ๋ฟ ์•„๋‹ˆ๋ผ, ํ˜‘์—…ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์•„์ด๋””์–ด๋ฅผ ์‹œ๋„ํ•ด ๋ณด๊ณ , ์‚ฌ์‹ค์ƒ ๊นœ๊นœํ•œ ์–ด๋‘  ์†์„ ๋”๋“ฌ์–ด ๊ฐ€๋ฉฐ ๋ฌด์–ธ๊ฐ€๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ๋ณด๋žŒ์ฐผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ Claude์™€ ์ผํ•˜๋Š” ๊ฑด ๊ทธ๋•Œ์ฒ˜๋Ÿผ ์„œ๋กœ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ๊ธธ์„ ์ฐพ์•„๊ฐ€๋Š” ๋А๋‚Œ๊ณผ ๋ฌด์ฒ™ ๋น„์Šทํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฌผ๋ก  ๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Claude๋Š” ๋‹น์‹ ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์— ๊ทธ๋‹ค์ง€ ์ด์˜๋ฅผ ์ œ๊ธฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฆฌ๋Š” ์žˆ์Šต๋‹ˆ๋‹ค. Claude๋Š” ์‹คํ–‰์ž๋‹ˆ๊นŒ์š”. ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฃผ๋ฉด ๊ทธ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ ์ƒ๋Œ€๋กœ๋Š” ํ›Œ๋ฅญํ•˜์ง€๋งŒ, ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค ์ฃผ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

 

๋˜ ์ž๊ธฐ ์•„์ด๋””์–ด์— ์ข€ ๊ฐ‡ํžˆ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ์ˆœ๊ฐ„ Radix๊ฐ€ ๋ฌธ์ œ๋ผ๊ณ  ํ™•์‹ ํ•˜๋”๋‹ˆ, ๊ฑฐ๊ธฐ๋กœ ์ž๊พธ ํšŒ๊ท€ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๊ณผ ํ•จ๊ป˜๋ผ๋ฉด ๋ณดํ†ต ์•„์ด๋””์–ด๊ฐ€ ์ง„ํ™”ํ•˜๋Š” ๋™์•ˆ ๋” ํ™œ๋ฐœํ•˜๊ฒŒ ์˜๊ฒฌ์ด ์˜ค๊ฐ‘๋‹ˆ๋‹ค.

 

๊ฒฐ๊ตญ Claude๋Š” ๋„๊ตฌ์ด๊ณ , ์ง„์งœ ์งˆ๋ฌธ์€ ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ์“ธ ๊ฒƒ์ด๋ƒ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

 

๊ฑฐ๊ธฐ์„œ ๋˜ ํ•˜๋‚˜์˜ ์ƒ๊ฐ์ด ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ œ๊ฐ€ ์ดˆ๋ฐ˜์— ์กฐ๊ธˆ๋งŒ ๋” ์กฐ์‚ฌํ•ด ๋‘์—ˆ๋‹ค๋ฉด, ๋” ๋นจ๋ฆฌ ๊ทผ๋ณธ ์›์ธ์— ๋‹ฟ์•˜์„๊นŒ์š”? ์šฐ๋ฆฌ๋Š” ์ดˆ๋ฐ˜๋ถ€์— ์–‘์‹์— ์‹œ๊ฐ„์„ ๋„ˆ๋ฌด ๋“ค์˜€์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์–ผ์–ด๋ถ™์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋” ๋นจ๋ฆฌ ์•Œ์•„์ฑ˜๋‹ค๋ฉด, ์ œ ํ”„๋กฌํ”„ํŠธ๋Š” ๋” ์ •ํ™•ํ–ˆ์„ ๊ฒƒ์ด๊ณ , ๊ทธ๋งŒํผ ์†๋„๋„ ๋นจ๋ž์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. Claude๊ฐ€ ๋‚ด๋†“๋Š” ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์€ ๊ฒฐ๊ตญ ์ž…๋ ฅ์˜ ํ’ˆ์งˆ์— ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ์—๋„ ์ €๋Š” ์ด ๊ฒฝํ—˜์ด ์ง„์‹ฌ์œผ๋กœ ์œ ์šฉํ–ˆ๋‹ค๊ณ  ๋А๋‚๋‹ˆ๋‹ค. ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ ํŒŒํŠธ๋„ˆ๋กœ์„œ ์‹ค์ œ๋กœ ๊ฐ€์น˜๋ฅผ ๋”ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋ฃจ ์ข…์ผ ๋””๋ฒ„๊น…ํ–ˆ์„ ๋ฒ•ํ•œ ์ผ์ด ์ด๋ฅธ ์˜คํ›„์— ๋งˆ๋ฌด๋ฆฌ๋์Šต๋‹ˆ๋‹ค. ํ˜„์‹ค์ ์œผ๋กœ ๋”ฐ์ง€๋ฉด ์•ฝ 4์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ด ์ค€ ์…ˆ์ž…๋‹ˆ๋‹ค.

 

์žฅ๋‹จ์ 

TL: DR์ด ํ•„์š”ํ•œ ๋ถ„๋“ค์„ ์œ„ํ•ด, ์ œ๊ฐ€ ๋ฉ”๋ชจํ•ด ๋‘” ์žฅ๋‹จ์ ์„ ์ •๋ฆฌํ•ด ๋‘ก๋‹ˆ๋‹ค.

 

Claude๊ฐ€ ์ž˜ํ–ˆ๋˜ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋ฌธ์ž์—ด ํŒจํ„ด์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐ ์ง“๊ธฐ.
  • ๋””๋ฒ„๊น… ํŠธ๋ฆญ ์ œ์•ˆํ•˜๊ธฐ. (ํŠธ๋ž˜์ปค ๊ธฐ๋ฒ•์€ ์นญ์ฐฌํ•  ๋งŒํ–ˆ๋Š”๋ฐ, Claude ๋•๋ถ„์— ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.)
  • ๋น ๋ฅด๊ฒŒ ๋Œ€์•ˆ ๊ฐ€์„ค ๋‚ด๋†“๊ธฐ.

 

Claude๊ฐ€ ์–ด๋ ค์›Œํ–ˆ๋˜ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ปจํ…์ŠคํŠธ: ์ข์€ ์ปจํ…์ŠคํŠธ์—์„œ ์ถœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ๊ณณ๋„ ์‚ดํŽด๋ณด๋ผ๊ณ  ๋‹ค๊ทธ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์‹ ๊ฐ: ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ํ‹€๋ฆฐ ์ž์‹ ๋งŒ๋งŒํ•œ ์„ค๋ช…์„ ๋‚ด๋†“๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋กœ๋”ฉ ์Šคํฌ๋ฆฐ ๊ฐ€์„ค์ฒ˜๋Ÿผ์š”.
  • ๊ทผ๋ณธ ์›์ธ: ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ๋งŒ ๊ด€์‹ฌ์ด ์žˆ์–ด์„œ, ๊ทธ๊ฒŒ ์ž„์‹œ ์ฒ˜๋ฐฉ์ด๋ผ๋„ ์ผ๋‹จ ํ•ด๊ฒฐํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ์ง€์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋งˆ์น˜๋ฉฐ

๊ฒฐ๋ก ์ ์œผ๋กœ, ์ €๋Š” ๋””๋ฒ„๊น…์— Claude๋ฅผ ๋‹ค์‹œ ์“ธ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ข€ ๋” ์˜์‹์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์“ฐ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ดˆ๊ธฐ ์กฐ์‚ฌ๋ฅผ ์–ด๋А ์ •๋„ ๋งˆ์น˜๊ณ  ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๋ฅผ ๊ฐ–์ถ˜ ๋’ค์— ํ•จ๊ป˜ ์ผํ•  ๋•Œ, Claude๊ฐ€ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค. ๊ทธ ์ง€์ ๋ถ€ํ„ฐ Claude๋Š” ๊ฐ€์น˜ ์žˆ๋Š” ์•„์ด๋””์–ด ๊ณต๊ธ‰์›์ด ๋˜๋ฉฐ, ์ œ๊ฐ€ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ•œ ์‹œ๊ฐ์„ ๋”ํ•ด ์ค๋‹ˆ๋‹ค.

 

ํŠนํžˆ UI ๋ฒ„๊ทธ์—์„œ๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. UI ๋ฒ„๊ทธ๋Š” ๊ฐ€์ • ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๋Œ€ํ™”๋ฅผ ์—‰๋šฑํ•œ ๊ณณ์œผ๋กœ ๋ฐ€๊ณ  ๊ฐ€๊ธฐ ์‹ญ์ƒ์ด๊ฑฐ๋“ ์š”. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๊ณ  ์žˆ๋Š”์ง€ ๋‹จ๋‹จํžˆ ์žก์•„ ๋‘๋ฉด ๋…ผ์˜๋ฅผ ์ด๋Œ์–ด ๊ฐ€๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์•ž์—์„œ๋„ ๋ง์”€๋“œ๋ ธ๋“ฏ, Claude์˜ ์‘๋‹ต ํ’ˆ์งˆ์€ ํ”„๋กฌํ”„ํŠธ์˜ ํ’ˆ์งˆ์— ์ง์ ‘ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ๋ช…ํ™•ํ•˜๊ณ  ์ •ํ™•ํ• ์ˆ˜๋ก, ์ถœ๋ ฅ ๋˜ํ•œ ๋” ์œ ์šฉํ•˜๊ณ  ์ ์ ˆํ•ด์ง‘๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•

๐Ÿ’ฌ ๋Œ“๊ธ€