๐ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ค๋์ ํ์ต
Next.js์ Tailwind CSS๋ก ๋ชจ๋ ์น ์ฑ ๋ง๋ค๊ธฐ

๐ ์ฃผ์ ์์ ๋ด์ฉ
1. ๐งฉ ์ปดํฌ๋ํธ ๊ตฌ์กฐํ ๋ฐ UI ๊ฐ์
- ๋ชจ๋ํ UI ์ปดํฌ๋ํธ๋ค์ ์ถ๊ฐํ๊ณ ๊ตฌ์กฐํํ์ต๋๋ค:
ModernLogo,SpaceBackground,ContentGrid,PricingSection๋ฑ์ UI ์ปดํฌ๋ํธ- ๊ณ์ ๋ณ ํ ๋ง๋ฅผ ์ ์ฉํ๋ ์ ํธ๋ฆฌํฐ ํจ์ ๊ฐ์
- ๋ฐ์ํ ๋ ์ด์์ ์ ์ฉ
2. ๐ ์ธ์ฆ ์์คํ ๊ฐ์
- ์นด์นด์ค ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ฆฌํฉํ ๋งํ๊ณ ํตํฉํ์ต๋๋ค
- JWT ํ ํฐ ๊ด๋ฆฌ ๊ฐ์ ๋ฐ ์ธ์ฆ ์ปจํ ์คํธ(AuthContext) ์ ๋ฐ์ดํธ
- ๋ก๊ทธ์ธ ๋ชจ๋ฌ ์ถ๊ฐ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์
3. โ๏ธ Next.js ๊ตฌ์กฐ ์ต์ ํ
_app.tsx๋ฐ_document.jsํ์ผ ํ๋ํ- ๋ผ์ฐํ ๋ฐ ํ์ด์ง ๊ตฌ์กฐ ๊ฐ์
- ์ปดํฌ๋ํธ ๋ถ๋ฆฌ๋ฅผ ํตํ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ํฅ์
4. ๐จ ์คํ์ผ๋ง ์์คํ ๊ฐ์
- Tailwind CSS ์ค์ ์ต์ ํ ๋ฐ ๋ถํ์ํ ์ค์ ์ ๊ฑฐ
- ์ปค์คํ ํ ๋ง ์์คํ ๊ฐ์ ๋ฐ ๋คํฌ ๋ชจ๋ ์ง์ ์ถ๊ฐ
- ๊ณตํต ์ปดํฌ๋ํธ์ ์ผ๊ด๋ ์คํ์ผ ์ ์ฉ
๐ก ๋ฐฐ์ด ์
Next.js ๊ฐ๋ฐ ํจํด
"use client" // ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ์ง์์ด
export default function ModernLogo() {
return (
<div className="flex items-center space-x-2">
{/* ๋ก๊ณ ๋ด์ฉ */}
</div>
)
}
- โuse clientโ ์ง์์ด๋ฅผ ํ์ฉํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์๋ฒ ์ปดํฌ๋ํธ ๊ตฌ๋ถ
- Next.js์ ํ์ด์ง ๋ผ์ฐํ ์์คํ ํ์ฉ ๋ฐฉ๋ฒ
- ๋ ์ด์์ ์ปดํฌ๋ํธ๋ฅผ ํตํ ์ผ๊ด๋ UI ์ ๊ณต
Tailwind CSS ํ์ฉ
<nav className="sticky top-0 z-20 bg-black/50 backdrop-filter backdrop-blur-md">
{/* ๋ด์ฉ */}
</nav>
- ๋ฐ์ํ ๋์์ธ ๊ตฌํ ๋ฐฉ๋ฒ (sm, md, lg ๋ธ๋ ์ดํฌํฌ์ธํธ ํ์ฉ)
- ๋ฐฑ๋๋กญ ๋ธ๋ฌ์ ๊ทธ๋ผ๋์ธํธ๋ฅผ ํ์ฉํ ๋ชจ๋ํ UI ๊ตฌํ
- ๋คํฌ ๋ชจ๋ ์ง์์ ์ํ ๋ณ์ ์ค์
์ปดํฌ๋ํธ ์ค๊ณ
const Layout: React.FC<LayoutProps> = ({ children, title = '์ฐ์ฃผ์ ์ด๋ช
์ ๊ธธ' }) => {
return (
<div className="min-h-screen flex flex-col bg-gray-900 text-white relative">
<SpaceBackground />
<Navbar />
<main className="flex-grow container mx-auto px-4 sm:px-6 py-8 relative z-10">
{children}
</main>
<Footer />
</div>
)
}
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์ปดํฌ๋ํธ ์ค๊ณ ๋ฐฉ๋ฒ
- SVG๋ฅผ ํ์ฉํ ์ธํฐ๋ํฐ๋ธ ์์ ๊ตฌํ
- ๋ชจ๋ฌ ๋ฐ ๊ณตํต UI ์ปดํฌ๋ํธ ์ถ์ํ
์ธ์ฆ ์์คํ
const handleLogin = () => {
if (window.Kakao) {
// ์นด์นด์ค ๋ก๊ทธ์ธ ๊ตฌํ
window.location.href = KAKAO_AUTH_URL
}
}
- JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๊ตฌํ ๋ฐฉ๋ฒ
- ์์ ๋ก๊ทธ์ธ(์นด์นด์ค) ์ฐ๋ ๋ฐฉ๋ฒ
- ์ธ์ฆ ์ํ์ ๋ฐ๋ฅธ ์กฐ๊ฑด๋ถ ๋ ๋๋ง
๐ ๏ธ ํด๊ฒฐํ ๋ฌธ์ ์
- ์ผ๊ด์ฑ ์๋ ์ฝ๋ ์คํ์ผ: ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ๊ณผ ๊ตฌ์กฐ ์ ์ฉ
- ์ค๋ณต๋ UI ๋ก์ง: ๊ณตํต ์ปดํฌ๋ํธ ์ถ์ถ๋ก ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ
- ๋ชจ๋ฐ์ผ ์ง์ ๋ฏธํก: ๋ฐ์ํ ๋์์ธ ์ ์ฉ์ผ๋ก ๋ชจ๋ฐ์ผ ์ฌ์ฉ์ฑ ๊ฐ์
- ๋ถํ์ํ ์์กด์ฑ: package.json ์ต์ ํ ๋ฐ ์ต์ ๋ฒ์ ์ ์ฉ
๐ฎ ์์ผ๋ก์ ๊ฐ์ ๋ฐฉํฅ
| ์์ญ | ๊ฐ์ ๊ณํ |
|---|---|
| ์ฑ๋ฅ | ์ด๋ฏธ์ง ์ต์ ํ ๋ฐ ์ปดํฌ๋ํธ ๋ ๋๋ง ์ฑ๋ฅ ๊ฐ์ |
| ์ ๊ทผ์ฑ | ARIA ์์ฑ ๋ฐ ํค๋ณด๋ ๋ค๋น๊ฒ์ด์ ์ง์ ํ๋ |
| ํ ์คํธ | ํต์ฌ ์ปดํฌ๋ํธ ๋ฐ ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ ์์ฑ |
| ๊ตญ์ ํ | ๋ค๊ตญ์ด ์ง์์ ์ํ i18n ํตํฉ |
์ค๋์ ์์ ์ ํตํด ๋ชจ๋ ์น ๊ฐ๋ฐ์ ํต์ฌ ํจํด๊ณผ ๊ธฐ์ ์ ์ ์ฉํด๋ณผ ์ ์์์ต๋๋ค. ํนํ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ๊ณผ ๋ฐ์ํ ๋์์ธ์ ์ค์์ฑ์ ๋ค์ ํ๋ฒ ๋๋ ์ ์์์ต๋๋ค. ๋ค์ ์์ ์์๋ ์ด๋ฌํ ๊ธฐ๋ฐ ์์ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ฐ ์ง์คํ ๊ณํ์ ๋๋ค.
โ์ข์ ์ฝ๋๋ ๊ทธ ์์ฒด๋ก ์ต๊ณ ์ ๋ฌธ์๋คโ - ๋ก๋ฒํธ C. ๋งํด