Search

uuid

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์€ ์•„๋‹™๋‹ˆ๋‹ค