Portfolio Website Development ๐๏ธ - Part 4
ํฌํธํด๋ฆฌ์ค ์น์ฌ์ดํธ๋ฅผ ๋จ์ผ ํ์ด์ง ๊ตฌ์กฐ์์ Next.js 15 App Router ๊ธฐ๋ฐ ๋ฉํฐ ๋ผ์ฐํธ ๊ตฌ์กฐ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํด SEO ๋ฐ ์ฝํ ์ธ ๊ด๋ฆฌ ์ฒด๊ณ ๊ฐ์
AI ์์ฝ
Context
์ด๊ธฐ ํฌํธํด๋ฆฌ์ค๋ ๋จ์ผ ํ์ด์ง ์คํฌ๋กค ๊ตฌ์กฐ๋ก ์ค๊ณ๋์ด ์ต์ปค ๋ค๋น๊ฒ์ด์ ์ ํตํด ์ ๊ทผํ์ผ๋, ๋ธ๋ก๊ทธ์ ๋ง์ธ๋ ๋๊ฒ ์ ์ฆ๊ฐ์ ๋ฐ๋ผ ๊ฐ ์ฝํ ์ธ ๋ณ ๊ณ ์ URL, ํ๊ทธ ํ์ด์ง, ์๋ฆฌ์ฆ ํ์ด์ง ๋ฑ์ ์ง์ํด์ผ ํ๋ ์๊ตฌ์ฌํญ์ด ๋ฐ์ํ๋ค. ๋ํ Hashnode ์ธ๋ถ API์ ์์กดํ ์ฝํ ์ธ ๊ด๋ฆฌ๋ ๋๋ฉ์ธ ๋ด ์ฝํ ์ธ ๊ทธ๋ํ ๊ตฌ์ถ๊ณผ SEO ์ต์ ํ๋ฅผ ์ ํดํ๋ค.
Technical Solution
- Next.js 15 App Router ๋์ : ๊ธฐ์กด ๋จ์ผ ํ์ด์ง(src/index) ๊ตฌ์กฐ๋ฅผ /blogs, /blogs/[slug], /mindNuggets/[slug], /mentorship, /sideProjects ๋ฑ ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ผ๋ก ์ ํ
- MDX ํ์ผ ๊ธฐ๋ฐ ์ฝํ ์ธ ๊ด๋ฆฌ: ๋ธ๋ก๊ทธ ํฌ์คํธ์ ๋ง์ธ๋ ๋๊ฒ์ src/content/ ๋๋ ํ ๋ฆฌ์ .mdx ํ์ผ๋ก ํธ์คํ ํ๊ณ frontmatter๋ก ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ
- Velite ๋์ : frontmatter ๊ฒ์ฆ, rehype-pretty-code๋ฅผ ํตํ ๊ตฌ๋ฌธ ๊ฐ์กฐ, ํ์ ์์ ์ฑ์ ์ํ .velite/ ์์ฑ ๋ฐ #content ๋ณ์นญ์ ํตํ ์ํฌํธ
- SEO ์ฐ์ ๊ตฌํ: sitemap.ts, robots.ts, feed.xml(RSS/Atom), ๋์ ๋ผ์ฐํธ ๋ณ generateMetadata(OG, Twitter cards), JSON-LD(Person/WebSite/BlogPosting ์คํค๋ง) ์ ์ฉ
- ๋๋ํํธ ๊ด๋ฆฌ: frontmatter ํ๋๊ทธ๋ก ๋ฐํ ์ํ ์ ์ดํด ๋ฏธ๋ฐํ ํฌ์คํธ๋ฅผ sitemap๊ณผ RSS์์ ์๋ ์ ์ธ
Impact
์ํฐํด์๋ ์ ๋์ ์ฑ๊ณผ ์์น๊ฐ ์์.
Key Takeaway
ํฌํธํด๋ฆฌ์ค๋ ๊ฐ์ธ ๋๋ฉ์ธ ๊ธฐ๋ฐ ์ฝํ ์ธ ํ๋ซํผ์ ๊ตฌ์ถํ ๋ ์ด๊ธฐ ๋จ๊ณ์์๋ถํฐ ๊ณ ์ URL ์ ๋ต, ์ฝํ ์ธ ์ ์ฅ์ ์์น(์ธ๋ถ API vs ์์ฒด ํธ์คํ ), SEO ์ธํ๋ผ(sitemap, ์คํค๋ง ๋งํฌ์ )๋ฅผ ํจ๊ป ์ค๊ณํ๋ฉด ๋์ค์ ๋๊ท๋ชจ ๋ง์ด๊ทธ๋ ์ด์ ์์ด ํ์ฅ ๊ฐ๋ฅํ ์ฒด๊ณ๋ฅผ ํ๋ณดํ ์ ์๋ค.
์ค์ฒ ํฌ์ธํธ
Next.js ๊ธฐ๋ฐ ๋ธ๋ก๊ทธ๋ ํฌํธํด๋ฆฌ์ค๋ฅผ ๊ฐ๋ฐํ๋ ํ์์ ์ด๊ธฐ์ ์ธ๋ถ CMS๋ API์ ์์กดํ๊ธฐ ์ ์ MDX + Velite ์กฐํฉ์ผ๋ก ๋ก์ปฌ ์ฝํ ์ธ ์ ์ฅ์๋ฅผ ๊ตฌ์ถํ๊ณ , sitemap.ts์ generateMetadata๋ฅผ ํจ๊ป ๊ตฌํํ๋ฉด ๋๋ฉ์ธ ์์ ๊ถ๊ณผ SEO ์ต์ ํ๋ฅผ ๋์์ ํ๋ณดํ ์ ์๋ค.