์ด์ ๊น์ง ์ ๋ CSR ๋ฐฉ์์ผ๋ก๋ง ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ, ๋ถ์กฑํ SEO๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ์ฌ๋ฌ ์๋๋ฅผ ํด์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋๋ฏธ ํ์ด์ง๋ฅผ ๋ง๋ค์ด ๊ฒ์์์ง์ ๋ ธ์ถ๋๋๋ก ์ ๋ํ ๋ค, ์ค์ ์ฝํ ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ ๋ฐฉ์์ผ๋ก ์ฐํ์ ์ธ SEO ์ต์ ํ๋ฅผ ์๋ํ๊ธฐ๋ ํ์ต๋๋ค.
ํ์ง๋ง ์๊ฐ์ด ์ง๋ ์๋ก ํ๋ก์ ํธ์ ๋ด๊ธฐ๋ ๊ฒฝํ ๊ธ๊ณผ ์ฝํ ์ธ ์์ด ๋์ด๋ฌ๊ณ , ๋๋ถ๋ถ์ ๊ธ์ Notion์ ์์ฑํ ๋ค ์ด๋ฅผ ๋์ ์ผ๋ก ๋ถ๋ฌ์ค๋ ๊ตฌ์กฐ๋ก ๋ฐ์ ํ์ต๋๋ค. ์ด๋ก ์ธํด ๊ธฐ์กด์ CSR ๋ฐฉ์๋ง์ผ๋ก๋ ํ๊ณ๊ฐ ๋ช ํํ๊ณ , ์ ๊ธ์ด ์กฐ๊ธ ๋ ๊ฒ์์์ง์ ๋ ธ์ถ ๋ ์ ์๊ฒ ํ๋๋ฐ์ ์๊ตฌ๊ฐ ์ปค์ ธ๊ฐ์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํด ์ ํํ ๊ฒ์ด ๋ฐ๋ก Next.js์์ต๋๋ค. Next๋ ํ๋ ์ ์ํฌ๋ผ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ผ๋ก ์ฌ์ ๋ ๋๋ง(SSG)ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ, ์ฝํ ์ธ ๊ฐ ๊ฒ์์์ง์ ์ ๋ ธ์ถ๋๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์ด์ ์๋ page router ๊ธฐ๋ฐ์์ getStaticProps, getStaticPaths๋ฅผ ์ฌ์ฉํ์ง๋ง, app router ๊ตฌ์กฐ์์๋ ์ด๋ฅผ ๋์ ํด generateStaticParams()
๋ฅผ ํ์ฉํ์ฌ ์ ์ ํ์ด์ง๋ฅผ ์์ฑํ๊ณ ์์ต๋๋ค.
๋ํ, ๊ณผ๊ฑฐ์๋ sitemap ์์ฑ์ ์ํด next-sitemap ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ต๊ทผ์๋ Next.js ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ generateSitemaps()
๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ด ํจ์ฌ ๊ฐ๋จํ๊ฒ SEO ์ค์ ์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋์์ต๋๋ค.
๐ generateSitemaps()๋ Next.js 14๋ถํฐ ์ ์ ๋์ ๋์์ผ๋ฉฐ, app ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์์ metadata API์ ํจ๊ป ์๋ํด ๋ณ๋ ์ค์ ์์ด ์๋์ผ๋ก sitemap.xml์ ์์ฑํด์ค๋๋ค.
ModalStyle.Nav = ModalTopNav;
ModalStyle.Content = ModalContent;
export default ModalStyle;
<ModalProvider>
<ModalStyle>
<ModalStyle.Nav>{text}</ModalStyle.Nav>
{children}
</ModalStyle>
</ModalProvider>
์ด๋ฒ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์์ ์คํ์ผ๋ง ๋ฐฉ์๊ณผ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ฐฉ์๋ ์ต๊ทผ ํธ๋ ๋์ ๋ง์ถฐ ์ ์ง์ ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์์ต๋๋ค.
์คํ์ผ๋ง: styled-components โ SCSS
์ํ ๊ด๋ฆฌ: atom ๊ธฐ๋ฐ โ Redux Toolkit
๐ styled-components โ SCSS styled-components๋ ํ๋ ๋งค์ฐ ์ธ๊ธฐ ์์์ง๋ง, ์ต๊ทผ์๋ CSS Modules, SCSS, Tailwind CSS ๋ฑ ๋ ๊ฐ๋ณ๊ณ ๋จ์ํ ์คํ์ผ๋ง ๋ฐฉ์๋ค์ด ์ฃผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ํนํ Next.js์์๋ ๋ณ๋ค๋ฅธ ์ค์ ์์ด SCSS๋ฅผ ์ฌ์ฉํ ์ ์์ด ๋ง์ด๊ทธ๋ ์ด์ ์ด ๊ฐํธํ๊ณ , ๊ฐ์ธ์ ์ผ๋ก๋ SCSS๊ฐ ๋ ์ต์ํ๊ณ ๋น ๋ฅด๊ฒ ์์ ํ ์ ์์ด ์ ํ์ ๊ฒฐ์ ํ์ต๋๋ค.
๐ atom โ Redux Toolkit atom์ ์ด๊ธฐ์๋ ์ฌ์ฉ ํ์ง๋ง, ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํต์ฌ ๊ฐ๋ฐํ์ด ํด์ฒด๋์๊ณ ์ด๋ฒ ๋ฆฌํฉํ ๋ง์์๋ Redux Toolkit์ ํ ๋ฒ ์ ์์ผ๋ก ๋ค์ ์จ๋ณด๋ฉฐ ๊ตฌ์กฐ์ ์ผ๋ก ์ ๋ฆฌํ๊ณ ์ ํ์ต๋๋ค.
(2024/01/18) Vite ์ถ๊ฐ
export default defineConfig({
plugins: [react(), tsconfigPaths()],
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('node_modules/@react-spring')) {
return 'react-spring';
}
if(id.includes('node_modules/date-fns')){
return 'date-fns'
}
if(id.includes('node_modules/react-notion')){
return 'react-notion'
}
}
},
},
}
(2023/11/16) ๊ฒ์๊ธฐ๋ฅ ์ถ๊ฐ
๋งค๋ฒ ํํ์ด์ง๋ฅผ ๊ด๋ฆฌํ๊ธฐ์ ๋ถ๋ด์ ๋๊ผ์ต๋๋ค. ๋ ธ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค api ํ์ฉํ๊ธฐ๋ก ํ์์ต๋๋ค. Node.js + koyeb๋ก ๋ฐฐํฌ
Swagger UI ((https://developed-heath-mr-chu.koyeb.app/api-docs/)
(2023/06/03) ๋ทํ๋ฆฌํ์ด ๋ฐฐํฌ๋ก ๋ณ๊ฒฝ, ๋ค์ด๋ฒ ์ฌ์ดํธ๋งต ์ถ๊ฐ
(2022/10/20)
1. ์ทจ์งํ SEO๊ฐ ๋๋ฌด ์ค์ํ๋ค ์๊ฐํ์ฌ ๋ฆฌ์กํธ์ ๋ฌด์์ ๋ ํ ์ง ๊ณ ๋ฏผ์ค
2. react-snap ์ถ๊ฐ
3. ๊ตฌ๊ธ ์ฌ์ดํธ๋งต ์ถ๊ฐ
4. robots.txt ์ถ๊ฐ
(2022/05/28) react ํ์ฉ
(2021/09/25)