๐ŸŽต ์ธ๋”” ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ - ์žฅ๋ฅด๋ณ„ ํ๋ ˆ์ด์…˜ & ์ข‹์•„์š” - ๋ฐ”์ด๋ธŒ์ฝ”๋”ฉ ๋ ˆ์‹œํ”ผ
์ž…๋ฌธ PHP + JavaScript Laravel + React AI: Claude

๐ŸŽต ์ธ๋”” ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ - ์žฅ๋ฅด๋ณ„ ํ๋ ˆ์ด์…˜ & ์ข‹์•„์š”

๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ช… indie-music-playlist-curator
์กฐํšŒ์ˆ˜ 86 0๊ฑด ์ œ์ถœ

๋ฌธ์ œ ์„ค๋ช…

๐ŸŽง ์ธ๋”” ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ

์ธ๋”” ๋ฎค์ง€์…˜๋“ค์˜ ์Œ์•…์„ ์žฅ๋ฅด๋ณ„๋กœ ํ๋ ˆ์ด์…˜ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์Œ์— ๋“œ๋Š” ๊ณก์— ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์Œ์•… ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Laravel API ๋ฐฑ์—”๋“œ์™€ React ํ”„๋ก ํŠธ์—”๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํ’€์Šคํƒ ํ”„๋กœ์ ํŠธ๋กœ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋„ AI ๋„๊ตฌ์™€ ํ•จ๊ป˜๋ผ๋ฉด ์ถฉ๋ถ„ํžˆ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœจ ํ•„์ˆ˜ ๊ธฐ๋Šฅ

  • ์žฅ๋ฅด๋ณ„ ์Œ์•… ๋ชฉ๋ก: ์ธ๋””ํŒ, ์ธ๋””๋ก, ํฌํฌ, ์ผ๋ ‰ํŠธ๋กœ๋‹‰ ๋“ฑ ์žฅ๋ฅด ํ•„ํ„ฐ๋ง
  • ๊ณก ์ •๋ณด ์นด๋“œ: ์•„ํ‹ฐ์ŠคํŠธ๋ช…, ๊ณก ์ œ๋ชฉ, ์•จ๋ฒ” ์ปค๋ฒ„, ์žฌ์ƒ ์‹œ๊ฐ„ ํ‘œ์‹œ
  • ์ข‹์•„์š” ๊ธฐ๋Šฅ: ๋งˆ์Œ์— ๋“œ๋Š” ๊ณก์— ํ•˜ํŠธ ๋ฒ„ํŠผ ํด๋ฆญ
  • ์žฌ์ƒ ํšŸ์ˆ˜ ์นด์šดํ„ฐ: ๊ณก์ด ์žฌ์ƒ๋  ๋•Œ๋งˆ๋‹ค ์นด์šดํŠธ ์ฆ๊ฐ€
  • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋ฐ”์ผ/๋ฐ์Šคํฌํ†ฑ ๋ชจ๋‘ ์ตœ์ ํ™”

๐ŸŽ ์„ ํƒ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ (๋ณด๋„ˆ์Šค)

  • ์ตœ๊ทผ ์žฌ์ƒ ๋ชฉ๋ก ํ‘œ์‹œ
  • ์ธ๊ธฐ ๊ณก Top 10 ์ฐจํŠธ
  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ (์•„ํ‹ฐ์ŠคํŠธ๋ช…, ๊ณก ์ œ๋ชฉ)
  • ๋‹คํฌ ๋ชจ๋“œ ํ† ๊ธ€
  • ๊ณก ๊ณต์œ  ๋ฒ„ํŠผ (SNS ๋งํฌ ๋ณต์‚ฌ)

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

  • ๋ฐฑ์—”๋“œ: Laravel 13.x (RESTful API, SQLite)
  • ํ”„๋ก ํŠธ์—”๋“œ: React 19 (Vite, Tailwind CSS)
  • ์ƒํƒœ๊ด€๋ฆฌ: useState๋งŒ ์‚ฌ์šฉ (๋ณต์žกํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆํ•„์š”)
  • API ํ†ต์‹ : fetch ๋˜๋Š” axios

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด Laravel API ์„ค๊ณ„, React ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ, ํ”„๋ก ํŠธ-๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ ์—ฐ๋™์˜ ๊ธฐ์ดˆ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ฝ ์กฐ๊ฑด

  • โ€ข Laravel 13.x ์‚ฌ์šฉ (๊ตฌ๋ฒ„์ „ ์ ˆ๋Œ€ ๊ธˆ์ง€)
  • โ€ข React 19 ์‚ฌ์šฉ (Vite ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ)
  • โ€ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” SQLite ์‚ฌ์šฉ (๊ฐ„๋‹จํ•œ ์„ค์ •)
  • โ€ข ๋ณต์žกํ•œ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๊ธˆ์ง€ (useState๋งŒ ์‚ฌ์šฉ)
  • โ€ข WebSocket/์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๊ธฐ๋Šฅ ์—†์Œ (HTTP ๊ธฐ๋ฐ˜๋งŒ)
  • โ€ข Tailwind CSS๋กœ ์Šคํƒ€์ผ๋ง
  • โ€ข ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ํ•„์ˆ˜
  • โ€ข ํ”„๋ก ํŠธ์—”๋“œ๋Š” Vite๋กœ ๋ณ„๋„ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ
  • โ€ข CORS ์„ค์ • ํฌํ•จ
  • โ€ข API๋Š” RESTful ๊ตฌ์กฐ ์ค€์ˆ˜

ํ”„๋กฌํ”„ํŠธ ๋ ˆ์‹œํ”ผ

์•„๋ž˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ AI์—๊ฒŒ ๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜์„ธ์š”.

1
Step 1
mkdir indie-music-playlist-curator && cd indie-music-playlist-curator

์ด ํด๋”์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

## Laravel 13.x API ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

๋‹ค์Œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ Laravel ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐ ์„ค์ •์„ ์™„๋ฃŒํ•ด์ฃผ์„ธ์š”:

1. **Laravel 13.x ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ**
   - `backend` ํด๋”์— Laravel 13.x ์„ค์น˜
   - Composer ์ตœ์‹  ๋ฒ„์ „ ์‚ฌ์šฉ

2. **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •**
   - SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ (.env ํŒŒ์ผ ์ˆ˜์ •)
   - `database/database.sqlite` ํŒŒ์ผ ์ƒ์„ฑ

3. **๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ**
   - `songs` ํ…Œ์ด๋ธ” ์ƒ์„ฑ
   - ์ปฌ๋Ÿผ: id, title (๊ณก ์ œ๋ชฉ), artist (์•„ํ‹ฐ์ŠคํŠธ๋ช…), genre (์žฅ๋ฅด), album_cover (์•จ๋ฒ” ์ปค๋ฒ„ URL), duration (์žฌ์ƒ ์‹œ๊ฐ„, ์ดˆ ๋‹จ์œ„), play_count (์žฌ์ƒ ํšŸ์ˆ˜, ๊ธฐ๋ณธ๊ฐ’ 0), likes_count (์ข‹์•„์š” ์ˆ˜, ๊ธฐ๋ณธ๊ฐ’ 0), timestamps

4. **์‹œ๋”(Seeder) ์ƒ์„ฑ**
   - 10๊ฐœ ์ด์ƒ์˜ ์ƒ˜ํ”Œ ์ธ๋”” ์Œ์•… ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
   - ์žฅ๋ฅด: ์ธ๋””ํŒ, ์ธ๋””๋ก, ํฌํฌ, ์ผ๋ ‰ํŠธ๋กœ๋‹‰ ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ
   - ์•จ๋ฒ” ์ปค๋ฒ„๋Š” placeholder ์ด๋ฏธ์ง€ URL ์‚ฌ์šฉ (์˜ˆ: https://via.placeholder.com/300)

5. **CORS ์„ค์ •**
   - `config/cors.php` ์„ค์ • (React ์•ฑ๊ณผ ํ†ต์‹  ๊ฐ€๋Šฅํ•˜๋„๋ก)
   - `php artisan config:publish cors` ๋ช…๋ น ์‹คํ–‰ ํ›„ ์„ค์ •

๋ช…๋ น์–ด์™€ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”.

๊ธฐ๋Œ€ ๊ฒฐ๊ณผ: Laravel 13.x ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— songs ํ…Œ์ด๋ธ”์ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜๋ฉฐ, ์ƒ˜ํ”Œ ์Œ์•… ๋ฐ์ดํ„ฐ๊ฐ€ ์‹œ๋”ฉ๋ฉ๋‹ˆ๋‹ค. CORS ์„ค์ •์ด ์™„๋ฃŒ๋˜์–ด React ์•ฑ๊ณผ ํ†ต์‹ ํ•  ์ค€๋น„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

2
Step 2
## Laravel API ๋ผ์šฐํŠธ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌํ˜„

RESTful API๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”:

1. **์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ**
   - `SongController` ์ƒ์„ฑ (Resource Controller)

2. **API ๋ผ์šฐํŠธ ์ •์˜** (`routes/api.php`)
   - `GET /api/songs` - ๋ชจ๋“  ๊ณก ๋ชฉ๋ก ์กฐํšŒ (์žฅ๋ฅด ํ•„ํ„ฐ๋ง ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์ง€์›)
   - `GET /api/songs/{id}` - ํŠน์ • ๊ณก ์ƒ์„ธ ์กฐํšŒ
   - `POST /api/songs/{id}/like` - ์ข‹์•„์š” ์ฆ๊ฐ€
   - `POST /api/songs/{id}/play` - ์žฌ์ƒ ํšŸ์ˆ˜ ์ฆ๊ฐ€

3. **์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„**
   - `index()`: ๋ชจ๋“  ๊ณก ๋ฐ˜ํ™˜, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ `genre`๋กœ ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅ
   - `show($id)`: ํŠน์ • ๊ณก ์ƒ์„ธ ์ •๋ณด ๋ฐ˜ํ™˜
   - `like($id)`: likes_count 1 ์ฆ๊ฐ€ ํ›„ ์—…๋ฐ์ดํŠธ๋œ ๊ณก ์ •๋ณด ๋ฐ˜ํ™˜
   - `play($id)`: play_count 1 ์ฆ๊ฐ€ ํ›„ ์—…๋ฐ์ดํŠธ๋œ ๊ณก ์ •๋ณด ๋ฐ˜ํ™˜

4. **JSON ์‘๋‹ต ํ˜•์‹**
   - ์„ฑ๊ณต ์‹œ: `{ "success": true, "data": {...} }`
   - ์‹คํŒจ ์‹œ: `{ "success": false, "message": "์—๋Ÿฌ ๋ฉ”์‹œ์ง€" }`

๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

๊ธฐ๋Œ€ ๊ฒฐ๊ณผ: Laravel API ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์™„์„ฑ๋˜๊ณ , Postman์ด๋‚˜ curl๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์žฅ๋ฅด ํ•„ํ„ฐ๋ง, ์ข‹์•„์š”, ์žฌ์ƒ ํšŸ์ˆ˜ ์ฆ๊ฐ€ ๊ธฐ๋Šฅ์ด ๋ชจ๋‘ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

3
Step 3
## React 19 ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

`frontend` ํด๋”์— React ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐ ์„ค์ •์„ ์™„๋ฃŒํ•ด์ฃผ์„ธ์š”:

1. **Vite๋กœ React 19 ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ**
   - `npm create vite@latest frontend -- --template react`
   - React 19 ๋ฒ„์ „ ํ™•์ธ

2. **Tailwind CSS ์„ค์น˜ ๋ฐ ์„ค์ •**
   - Tailwind CSS ์ตœ์‹  ๋ฒ„์ „ ์„ค์น˜
   - `tailwind.config.js` ์„ค์ •
   - `src/index.css`์— Tailwind directives ์ถ”๊ฐ€

3. **Axios ์„ค์น˜**
   - `npm install axios`
   - API ํ†ต์‹ ์šฉ axios ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ (`src/api/axios.js`)
   - baseURL: `http://localhost:8000/api`

4. **๊ธฐ๋ณธ ํด๋” ๊ตฌ์กฐ ์ƒ์„ฑ**
   - `src/components/` - ์žฌ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ
   - `src/pages/` - ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
   - `src/api/` - API ํ˜ธ์ถœ ํ•จ์ˆ˜

5. **๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ ํ™•์ธ**
   - `npm run dev` ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ ํ™”๋ฉด ํ™•์ธ

๋ชจ๋“  ๋ช…๋ น์–ด์™€ ์„ค์ • ํŒŒ์ผ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”.

๊ธฐ๋Œ€ ๊ฒฐ๊ณผ: React 19 ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , Tailwind CSS์™€ Axios๊ฐ€ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜์–ด ๊ธฐ๋ณธ ํ™”๋ฉด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4
Step 4
## ์Œ์•… ๋ชฉ๋ก ํŽ˜์ด์ง€ ๊ตฌํ˜„ (React ์ปดํฌ๋„ŒํŠธ)

๋ฉ”์ธ ํŽ˜์ด์ง€์— ์Œ์•… ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”:

1. **API ํ˜ธ์ถœ ํ•จ์ˆ˜ ์ž‘์„ฑ** (`src/api/songs.js`)
   - `fetchSongs(genre = '')` - ๊ณก ๋ชฉ๋ก ์กฐํšŒ (์žฅ๋ฅด ํ•„ํ„ฐ๋ง ์˜ต์…˜)
   - `likeSong(id)` - ์ข‹์•„์š” ์ฆ๊ฐ€
   - `playSong(id)` - ์žฌ์ƒ ํšŸ์ˆ˜ ์ฆ๊ฐ€

2. **SongCard ์ปดํฌ๋„ŒํŠธ** (`src/components/SongCard.jsx`)
   - Props: song ๊ฐ์ฒด (id, title, artist, genre, album_cover, duration, play_count, likes_count)
   - ์•จ๋ฒ” ์ปค๋ฒ„ ์ด๋ฏธ์ง€ ํ‘œ์‹œ
   - ์•„ํ‹ฐ์ŠคํŠธ๋ช…, ๊ณก ์ œ๋ชฉ ํ‘œ์‹œ
   - ์žฅ๋ฅด ๋ฐฐ์ง€ (Tailwind๋กœ ์Šคํƒ€์ผ๋ง)
   - ์žฌ์ƒ ์‹œ๊ฐ„ ํ‘œ์‹œ (์ดˆ โ†’ ๋ถ„:์ดˆ ํ˜•์‹ ๋ณ€ํ™˜)
   - ์ข‹์•„์š” ๋ฒ„ํŠผ (ํ•˜ํŠธ ์•„์ด์ฝ˜, ํด๋ฆญ ์‹œ likes_count ์ฆ๊ฐ€)
   - ์žฌ์ƒ ๋ฒ„ํŠผ (์žฌ์ƒ ์•„์ด์ฝ˜, ํด๋ฆญ ์‹œ play_count ์ฆ๊ฐ€)
   - ํ˜ธ๋ฒ„ ์‹œ ๊ทธ๋ฆผ์ž ํšจ๊ณผ

3. **MusicList ํŽ˜์ด์ง€** (`src/pages/MusicList.jsx`)
   - useState๋กœ songs ๋ฐฐ์—ด ์ƒํƒœ ๊ด€๋ฆฌ
   - useState๋กœ selectedGenre ์ƒํƒœ ๊ด€๋ฆฌ
   - useEffect๋กœ ์ปดํฌ๋„ŒํŠธ ๋งˆ์šดํŠธ ์‹œ fetchSongs ํ˜ธ์ถœ
   - ์žฅ๋ฅด ํ•„ํ„ฐ ๋ฒ„ํŠผ๋“ค (์ „์ฒด, ์ธ๋””ํŒ, ์ธ๋””๋ก, ํฌํฌ, ์ผ๋ ‰ํŠธ๋กœ๋‹‰)
   - ํ•„ํ„ฐ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ selectedGenre ๋ณ€๊ฒฝ ๋ฐ API ์žฌํ˜ธ์ถœ
   - SongCard ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ฐฐ์น˜ (๋ฐ˜์‘ํ˜•: ๋ชจ๋ฐ”์ผ 1์—ด, ํƒœ๋ธ”๋ฆฟ 2์—ด, ๋ฐ์Šคํฌํ†ฑ 3์—ด)
   - ๋กœ๋”ฉ ์ƒํƒœ ํ‘œ์‹œ
   - ์—๋Ÿฌ ์ฒ˜๋ฆฌ

4. **App.jsx ์ˆ˜์ •**
   - MusicList ํŽ˜์ด์ง€๋ฅผ ๋ฉ”์ธ์œผ๋กœ ๋ Œ๋”๋ง
   - ํ—ค๋” ์ถ”๊ฐ€ (๋กœ๊ณ , ์ œ๋ชฉ)

๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. Tailwind CSS๋กœ ์Šคํƒ€์ผ๋งํ•˜๊ณ , ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ์ ์šฉํ•˜์„ธ์š”.

๊ธฐ๋Œ€ ๊ฒฐ๊ณผ: React ํ”„๋ก ํŠธ์—”๋“œ์—์„œ Laravel API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์Œ์•… ๋ชฉ๋ก์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์žฅ๋ฅด ํ•„ํ„ฐ๋ง, ์ข‹์•„์š”, ์žฌ์ƒ ๋ฒ„ํŠผ์ด ๋ชจ๋‘ ๋™์ž‘ํ•˜๋ฉฐ, ๋ฐ˜์‘ํ˜• ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ œ์ถœ๋œ ์ž‘ํ’ˆ (0)

๋กœ๊ทธ์ธ ํ›„ ์ œ์ถœ

์•„์ง ์ œ์ถœ๋œ ์ž‘ํ’ˆ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋„์ „์ž๊ฐ€ ๋˜์–ด๋ณด์„ธ์š”!

๋Œ“๊ธ€ (0)

๋กœ๊ทธ์ธ ํ›„ ๋Œ“๊ธ€์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ๋ณด์„ธ์š”!