https://nextjs.org/learn/dashboard-app ๊ณต์ ํํ ๋ฆฌ์ผ์ ํ๋ฒ ์ฝ์ด๋ณด๊ธฐ๋ก ํ๋ค.
1. Getting Started
/app : ํ์ด์ง, ์ปดํฌ๋ํธ, ๋ก์ง ๋ฑ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋ชจ๋ ๊ฒ์ด ๋ค์ด์๋ ๊ฒฝ๋ก
/app/lib : ์ฌ์ฌ์ฉํ ํจ์๋ค์ด ๋ค์ด์๋ ๊ฒฝ๋ก. (๋ฐ์ดํฐ ํจ์นญ ๋ฑ)
/app/ui : UI ์ปดํฌ๋ํธ๋ค
/public : ์ ์ ํ์ผ๋ค
2. CSS Styling
Next.js๋ ํ ์ผ์๋ ์ฌ์ฉ์ ๊ถ์ฅํ๋ค.
CSS๋ชจ๋์ด๋ผ๋ ๊ฒ๋ ์๋๋ฐ,
/*home.module.css*/
.shape {
height: 0;
width: 0;
border-bottom: 30px solid black;
border-left: 20px solid transparent;
border-right: 20px solid transparent;
}
์ด๋ ๊ฒ ์์ฑ๋์ด์๋ ์ผ๋ฐ cssํ์ผ์
import styles from "@/app/ui/home.module.css";
export default function Page(){
return(
<main className="flex min-h-screen flex-col p-6">
<div className={styles.shape}>
<AcmeLogo />
</div>
...
)
}
์ด๋ ๊ฒ ๋ถ๋ฌ์์ ์ฌ์ฉํ ์ ์๋ค.
ํด์ฆ : CSS๋ชจ๋์ ์ฅ์ ์? ์ ๋ต : Provide a way to make CSS classes locally scoped to components by default, reducing the risk of styling conflicts. CSS๋ชจ๋์ ๊ฐ ์ปดํฌ๋ํธ๋ง๋ค ๊ณ ์ ํ ํด๋์ค ๋ค์์ ์์ฑํด ์คํ์ผ๋ง ์ถฉ๋์ ๋ฐฉ์งํ ์ ์๋ค๊ณ ํ๋ค.
clsx ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ค.๊นํ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์คํ์ผ์ ์ฃผ๊ณ ์ถ์๋(์ฆ ํด๋์ค๋ค์์ ์ฃผ๊ณ ์ถ์๋) ์ฌ์ฉํ๋ค.
3. Optimizing Fonts and Images
4. Creating Layouts and Pages
5. Navigating Between Pages
Next.js๋ ๊ธฐ์กด์ <a> ํ๊ทธ ๋์ <Link>์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค.
<Link>์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ค๋น๊ฒ์ด์
์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋๋ฐ, ์ด๊ฒ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ํ์ด์ง ์ด๋์๋ง๋ค ์ ์ฒด ํ์ด์ง๋ฅผ ๋ก๋ํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ํ๊ฐ ์ง์์ง์ง์ง๋, ์คํฌ๋กค ์์น๊ฐ ์ด๊ธฐํ ๋์ง๋ ์๋๋ค.
Automatic Code-splitting and prefetching
๊ธฐ์กด์ ๋ฆฌ์กํธ SPA๋ ์ฒ์์ ์ ์ํ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์น์ฑ์ ๋ชจ๋ ์ฝ๋๋ค์ ๋ถ๋ฌ์ค๋ ๋ฐ๋ฉด, Next.js์์๋ ์๋์ผ๋ก ๋ฃจํธ๋ณ๋ก ์ฝ๋๋ค์ ๋ถ๋ฆฌํด(code-splitting) ํ์ํ ๋ ๋ง๋ค ์ฝ๋๋ค์ ๋ถ๋ฌ์จ๋ค(prefetching).
์ด๊ฑธ ๊ฐ๋ฅํ๊ฒ ํ๋๊ฒ <Link> ์ปดํฌ๋ํธ์ธ๋ฐ, ๋ธ๋ผ์ฐ์ ์ ๋ทฐํฌํธ์ ๋งํฌ ์ปดํฌ๋ํธ๊ฐ ๋ํ๋๋ฉด Next.js๋ ์๋์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํด๋น ๋งํฌ๊ฐ ์ฐ๊ฒฐํ๋ ํ์ด์ง์ ์ฝ๋๋ค์ prefetchํ๋ค. ๊ทธ๋์ ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ ์๊ฐ์ ํด๋น ํ์ด์ง๋ ์ด๋ฏธ ์ฝ๋๋ฅผ ๋ถ๋ฌ์จ ์ํ์ด๋ ์ ์ํ ํ์ด์ง ์ด๋์ ๊ฒฝํํ ์ ์๋ค.
์ ๋ฆฌํ์๋ฉด,
์ ํต์ ์ธ ์๋ฒ ๋ ๋๋ง
- ์ฅ์ : SEO
- ๋จ์ : ์ํ ์ ์ง ๋ถ๊ฐ(์ ์ฒด ํ์ด์ง ๋ก๋) ์๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ SPA
- ์ฅ์ : ์ํ ์ ์ง, ๋น ๋ฅธ ํ์ด์ง ์ด๋
- ๋จ์ : ์ด๊ธฐ ๋ก๋ฉ, SEO๋ถ๋ฆฌ
์ด ๋์ ์ฅ์ ๋ง์ ๋ชจ์ ๋ฐฉ๋ฒ์ด๋ค.
- prefetching : ๋น ๋ฅธ ํ์ด์ง ์ด๋
- code-splitting : ๋น ๋ฅธ ์ด๊ธฐ ๋ก๋ฉ
- Next.js์ ๊ณ ์ ๊ธฐ๋ฅ์ ์๋๊ณ ๋ฆฌ์กํธ์ ๋ฒ๋ค๋ฌ(Webpack, Turbopack)์ ๊ธฐ๋ฅ์ด๋ผ๊ณ .
- ์๋ฒ ๋ ๋๋ง : SEO์ ์ ๋ฆฌ
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์์ ์ด๋ : ์ํ ์ ์ง
์คํธ๋ฆฌ๋ฐ streaming ์ด๋ผ๋ ๊ธฐ๋ฅ๋ Next.js์ ๋ค๋น๊ฒ์ด์ ๊ฒฝํ ํฅ์์ ๊ธฐ์ฌ๋ฅผ ํ๋ ์ค์ํ ๊ธฐ๋ฅ์ด์ง๋ง ์ด๊ฒ์ ๋ํด์๋ ๋์ค์ ๋ฐ์ดํฐ ํจ์นญ ๋ถ๋ฌธ์์ ๋ค๋ฃฌ๋ค.
6. Setting Up Your Database
7. Fetching Data
๋ฐ์ดํฐ ํจ์นญ, ์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋์๋ ๋ค์๊ณผ ๊ฐ์ ๊ณ ๋ ค ์ฌํญ๋ค์ด ์๋ค.
- API ๋ ์ด์ด (route handler) ๋งํฌ
- Database ์ฟผ๋ฆฌ
- ์๋ฒ ์ปดํฌ๋ํธ
- SQL
API ๋ ์ด์ด
ํด๋ผ์ด์ธํธ ์ธก์์ ๋ฐ๋ก DB์ ์ ๊ทผํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋๊ฑด ๋ณด์์ ๋ฌธ์ ๊ฐ ์์ ์ ์๋ค.
- DB ์ฐ๊ฒฐ ์ ๋ณด (api key, ๋น๋ฐ๋ฒํธ ๋ฑ) ๋ ธ์ถ
- SQL injection ๊ณต๊ฒฉ์ ์ทจ์ฝ
๊ทธ๋์ ์ ํต์ ์ผ๋ก ์ค๊ฐ์ ๋ฐฑ์๋ ์๋ฒ๊ฐ ํด์์ด์ธํธ์ ์์ฒญ์ ๊ฒ์ฆํ๊ณ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค๋ค.
Next.js๋ ํ์คํ
ํ๋ ์์ํฌ๋ค. Node.js ๋ฐํ์์์ ์คํ๋๋ ์๋ฒ์์ ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
fetch("/dir1/dir2",{...})๋ผ๊ณ ํด๋ผ์ด์ธํธ์์ ์์ฒญํ๋ค๋ฉด app/dir1/dir2/route.tsํ์ผ์ ์์ฑํด๋๋ค.
spring boot์์ ์ปจํธ๋กค๋ฌ๋ผ๊ณ ๋ถ๋ ๋ ์ด ๋ชจ๋์ Next.js์์๋ route handler๋ผ๊ณ ๋ถ๋ฅธ๋ค.
spring boot๋ MVC ํจํด์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๋๋ก ๋์ด์์ง๋ง, Next.js๋ ๋ฐ๋์ ๊ทธ๋ด ํ์๋ ์๋ค.