React์์ UUID ๋ฐ Nanoid ์ฌ์ฉ ์์
1. ํจํค์ง ์ค์น
npm install uuid
Bash
๋ณต์ฌ
npm install nanoid
Bash
๋ณต์ฌ
2. UUID ์ฌ์ฉ ์์ (React)
// UUID ๊ฐ์ ธ์ค๊ธฐ
import { v4 as uuidv4 } from 'uuid';
import { useState } from 'react';
function UserList() {
const [users, setUsers] = useState([]);
const addUser = (name) => {
const newUser = {
id: uuidv4(),
name: name,
createdAt: new Date()
};
setUsers([...users, newUser]);
};
return (
<div>
<button onClick={() => addUser('Alice')}>Add User</button>
<ul>
{users.map(user => (
<li key={user.id}>
{user.name} (ID: {user.id})
</li>
))}
</ul>
</div>
);
}
JavaScript
๋ณต์ฌ
3. Nanoid ์ฌ์ฉ ์์ (React)
// Nanoid ๊ฐ์ ธ์ค๊ธฐ
import { nanoid } from 'nanoid';
import { useState } from 'react';
function PostList() {
const [posts, setPosts] = useState([]);
const addPost = (title) => {
const newPost = {
id: nanoid(),
title: title,
createdAt: new Date()
};
setPosts([...posts, newPost]);
};
return (
<div>
<button onClick={() => addPost('New Post')}>Add Post</button>
<ul>
{posts.map(post => (
<li key={post.id}>
{post.title} (ID: {post.id})
</li>
))}
</ul>
</div>
);
}
JavaScript
๋ณต์ฌ
4. UUID vs Nanoid ๋น๊ต
ํน์ฑ | UUID | Nanoid |
๊ธธ์ด | 36์ (ํ์ดํ ํฌํจ) | 21์ (๊ธฐ๋ณธ๊ฐ, ์กฐ์ ๊ฐ๋ฅ) |
์ฑ๋ฅ | ๋น ๋ฆ | ๋ ๋น ๋ฆ (60% ๋ ๋น ๋ฆ) |
ํฌ๊ธฐ | ๋ ํผ | ๋ ์์ |
URL ์นํ์ฑ | ๋ณดํต | ์ฐ์ |
์ฌ์ฉ ์ฌ๋ก | ๋ฐ์ดํฐ๋ฒ ์ด์ค ํค, ๋ฒ์ฉ | ์งง์ ID, URL, ํ ํฐ |
5. ์ค์ ์ฌ์ฉ ์์ (React + Form)
import { useState } from 'react';
import { v4 as uuidv4 } from 'uuid';
import { nanoid } from 'nanoid';
function App() {
const [users, setUsers] = useState([]);
const [sessions, setSessions] = useState([]);
const [userName, setUserName] = useState('');
// UUID๋ฅผ ์ฌ์ฉํ ์ฌ์ฉ์ ์์ฑ
const createUser = (e) => {
e.preventDefault();
const newUser = {
id: uuidv4(),
name: userName,
email: `${userName.toLowerCase()}@example.com`
};
setUsers([...users, newUser]);
setUserName('');
};
// Nanoid๋ฅผ ์ฌ์ฉํ ์ธ์
์์ฑ
const createSession = (userId) => {
const newSession = {
id: nanoid(),
userId: userId,
createdAt: new Date().toISOString()
};
setSessions([...sessions, newSession]);
};
return (
<div>
<h1>์ฌ์ฉ์ ๊ด๋ฆฌ</h1>
<form onSubmit={createUser}>
<input
type="text"
value={userName}
onChange={(e) => setUserName(e.target.value)}
placeholder="์ฌ์ฉ์ ์ด๋ฆ"
/>
<button type="submit">์ฌ์ฉ์ ์ถ๊ฐ</button>
</form>
<h2>์ฌ์ฉ์ ๋ชฉ๋ก</h2>
<ul>
{users.map(user => (
<li key={user.id}>
{user.name} ({user.email})
<button onClick={() => createSession(user.id)}>
์ธ์
์์ฑ
</button>
</li>
))}
</ul>
<h2>์ธ์
๋ชฉ๋ก</h2>
<ul>
{sessions.map(session => (
<li key={session.id}>
์ธ์
ID: {session.id} | ์ฌ์ฉ์ ID: {session.userId}
</li>
))}
</ul>
</div>
);
}
export default App;
JavaScript
๋ณต์ฌ
6. ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
โข
UUID ์ฌ์ฉ์ด ์ ํฉํ ๊ฒฝ์ฐ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ ํค, ๋ถ์ฐ ์์คํ
์์์ ๊ณ ์ ์๋ณ์, ํ์ค ์ค์๊ฐ ํ์ํ ๊ฒฝ์ฐ
โข
Nanoid ์ฌ์ฉ์ด ์ ํฉํ ๊ฒฝ์ฐ: URL ๋จ์ถ, ๊ณต๊ฐ API ํ ํฐ, ํ์ผ๋ช
์์ฑ, ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ
7. ์ฃผ์์ฌํญ
โข
์๋ฒ ์ฌ์ด๋ ID ์์ฑ ๊ถ์ฅ: ๋ณด์์ด ์ค์ํ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ณด๋ค ์๋ฒ์์ ID๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค
โข
ํค prop ์ฌ์ฉ: React์์ ๋ฆฌ์คํธ ๋ ๋๋ง ์ key prop์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ์ ํฉํฉ๋๋ค
โข
์ถฉ๋ ๊ฐ๋ฅ์ฑ: UUID์ Nanoid ๋ชจ๋ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๊ทนํ ๋ฎ์ง๋ง, ์์ ํ 0์ ์๋๋๋ค



