๋ณต์กํ ์ปดํฌ๋ํธ ํธ๋ฆฌ์์ ์์ ์ ์ด๊ณ ์์ธก ๊ฐ๋ฅํ ID ์์ฑ์ ์ํ React์ experimental_useOpaqueIdentifier ํ ์ ์ดํด๋ณด์ธ์. ์ด์ , ์ฌ์ฉ ์ฌ๋ก, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์์๋ณด์ธ์.
React experimental_useOpaqueIdentifier ์์ ์ฑ: ID ๊ด๋ฆฌ ์ฌ์ธต ๋ถ์
๋์์์ด ์งํํ๋ React ๊ฐ๋ฐ ํ๊ฒฝ์์ ์์ ์ ์ด๊ณ ์์ธก ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ๋์์ ์ ์งํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์์ ์ฑ์ด ํนํ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ์์ญ ์ค ํ๋๋ ID ์์ฑ์ผ๋ก, ๋ณต์กํ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ์ ๋์ ๋ ๋๋ง์ ๋ค๋ฃฐ ๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. React์ experimental_useOpaqueIdentifier ํ
์ ์ปดํฌ๋ํธ ๋ด์์ ๊ณ ์ ํ๊ณ ์์ ์ ์ด๋ฉฐ ๋ถํฌ๋ช
ํ ์๋ณ์๋ฅผ ์์ฑํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ
์ ์ ์ํฉ๋๋ค.
experimental_useOpaqueIdentifier๋ ๋ฌด์์ธ๊ฐ?
experimental_useOpaqueIdentifier๋ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ฅผ ์ํ ๊ณ ์ ํ๊ณ ๋ถํฌ๋ช
ํ ์๋ณ์๋ฅผ ์์ฑํ๋๋ก ์ค๊ณ๋ React ํ
์
๋๋ค. ์ฌ๊ธฐ์ '๋ถํฌ๋ช
(Opaque)'ํ๋ค๋ ๊ฒ์ ์๋ณ์์ ์ ํํ ๊ฐ์ด ์ค์ํ์ง ์์ผ๋ฉฐ ํน์ ์๋ฏธ๋ ํ์์ ์์กดํด์๋ ์ ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ํ
์ ์ฃผ์ ๋ชฉ์ ์ ์ปดํฌ๋ํธ์ props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ๋ ๋๋ง ์ ๋ฐ์ ๊ฑธ์ณ ์ง์๋๋ ์์ ์ ์ธ ์๋ณ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค.
์ด ํ ์ ํ์ฌ ์คํ์ (experimental)์ผ๋ก ํ์๋์ด ์์ด, ํฅํ React ๋ฆด๋ฆฌ์ค์์ API์ ๋์์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ React๊ฐ ID ๊ด๋ฆฌ ๋ฌธ์ , ํนํ ์ ๊ทผ์ฑ ๋ฐ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง๊ณผ ๊ด๋ จ๋ ์๋๋ฆฌ์ค์์ ์ด๋ป๊ฒ ๋์ฒํ๊ณ ์๋์ง์ ๋ํ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์์ ์ ์ธ ID ๊ด๋ฆฌ๊ฐ ์ ์ค์ํ๊ฐ?
์์ ์ ์ธ ID ๊ด๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ๋งค์ฐ ์ค์ํฉ๋๋ค:
- ์ ๊ทผ์ฑ (ARIA ์์ฑ): ์ ๊ทผ์ฑ ์๋ UI๋ฅผ ๊ตฌ์ถํ ๋, ์ปดํฌ๋ํธ๋ค์ ์ข
์ข
aria-labelledby๋aria-describedby์ ๊ฐ์ ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ์๋ก ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์์ฑ๋ค์ UI๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ ์์๋ค ๊ฐ์ ์ฌ๋ฐ๋ฅธ ๊ด๊ณ๋ฅผ ์ ์งํ๊ธฐ ์ํด ์์ ์ ์ธ ID์ ์์กดํฉ๋๋ค. ์์ ์ ์ธ ID ์์ด๋ ์ ๊ทผ์ฑ ๊ธฐ๋ฅ์ด ๊นจ์ ธ ์ฅ์ ๊ฐ ์๋ ์ฌ๋๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ธ๊ณ์ ์ผ๋ก ๋ณต์กํ ๊ฐ๋ ์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ปค์คํ ํดํ ์ปดํฌ๋ํธ๋ ๋์ ์์์ ์ํด ์ฐธ์กฐ๋๊ธฐ ์ํด ์์ ์ ์ธ ID๊ฐ ํ์ํฉ๋๋ค. ์๋์ด(์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ)๋ ์ผ๋ณธ์ด(์ธ๋ก ํ ์คํธ)์ ๊ฐ์ ์ธ์ด๋ก ํดํ์ ๋ ๋๋งํ ๋์ ๋ณต์ก์ฑ์ ๊ณ ๋ คํ๋ฉด, ์ผ๊ด๋๊ฒ ์์ ์ ์ธ ID์ ํ์์ฑ์ ๋์ฑ ๋ถ๋ช ํด์ง๋๋ค. - ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง (SSR) ๋ฐ ํ์ด๋๋ ์ด์ : SSR์์๋ ์ปดํฌ๋ํธ๊ฐ ์๋ฒ์์ ๋ ๋๋ง๋ ํ ํด๋ผ์ด์ธํธ์์ ํ์ด๋๋ ์ด์ ๋ฉ๋๋ค. ๋ง์ฝ ์๋ฒ์์ ์์ฑ๋ ID๊ฐ ํด๋ผ์ด์ธํธ์์ ์์ฑ๋ ID์ ๋ค๋ฅด๋ฉด ํ์ด๋๋ ์ด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์๊ธฐ์น ์์ ๋์์ด๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ์์ ์ ์ธ ID๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์ด ์ผ์นํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํด ๋ณด์ธ์. ๋ง์ฝ ํ์ด๋๋ ์ด์ ์ค์ ์ ํ ์์์ ๋ํ ์๋ฒ ์ธก ID์ ํด๋ผ์ด์ธํธ ์ธก ID๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด, ์ฌ์ฉ์๋ ์๋ชป๋ ์ ํ ์ ๋ณด๋ฅผ ๋ณด๊ฑฐ๋ ๊ธฐ๋ฅ ์ฅ์ ๋ฅผ ๊ฒฝํํ ์ ์์ต๋๋ค.
- ์ปดํฌ๋ํธ ์ํ ๋ณด์กด: ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ์ ์ ์ฒด์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ํ๋ฅผ ๋ณด์กดํด์ผ ํ ์๋ ์์ต๋๋ค. ์์ ์ ์ธ ID๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ํค๋ก ์ฌ์ฉ๋์ด ๋ ๋๋ง ๊ฐ์ ์ํ๋ฅผ ์ถ์ ํ๊ณ ๋ณต์ํ ์ ์์ต๋๋ค.
- ํ ์คํ : ์์ ์ ์ธ ID๋ UI ํ ์คํ ์ ํจ์ฌ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ํ ์คํฐ๋ ์์ธก ๊ฐ๋ฅํ ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์๋ฅผ ํ๊ฒํ ํ ์ ์์ผ๋ฏ๋ก ๋ ์ ๋ขฐ์ฑ ์๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ํ ์คํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ค์ํ ๋ก์ผ์ผ์์ ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ๋ ๊ตญ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์, ์์ ์ ์ธ ID๋ ์ธ์ด ๋ณํ์ ๊ด๊ณ์์ด ํ ์คํธ๊ฐ ์ผ๊ด๋๊ฒ ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
experimental_useOpaqueIdentifier ์ฌ์ฉ ๋ฐฉ๋ฒ
experimental_useOpaqueIdentifier ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. ๋ค์์ ๊ธฐ๋ณธ์ ์ธ ์์ ์
๋๋ค:
import { experimental_useOpaqueIdentifier as useOpaqueIdentifier } from 'react';
function MyComponent() {
const id = useOpaqueIdentifier();
return (
<div id={id}>
This is my component.
</div>
);
}
export default MyComponent;
์ด ์์ ์์ useOpaqueIdentifier()๋ MyComponent์ ๋ฆฌ๋ ๋๋ง ์ ๋ฐ์ ๊ฑธ์ณ ์์ ์ ์ธ ๊ณ ์ ID๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ID๋ <div> ์์์ id ์์ฑ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ์์
experimental_useOpaqueIdentifier๊ฐ ํนํ ์ ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
1. ์ ๊ทผ์ฑ: ์ ๊ทผ์ฑ ์๋ ํดํ ๋ง๋ค๊ธฐ
์ ๊ทผ์ฑ ์๋ ํดํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ด
์๋ค. ํดํ์ aria-describedby๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ช
ํ๋ ์์์ ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค. ๋ค์์ experimental_useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์
๋๋ค:
import { experimental_useOpaqueIdentifier as useOpaqueIdentifier } from 'react';
function Tooltip({
content,
children
}) {
const id = useOpaqueIdentifier();
return (
<>
<span aria-describedby={id}>
{children}
</span>
<div id={id} role="tooltip" style={{ display: 'none' }}>
{content}
</div>
<>
);
}
function MyComponent() {
return (
<Tooltip content="This is the tooltip content.">
Hover over me to see the tooltip.
</Tooltip>
);
}
export default MyComponent;
์ด ์์ ์์ Tooltip ์ปดํฌ๋ํธ๋ useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ID๋ฅผ ์์ฑํฉ๋๋ค. ์ด ID๋ ๋์ ์์์ aria-describedby ์์ฑ๊ณผ ํดํ ์์ฒด์ id ์์ฑ ๋ชจ๋์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋๋ผ๋ ํดํ์ด ๋์ ์์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
2. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง (SSR)๊ณผ Next.js
Next.js์ ๊ฐ์ SSR ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋, ์๋ฒ์์ ์์ฑ๋ ID๊ฐ ํด๋ผ์ด์ธํธ์์ ์์ฑ๋ ID์ ์ผ์นํ๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. experimental_useOpaqueIdentifier๋ ์ด๋ฌํ ์๋๋ฆฌ์ค์์ ํ์ด๋๋ ์ด์
์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ํ
์์ฒด๊ฐ ์ง์ ์ ์ผ๋ก SSR์ ์ฒ๋ฆฌํ์ง๋ ์์ง๋ง, ์์ ์ ์ธ ID ์์ฑ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
// pages/index.js
import { experimental_useOpaqueIdentifier as useOpaqueIdentifier } from 'react';
function MyComponent() {
const id = useOpaqueIdentifier();
return (
<div id={id}>
This component is rendered on the server and hydrated on the client.
</div>
);
}
export default MyComponent;
์ด ๋จ์ํ๋ Next.js ์์ ์์ MyComponent๋ useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ธ ID๋ฅผ ์์ฑํฉ๋๋ค. ID๊ฐ ์์ ์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์์ ๋์ผํ๊ฒ ์ ์ง๋์ด ํ์ด๋๋ ์ด์
๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๋ ํฌ๊ณ ๊ตญ์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ, ์ด๋ฌํ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ์ฌ์ฉ์์ ์์น๋ ๋คํธ์ํฌ ์ํ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ํํ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
3. ๋์ ์ปดํฌ๋ํธ ๋ชฉ๋ก
์ปดํฌ๋ํธ์ ๋์ ๋ชฉ๋ก์ ๋ ๋๋งํ ๋, ๋ชฉ๋ก์ ๊ฐ ํญ๋ชฉ์ ๊ณ ์ ํ ID๋ฅผ ํ ๋นํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. experimental_useOpaqueIdentifier๋ ๋ชฉ๋ก์ ๊ฐ ์ปดํฌ๋ํธ ๋ด์์ ์ด๋ฌํ ID๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
import { experimental_useOpaqueIdentifier as useOpaqueIdentifier } from 'react';
function ListItem({
item
}) {
const id = useOpaqueIdentifier();
return (
<li id={id}>
{item.name}
</li>
);
}
function MyListComponent({
items
}) {
return (
<ul>
{items.map(item => (
<ListItem key={item.id} item={item} />
))}
</ul>
);
}
export default MyListComponent;
์ด ์์ ์์ ๊ฐ ListItem ์ปดํฌ๋ํธ๋ useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ID๋ฅผ ์์ฑํฉ๋๋ค. ์ด ID๋ ์คํ์ผ๋ง, ์ ๊ทผ์ฑ ๋๋ ๊ฐ ๋ชฉ๋ก ํญ๋ชฉ์ ๊ณ ์ ํ ์๋ณ์๊ฐ ํ์ํ ๋ค๋ฅธ ๋ชจ๋ ๋ชฉ์ ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. React์ ๋ด๋ถ ์ฌ์กฐ์ (reconciliation)์ ์ํ ๋ณ๋์ `key` prop ์ฌ์ฉ์ ์ ์ํ์ธ์. ์ด๋ `useOpaqueIdentifier`์ ์ํด ์์ฑ๋ ID์๋ *๋ค๋ฆ
๋๋ค*. `key` prop์ React๊ฐ DOM์ ํจ์จ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐ๋ฉด, ID๋ ์ ํ๋ฆฌ์ผ์ด์
๋ณ ๋ชฉ์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ณ ๋ ค์ฌํญ
experimental_useOpaqueIdentifier๋ ID ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ํด๊ฒฐ์ฑ
์ ์ ๊ณตํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ID๋ฅผ ๋ถํฌ๋ช
ํ๊ฒ ์ทจ๊ธํ์ธ์:
useOpaqueIdentifier์ ์ํด ์์ฑ๋ ID์ ํน์ ํ์์ด๋ ๊ฐ์ ์์กดํ์ง ๋ง์ธ์. ์ด๋ฅผ ๋ถํฌ๋ช ํ ๋ฌธ์์ด๋ก ์ทจ๊ธํ๊ณ ์๋๋ ๋ชฉ์ (์: ARIA ์์ฑ์ ํตํด ์์ ์ฐ๊ฒฐ)์๋ง ์ฌ์ฉํ์ธ์. - ์คํ์ API ์ฌ์ฉ ์ ์ฃผ์ํ์ธ์:
experimental_useOpaqueIdentifier๋ ์คํ์ ์ผ๋ก ํ์๋์ด ์์์ ์ธ์งํ์ธ์. API์ ๋์์ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ ์คํ๊ฒ ์ฌ์ฉํ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ ์ค๋น๋ฅผ ํ์ธ์. - ๋จ์ฉํ์ง ๋ง์ธ์: ์์ ์ ์ด๊ณ ๊ณ ์ ํ ID๊ฐ ์ง์ ์ผ๋ก ํ์ํ ๋๋ง
experimental_useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ์ธ์. ๋ถํ์ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฏ๋ก ํผํ์ธ์. - Key Props ๋ ID: React ๋ชฉ๋ก์ `key` prop์
experimental_useOpaqueIdentifier์ ์ํด ์์ฑ๋ ID์ ๋ค๋ฅธ ๋ชฉ์ ์ ์ํํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์. `key` prop์ React๊ฐ ๋ด๋ถ ์ฌ์กฐ์ ์ ์ํด ์ฌ์ฉํ๋ ๋ฐ๋ฉด, ID๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ณ ๋ชฉ์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ฝ์ ์ฌ์ฉ์๊ฐ ํ์ง ์ธ์ด๋ก ์ ํ์ ์ํ๋ฒณ์์ผ๋ก ๋ณด๊ธฐ๋ฅผ ์ ํธํ๋ ๊ฒฝ์ฐ, React `key` prop์ DOM ์ ๋ฐ์ดํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด, ์์ ์ ์ธ ID๋ ์ ํ ๋น๊ต์ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ฐ๊ด์ฑ์ ์ ์งํฉ๋๋ค. - ๋์์ ๊ณ ๋ คํ์ธ์:
experimental_useOpaqueIdentifier๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ฐ๋จํ ์นด์ดํฐ๋ UUID ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ID๋ฅผ ์์ฑํ๋ ๋ฑ ๋ ๊ฐ๋จํ ๋์์ผ๋ก ์ถฉ๋ถํ ์ง ๊ณ ๋ คํด ๋ณด์ธ์. ์๋ฅผ ๋ค์ด, SSR์ด๋ ์ ๊ทผ์ฑ์ ๋ํด ๊ฑฑ์ ํ์ง ์๋๋ค๋ฉด ๊ฐ๋จํ ์นด์ดํฐ๋ก๋ ์ถฉ๋ถํ ์ ์์ต๋๋ค.
experimental_useOpaqueIdentifier์ ๋์
experimental_useOpaqueIdentifier๊ฐ ์์ ์ ์ธ ID๋ฅผ ์์ฑํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ๋ช ๊ฐ์ง ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ์กด์ฌํฉ๋๋ค:
- UUID ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
uuid์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฒ์ฉ ๊ณ ์ ์๋ณ์(UUID)๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ID๋ ๊ณ ์ ํจ์ด ๋ณด์ฅ๋์ง๋ง,experimental_useOpaqueIdentifier์ ์ํด ์์ฑ๋ ID๋ณด๋ค ๊ธธ๊ณ ํจ์จ์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค. ํ์ง๋ง ๋๋ฆฌ ์ง์๋๋ฉฐ React ์ปดํฌ๋ํธ ์ธ๋ถ์์ ID๋ฅผ ์์ฑํด์ผ ํ๋ ์๋๋ฆฌ์ค์์ ์ ์ฉํ ์ ์์ต๋๋ค. - ๋จ์ ์นด์ดํฐ: ์ปดํฌ๋ํธ ๋ด์์์ ๊ณ ์ ์ฑ๋ง์ผ๋ก ์ถฉ๋ถํ ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ๋จ์ ์นด์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ID๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ์ ๊ทผ ๋ฐฉ์์ SSR์ด๋ ๋ฆฌ๋ ๋๋ง ๊ฐ์ ID๊ฐ ์์ ์ ์ด์ด์ผ ํ๋ ์๋๋ฆฌ์ค์๋ ์ ํฉํ์ง ์์ต๋๋ค.
- ์ปจํ ์คํธ ๊ธฐ๋ฐ ID ์์ฑ: ID ์์ฑ์ ๊ด๋ฆฌํ๊ณ ์๋น์์๊ฒ ๊ณ ์ ํ ID๋ฅผ ์ ๊ณตํ๋ ์ปจํ ์คํธ ์ ๊ณต์(context provider)๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ID ๊ด๋ฆฌ๋ฅผ ์ค์ ์ง์คํํ๊ณ props๋ฅผ ํตํด ID๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ํผํ ์ ์์ต๋๋ค.
React์ ID ๊ด๋ฆฌ์ ๋ฏธ๋
experimental_useOpaqueIdentifier์ ๋์
์ React๊ฐ ์์ ์ ์ธ ID ๊ด๋ฆฌ์ ์ค์์ฑ์ ์ธ์ํ๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค. ์ด ํ
์ ์์ง ์คํ์ ์ด์ง๋ง, React๊ฐ ๋ฏธ๋์ ์ด ๊ณผ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง์ ๋ํ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ํฅํ React ๋ฆด๋ฆฌ์ค์์๋ ID ์์ฑ์ ์ํ ๋ ๊ฐ๋ ฅํ๊ณ ์์ ์ ์ธ API๋ฅผ ๋ณด๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ ์ธ๊ณ React ์ปค๋ฎค๋ํฐ๋ ID, ์ ๊ทผ์ฑ ๋ฐ SSR์ ๋ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๊ทน์ ์ผ๋ก ํ์ํ๊ณ ๋
ผ์ํ๊ณ ์์ผ๋ฉฐ, ์ด๋ ๊ฒฌ๊ณ ํ๊ณ ์ ๊ทผ์ฑ ์๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๋ ๋ฏธ๋์ ๊ธฐ์ฌํ๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
experimental_useOpaqueIdentifier๋ React ์ปดํฌ๋ํธ์์ ์์ ์ ์ธ ID๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ท์คํ ๋๊ตฌ์
๋๋ค. ์ด๋ ๊ณ ์ ํ ์๋ณ์๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ๋จ์ํํ๊ณ , ํนํ ์ ๊ทผ์ฑ ๋ฐ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง๊ณผ ๊ด๋ จ๋ ์๋๋ฆฌ์ค์์ ๋ ๋๋ง ๊ฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์คํ์ ์ธ ์ฑ๊ฒฉ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํ์ง๋ง, experimental_useOpaqueIdentifier๋ React์ ID ๊ด๋ฆฌ์ ๋ฏธ๋๋ฅผ ์ฟ๋ณผ ์ ์๊ฒ ํ๋ฉฐ ๋ง์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์ค์ฉ์ ์ธ ํด๊ฒฐ์ฑ
์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ์ด์ , ํ๊ณ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ experimental_useOpaqueIdentifier๋ฅผ ํ์ฉํ์ฌ ๋ ๊ฒฌ๊ณ ํ๊ณ ์ ๊ทผ์ฑ ์์ผ๋ฉฐ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. React์ ๋ฐ์ ์ ์ฃผ์ํ๊ณ ์๋กญ๊ณ ๊ฐ์ ๋ API๊ฐ ์ ๊ณต๋ ๋ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ค๋น๋ฅผ ํ์ญ์์ค.