๐จ ์ผ๋ฌ์คํธ ์๊ฐ ์คํ์ผ ๊ฐ์ด๋๋ถ - ํฌํธํด๋ฆฌ์ค & ์์ ์คํ์ผ ์๊ฐ ํ์ด์ง
illustrator-style-guidebook
๋ฌธ์ ์ค๋ช
ํ๋ก์ ํธ ๊ฐ์
์ผ๋ฌ์คํธ๋ ์ดํฐ๊ฐ ์์ ์ ์์ ์คํ์ผ์ ์ฒด๊ณ์ ์ผ๋ก ์๊ฐํ๋ ์คํ์ผ ๊ฐ์ด๋๋ถ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ญ๋๋ค. ๋จ์ํ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋์ด, ์๊ฐ์ ๊ทธ๋ฆผ ์คํ์ผ(๋ผ์ธ ๋๋ก์, ์์ฑํ, ๋์งํธ ํ์ธํ ๋ฑ), ์ฃผ๋ก ๋ค๋ฃจ๋ ์ฃผ์ (์ธ๋ฌผ, ํ๊ฒฝ, ์บ๋ฆญํฐ ๋ฑ), ์์ ํ๋ ํธ, ์์ ํ๋ก์ธ์ค๋ฅผ ํ๋์ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ํ์ ํํธ๋๊ฐ ๋ฐฉ๋ฌธํ์ ๋ "์ด ์๊ฐ๋ ์ด๋ฐ ์คํ์ผ๋ก ์์ ํ๋๊ตฌ๋"๋ฅผ ์ฆ์ ํ์ ํ ์ ์๋๋ก ์๊ฐ์ ์ผ๋ก ์ ๋ฆฌ๋ ๊ฐ์ด๋๋ถ ํํ๋ก ๊ตฌ์ฑํฉ๋๋ค.
ํ์ ๊ธฐ๋ฅ
โ
๋ฉ์ธ ํ์ด์ง: ์๊ฐ ์๊ฐ, ๋ํ ์ํ 3~5๊ฐ ์นด๋ ํํ๋ก ์ง์ด
โ
์คํ์ผ ๊ฐ์ด๋ ํ์ด์ง: ์์
์คํ์ผ๋ณ ์น์
(๋ผ์ธ์ํธ, ์ปฌ๋ฌ ์ผ๋ฌ์คํธ, ์บ๋ฆญํฐ ๋์์ธ ๋ฑ) ๊ตฌ๋ถํ์ฌ ์ํ ๋์ด
โ
์์ ํ๋ ํธ ์น์
: ์๊ฐ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ ์ปฌ๋ฌ ์กฐํฉ์ ํ๋ ํธ ํํ๋ก ์๊ฐํ (Hex ์ฝ๋ ํฌํจ)
โ
์์
ํ๋ก์ธ์ค ํ์๋ผ์ธ: ์ค์ผ์น โ ๋ฐ๊ทธ๋ฆผ โ ์ฑ์ โ ์์ฑ ๋จ๊ณ๋ฅผ ์ด๋ฏธ์ง์ ํจ๊ป ์ค๋ช
โ
๋ฌธ์ ํผ: ํ์
์ ์์ด๋ ์ปค๋ฏธ์
๋ฌธ์๋ฅผ ๋ฐ์ ์ ์๋ ๊ฐ๋จํ ํผ (์ด๋ฆ, ์ด๋ฉ์ผ, ๋ฉ์์ง)
โ
๋ฐ์ํ ๋์์ธ: ๋ชจ๋ฐ์ผ์์๋ ์ํ์ด ๊น๋ํ๊ฒ ๋ณด์ด๋๋ก Tailwind CSS ๊ทธ๋ฆฌ๋ ํ์ฉ
๋ณด๋์ค ๊ธฐ๋ฅ (์ ํ)
๐ ์ํ ์นด๋ hover ์ ํ๋/๊ทธ๋ฆผ์ ํจ๊ณผ
๐ ์์ ํ๋ ํธ ํด๋ฆญ ์ Hex ์ฝ๋ ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ
๐ ๋คํฌ ๋ชจ๋ ์ง์ (Tailwind dark: ํด๋์ค ํ์ฉ)
๐ ์ํ ์์ธ ๋ชจ๋ฌ (ํด๋ฆญ ์ ํฐ ์ด๋ฏธ์ง + ์ค๋ช
ํ์
)
๐ ์์
ํ๋ก์ธ์ค์ before/after ์ฌ๋ผ์ด๋ ์ถ๊ฐ
๊ธฐ์ ์คํ
- ๋ฐฑ์๋: Laravel 13.x (Blade ํ ํ๋ฆฟ)
- ํ๋ก ํธ์๋: Tailwind CSS
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: SQLite (๊ฐ๋จํ ์ํ/๋ฌธ์ ์ ์ฅ)
- ์ด๋ฏธ์ง: ๋ก์ปฌ storage ๋๋ public ํด๋์ ์ ๋ก๋
ํ์ต ๋ชฉํ
- Laravel Blade ์ปดํฌ๋ํธ์ ๋ ์ด์์ ๊ตฌ์กฐ ์ดํด
- Tailwind CSS ๊ทธ๋ฆฌ๋/ํ๋ ์ค๋ฐ์ค๋ก ๊ฐค๋ฌ๋ฆฌ UI ๊ตฌํ
- ๊ฐ๋จํ ํผ ์ฒ๋ฆฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ (CRUD ๊ธฐ์ด)
- ๋ฐ์ํ ๋์์ธ ์์น ์ ์ฉ
์ ์ฝ ์กฐ๊ฑด
- โข Laravel 13.x + Blade ํ ํ๋ฆฟ ์ฌ์ฉ (React/Vue ๊ธ์ง)
- โข Tailwind CSS๋ก ๋ชจ๋ ์คํ์ผ๋ง ์ฒ๋ฆฌ
- โข SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ (MySQL/PostgreSQL ์ค์ ๋ถํ์)
- โข ์ด๋ฏธ์ง๋ public/images ํด๋์ ์ ์ฅํ๊ฑฐ๋ placeholder ์ด๋ฏธ์ง ์ฌ์ฉ
- โข ๋ฌธ์ ํผ์ DB์ ์ ์ฅ๋ง ํ๊ณ ์ด๋ฉ์ผ ๋ฐ์ก์ ์ ํ ์ฌํญ
- โข ์ํ์ ์ต์ 6๊ฐ ์ด์ ์๋ ๋ฐ์ดํฐ๋ก ์ค๋น
- โข ๋ชจ๋ฐ์ผ ๋ฐ์ํ ํ์ (Tailwind์ sm:/md:/lg: ๋ธ๋ ์ดํฌํฌ์ธํธ ํ์ฉ)
ํ๋กฌํํธ ๋ ์ํผ
์๋ ํ๋กฌํํธ๋ฅผ ์์๋๋ก AI์๊ฒ ๋ณด๋ด๋ฉด ๋ฉ๋๋ค. ๋ณต์ฌ ๋ฒํผ์ ๋๋ฌ ๋ฐ๋ก ์ฌ์ฉํ์ธ์.
mkdir illustrator-style-guidebook && cd illustrator-style-guidebook ์ด ํด๋์์ Laravel 13.x ํ๋ก์ ํธ๋ฅผ ์์ํฉ๋๋ค. # ์ผ๋ฌ์คํธ ์๊ฐ ์คํ์ผ ๊ฐ์ด๋๋ถ - ์ด๊ธฐ ์ค์ Laravel 13.x ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ๊ธฐ๋ณธ ํ๊ฒฝ์ ๊ตฌ์ฑํ์ธ์. ## ์๊ตฌ์ฌํญ 1. Laravel 13.x ์ต์ ๋ฒ์ ์ผ๋ก ํ๋ก์ ํธ ์์ฑ 2. SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ (.env ํ์ผ์์ DB_CONNECTION=sqlite) 3. Tailwind CSS ์ค์น ๋ฐ ์ค์ (Laravel Mix ๋๋ Vite ์ฌ์ฉ) 4. ๊ธฐ๋ณธ ๋ ์ด์์ Blade ํ์ผ ์์ฑ (resources/views/layouts/app.blade.php) - ํค๋: ์๊ฐ๋ช ๋ก๊ณ , ๋ค๋น๊ฒ์ด์ (Home, Style Guide, Process, Contact) - ํธํฐ: ์์ ๋ฏธ๋์ด ๋งํฌ (Instagram, Behance ๋ฑ) - Tailwind CSS CDN ๋๋ ๋น๋๋ CSS ํ์ผ ์ฐ๊ฒฐ 5. ํ ๋ผ์ฐํธ ์ค์ (routes/web.php์์ '/' ๊ฒฝ๋ก๋ฅผ welcome ํ์ด์ง ๋์ home์ผ๋ก ๋ณ๊ฒฝ) ## ๋์์ธ ๊ฐ์ด๋ - ์ ์ฒด์ ์ผ๋ก ๋ฐ๊ณ ๊น๋ํ ๊ฐค๋ฌ๋ฆฌ ๋๋ - ํค๋๋ ํฌ๋ช ๋ฐฐ๊ฒฝ ๋๋ ํฐ์, ์คํฌ๋กค ์ ๊ทธ๋ฆผ์ ์ถ๊ฐ - ํฐํธ: Tailwind ๊ธฐ๋ณธ ํฐํธ ๋๋ Google Fonts (Poppins, Inter ์ถ์ฒ) - ์์: ํ์คํ ํค ๋๋ ์๊ฐ ์๊ทธ๋์ฒ ์ปฌ๋ฌ ํ์ฉ ์์ ์ด ์๋ฃ๋๋ฉด `php artisan serve`๋ก ์๋ฒ๋ฅผ ์คํํ๊ณ http://localhost:8000 ์ ์ ์ ๊ธฐ๋ณธ ๋ ์ด์์์ด ํ์๋๋์ง ํ์ธํ์ธ์.
๊ธฐ๋ ๊ฒฐ๊ณผ: Laravel ํ๋ก์ ํธ๊ฐ ์์ฑ๋๊ณ , Tailwind CSS๊ฐ ์ค์ ๋๋ฉฐ, ๊ธฐ๋ณธ ๋ ์ด์์ Blade ํ์ผ(ํค๋/ํธํฐ ํฌํจ)์ด ์ค๋น๋ฉ๋๋ค. ํ ๋ผ์ฐํธ ์ ์ ์ ๋ค๋น๊ฒ์ด์ ์ด ์๋ ๋น ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค.
# ์ํ(Artwork) ๋ชจ๋ธ ๋ฐ ์๋ ๋ฐ์ดํฐ ์์ฑ
์๊ฐ์ ์ํ์ ๊ด๋ฆฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ธ์.
## ์๊ตฌ์ฌํญ
1. Artwork ๋ชจ๋ธ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
์์ฑ
- `php artisan make:model Artwork -m`
- ํ
์ด๋ธ ์ปฌ๋ผ:
- title (string): ์ํ ์ ๋ชฉ
- style (string): ์คํ์ผ ์นดํ
๊ณ ๋ฆฌ (์: 'line-art', 'watercolor', 'character-design')
- image_path (string): ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก
- description (text, nullable): ์ํ ์ค๋ช
- hex_colors (json, nullable): ์ํ์ ์ฌ์ฉ๋ ์ฃผ์ ์์ Hex ์ฝ๋ ๋ฐฐ์ด
- is_featured (boolean, default false): ๋ฉ์ธ ํ์ด์ง ๋ํ ์ํ ์ฌ๋ถ
- created_at, updated_at
2. ๋ง์ด๊ทธ๋ ์ด์
์คํ
- `php artisan migrate`
3. Seeder ์์ฑ ๋ฐ ์ํ ๋ฐ์ดํฐ ์ถ๊ฐ
- `php artisan make:seeder ArtworkSeeder`
- ์ต์ 8๊ฐ ์ํ ๋ฐ์ดํฐ ์์ฑ
- ์คํ์ผ์ 'line-art', 'watercolor', 'digital-painting', 'character-design' ์ค ๊ณจ๊ณ ๋ฃจ ๋ถ๋ฐฐ
- is_featured๋ 3๊ฐ ์ํ๋ง true๋ก ์ค์
- hex_colors๋ ์์: ["#FF6B6B", "#4ECDC4", "#FFE66D"]
- image_path๋ placeholder ์ด๋ฏธ์ง ์ฌ์ฉ (์: https://via.placeholder.com/600x400)
4. DatabaseSeeder์์ ArtworkSeeder ํธ์ถ ์ค์
5. ์๋ ์คํ
- `php artisan db:seed`
์๋ฃ ํ `php artisan tinker`์์ `Artwork::count()`๋ก ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ๋์ง ํ์ธํ์ธ์.
๊ธฐ๋ ๊ฒฐ๊ณผ: Artwork ๋ชจ๋ธ๊ณผ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์์ฑ๋๊ณ , 8๊ฐ ์ด์์ ์ํ ์ํ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค. ๊ฐ ์ํ์ ์คํ์ผ, ์ด๋ฏธ์ง, ์์ ํ๋ ํธ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
# ๋ฉ์ธ ํ์ด์ง ๋ฐ ์คํ์ผ ๊ฐ์ด๋ ํ์ด์ง ๊ตฌํ
์ํ์ ๋ณด์ฌ์ฃผ๋ ํต์ฌ ํ์ด์ง 2๊ฐ๋ฅผ ๋ง๋์ธ์.
## ์๊ตฌ์ฌํญ
### 1. HomeController ์์ฑ ๋ฐ ๋ผ์ฐํธ ์ค์
- `php artisan make:controller HomeController`
- HomeController์ index ๋ฉ์๋ ์ถ๊ฐ
- is_featured=true์ธ ์ํ 3๊ฐ ์กฐํํ์ฌ ๋ทฐ์ ์ ๋ฌ
- routes/web.php์์ '/' ๊ฒฝ๋ก๋ฅผ HomeController@index๋ก ์ฐ๊ฒฐ
### 2. ๋ฉ์ธ ํ์ด์ง (resources/views/home.blade.php)
๋ ์ด์์:
- ํ์ด๋ก ์น์
: ์๊ฐ ์ด๋ฆ, ์งง์ ์๊ฐ ๋ฌธ๊ตฌ, "์ํ ๋ณด๊ธฐ" CTA ๋ฒํผ
- ๋ํ ์ํ ์น์
: is_featured ์ํ 3๊ฐ๋ฅผ ์นด๋ ํํ๋ก ๊ฐ๋ก ๋ฐฐ์น
- ๊ฐ ์นด๋: ์ด๋ฏธ์ง, ์ ๋ชฉ, ์คํ์ผ ํ๊ทธ
- Tailwind grid (md:grid-cols-3) ์ฌ์ฉ
- hover ์ ์นด๋ ์ด์ง ํ๋ ํจ๊ณผ (transform scale-105)
### 3. StyleGuideController ์์ฑ ๋ฐ ํ์ด์ง
- `php artisan make:controller StyleGuideController`
- index ๋ฉ์๋์์ ๋ชจ๋ ์ํ์ style๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ์ ๋ฌ
- `Artwork::all()->groupBy('style')`
- routes/web.php์ '/style-guide' ๊ฒฝ๋ก ์ถ๊ฐ
### 4. ์คํ์ผ ๊ฐ์ด๋ ํ์ด์ง (resources/views/style-guide.blade.php)
๋ ์ด์์:
- ํ์ด์ง ์ ๋ชฉ: "์์
์คํ์ผ ๊ฐ์ด๋"
- ๊ฐ ์คํ์ผ๋ณ ์น์
(line-art, watercolor ๋ฑ)
- ์น์
์ ๋ชฉ (์: "๋ผ์ธ ์ํธ")
- ํด๋น ์คํ์ผ ์ํ๋ค์ grid๋ก ๋์ด (md:grid-cols-3)
- ๊ฐ ์ํ ์นด๋: ์ด๋ฏธ์ง, ์ ๋ชฉ, ์์ ํ๋ ํธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (์์ ์ํ ์์ ์ 3~4๊ฐ)
### 5. ์์ ํ๋ ํธ ์ปดํฌ๋ํธ
- Blade ์ปดํฌ๋ํธ ์์ฑ: `php artisan make:component ColorPalette`
- ์ํ์ hex_colors ๋ฐฐ์ด์ ๋ฐ์ ์์ ์ํ ์์ ์นฉ์ผ๋ก ํ์
- ๊ฐ ์์ ์นฉ์ ํด๋น Hex ์ฝ๋ ๋ฐฐ๊ฒฝ์ ์ ์ฉ
์๋ฃ ํ ๋ฉ์ธ ํ์ด์ง์ /style-guide ํ์ด์ง์์ ์ํ์ด ์ ์์ ์ผ๋ก ํ์๋๋์ง ํ์ธํ์ธ์.
๊ธฐ๋ ๊ฒฐ๊ณผ: ๋ฉ์ธ ํ์ด์ง์ ๋ํ ์ํ 3๊ฐ๊ฐ ์นด๋ ํํ๋ก ํ์๋๊ณ , ์คํ์ผ ๊ฐ์ด๋ ํ์ด์ง์์๋ ์คํ์ผ๋ณ๋ก ๊ทธ๋ฃนํ๋ ์ํ ๊ฐค๋ฌ๋ฆฌ๊ฐ ๋ณด์ ๋๋ค. ๊ฐ ์ํ ์นด๋์๋ ์์ ํ๋ ํธ๊ฐ ์๊ฐ์ ์ผ๋ก ํ์๋ฉ๋๋ค.
# ์์
ํ๋ก์ธ์ค ํ์ด์ง ๋ฐ ๋ฌธ์ ํผ ๊ตฌํ
์๊ฐ์ ์์
๊ณผ์ ์ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ ํ์
๋ฌธ์๋ฅผ ๋ฐ๋ ํผ์ ์ถ๊ฐํ์ธ์.
## ์๊ตฌ์ฌํญ
### 1. ์์
ํ๋ก์ธ์ค ํ์ด์ง
- ProcessController ์์ฑ: `php artisan make:controller ProcessController`
- routes/web.php์ '/process' ๊ฒฝ๋ก ์ถ๊ฐ
- resources/views/process.blade.php ์์ฑ
๋ ์ด์์:
- ํ์ด์ง ์ ๋ชฉ: "์์
ํ๋ก์ธ์ค"
- ํ์๋ผ์ธ ํํ๋ก 4๋จ๊ณ ํ์ (Tailwind๋ก ์ธ๋ก ๋ผ์ธ ์ฐ๊ฒฐ)
1. ์ค์ผ์น ๋จ๊ณ: ์ด๋ฏธ์ง + ์ค๋ช
ํ
์คํธ
2. ๋ฐ๊ทธ๋ฆผ ๋จ๊ณ: ์ด๋ฏธ์ง + ์ค๋ช
ํ
์คํธ
3. ์ฑ์ ๋จ๊ณ: ์ด๋ฏธ์ง + ์ค๋ช
ํ
์คํธ
4. ์์ฑ ๋จ๊ณ: ์ด๋ฏธ์ง + ์ค๋ช
ํ
์คํธ
- ๊ฐ ๋จ๊ณ๋ ์นด๋ ํํ๋ก, ์ด๋ฏธ์ง๋ placeholder ๋๋ ์ค์ ์์
๊ณผ์ ์ด๋ฏธ์ง ์ฌ์ฉ
- ๋ชจ๋ฐ์ผ์์๋ ํ์๋ผ์ธ์ด ์ธ๋ก๋ก ์์ด๋๋ก ๋ฐ์ํ ์ฒ๋ฆฌ
### 2. ๋ฌธ์(Inquiry) ๋ชจ๋ธ ๋ฐ ํผ
- Inquiry ๋ชจ๋ธ ์์ฑ: `php artisan make:model Inquiry -m`
- ํ
์ด๋ธ ์ปฌ๋ผ:
- name (string): ๋ฌธ์์ ์ด๋ฆ
- email (string): ์ด๋ฉ์ผ
- message (text): ๋ฌธ์ ๋ด์ฉ
- created_at, updated_at
- ๋ง์ด๊ทธ๋ ์ด์
์คํ
- ContactController ์์ฑ: `php artisan make:controller ContactController`
- routes/web.php์ '/contact' GET, POST ๋ผ์ฐํธ ์ถ๊ฐ
- resources/views/contact.blade.php ์์ฑ
๋ฌธ์ ํผ ๋ ์ด์์:
- ํ์ด์ง ์ ๋ชฉ: "ํ์
๋ฌธ์"
- ํผ ํ๋: ์ด๋ฆ, ์ด๋ฉ์ผ, ๋ฉ์์ง (textarea)
- ์ ์ถ ๋ฒํผ: "๋ฌธ์ํ๊ธฐ"
- POST ์์ฒญ ์ฒ๋ฆฌ:
- ์ ํจ์ฑ ๊ฒ์ฌ (name, email required, email format)
- Inquiry ๋ชจ๋ธ์ ์ ์ฅ
- ์ฑ๊ณต ์ "๋ฌธ์๊ฐ ์ ์๋์์ต๋๋ค" ๋ฉ์์ง์ ํจ๊ป ํผ ์ด๊ธฐํ
- Tailwind alert ์ปดํฌ๋ํธ๋ก ์ฑ๊ณต ๋ฉ์์ง ํ์
### 3. ๋ค๋น๊ฒ์ด์
๋งํฌ ์
๋ฐ์ดํธ
- layouts/app.blade.php ํค๋์ Process, Contact ๋งํฌ ์ถ๊ฐ
- ํ์ฌ ํ์ด์ง ํ์ฑํ ์คํ์ผ ์ ์ฉ (Tailwind์ @if(request()->is('process')) ๋ฑ ํ์ฉ)
์๋ฃ ํ ๋ชจ๋ ํ์ด์ง๊ฐ ๋ค๋น๊ฒ์ด์
์ ํตํด ์ ์์ ์ผ๋ก ์ด๋๋๊ณ , ๋ฌธ์ ํผ์ด ์๋ํ๋์ง ํ์ธํ์ธ์.
๊ธฐ๋ ๊ฒฐ๊ณผ: ์์ ํ๋ก์ธ์ค ํ์ด์ง์ 4๋จ๊ณ ํ์๋ผ์ธ์ด ํ์๋๊ณ , ๋ฌธ์ ํ์ด์ง์์ ํผ ์ ์ถ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ฉฐ ์ฑ๊ณต ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค. ๋ชจ๋ ํ์ด์ง๊ฐ ํค๋ ๋ค๋น๊ฒ์ด์ ์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ ์ถ๋ ์ํ (0)
๋ก๊ทธ์ธ ํ ์ ์ถ์์ง ์ ์ถ๋ ์ํ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋์ ์๊ฐ ๋์ด๋ณด์ธ์!