๊ฐœ๋ฐœ๋ณด๋‹ค ์„ธ๊ณ„๊ด€์ด ๋” ์ค‘์š”ํ–ˆ๋‹ค

Mr.Chu

๐Ÿ€ 2025๋…„ ์™œ Next.js๋ฅผ ๋„์ž…ํ–ˆ๋Š”๊ฐ€?

์ด์ „๊นŒ์ง€ ์ €๋Š” CSR ๋ฐฉ์‹์œผ๋กœ๋งŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, ๋ถ€์กฑํ•œ SEO๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์‹œ๋„๋ฅผ ํ•ด์™”์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๋”๋ฏธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ๊ฒ€์ƒ‰์—”์ง„์— ๋…ธ์ถœ๋˜๋„๋ก ์œ ๋„ํ•œ ๋’ค, ์‹ค์ œ ์ฝ˜ํ…์ธ  ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์šฐํšŒ์ ์ธ SEO ์ตœ์ ํ™”๋ฅผ ์‹œ๋„ํ•˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ํ”„๋กœ์ ํŠธ์— ๋‹ด๊ธฐ๋Š” ๊ฒฝํ—˜ ๊ธ€๊ณผ ์ฝ˜ํ…์ธ  ์–‘์ด ๋Š˜์–ด๋‚ฌ๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ๊ธ€์€ Notion์— ์ž‘์„ฑํ•œ ๋’ค ์ด๋ฅผ ๋™์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ตฌ์กฐ๋กœ ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ธฐ์กด์˜ CSR ๋ฐฉ์‹๋งŒ์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ๋ช…ํ™•ํ–ˆ๊ณ , ์ œ ๊ธ€์ด ์กฐ๊ธˆ ๋” ๊ฒ€์ƒ‰์—”์ง„์— ๋…ธ์ถœ ๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š”๋ฐ์— ์š•๊ตฌ๊ฐ€ ์ปค์ ธ๊ฐ”์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ Next.js์˜€์Šต๋‹ˆ๋‹ค. Next๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ๋ผ์„œ ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ ์œผ๋กœ ์‚ฌ์ „ ๋ Œ๋”๋ง(SSG)ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ, ์ฝ˜ํ…์ธ ๊ฐ€ ๊ฒ€์ƒ‰์—”์ง„์— ์ž˜ ๋…ธ์ถœ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Sitemap ์ƒ์„ฑ

์ด์ „์—๋Š” page router ๊ธฐ๋ฐ˜์—์„œ getStaticProps, getStaticPaths๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, app router ๊ตฌ์กฐ์—์„œ๋Š” ์ด๋ฅผ ๋Œ€์‹ ํ•ด generateStaticParams()๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ •์  ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ๊ณผ๊ฑฐ์—๋Š” sitemap ์ƒ์„ฑ์„ ์œ„ํ•ด next-sitemap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ตœ๊ทผ์—๋Š” Next.js ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” generateSitemaps() ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ SEO ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ“Œ generateSitemaps()๋Š” Next.js 14๋ถ€ํ„ฐ ์ •์‹ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, app ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์—์„œ metadata API์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ด ๋ณ„๋„ ์„ค์ • ์—†์ด ์ž๋™์œผ๋กœ sitemap.xml์„ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.
notion image
ย 
ย 
ย 

โœ… ํ•ฉ์„ฑ ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด ๋„์ž…

  • ์ตœ๊ทผ์— ์•Œ๊ฒŒ ๋œ ํ•ฉ์„ฑ ์ปดํฌ๋„ŒํŠธ(Compound Components) ํŒจํ„ด์ด ๊ตฌ์กฐ์ ์œผ๋กœ ๊น”๋”ํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ๋†’์•„ ๋ณด์—ฌ ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‹œ๋„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
    ย 

    โœ… ์Šคํƒ€์ผ๋ง & ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ์‹ ๋ณ€๊ฒฝ์˜ ์ด์œ 

    ์ด๋ฒˆ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ์Šคํƒ€์ผ๋ง ๋ฐฉ์‹๊ณผ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ์‹๋„ ์ตœ๊ทผ ํŠธ๋ Œ๋“œ์— ๋งž์ถฐ ์ ์ง„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
    ์Šคํƒ€์ผ๋ง: 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์„ ํ•œ ๋ฒˆ ์ •์‹์œผ๋กœ ๋‹ค์‹œ ์จ๋ณด๋ฉฐ ๊ตฌ์กฐ์ ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ย 

    โœ… vite ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋ณ€๊ฒฝ

    (2024/01/18) Vite ์ถ”๊ฐ€

    โœ… Notion API๋กœ ๋ณ€๊ฒฝ, ๋ฐฑ์—”๋“œ ๊ตฌ์ถ•

    (2023/11/16) ๊ฒ€์ƒ‰๊ธฐ๋Šฅ ์ถ”๊ฐ€
    ๋งค๋ฒˆ ํ™ˆํŽ˜์ด์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ๋ถ€๋‹ด์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ๋…ธ์…˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค api ํ™œ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Node.js + koyeb๋กœ ๋ฐฐํฌ
    ย 

    โœ… ๋„ทํ‹€๋ฆฌํŒŒ์ด ๋ฐฐํฌ๋กœ ๋ณ€๊ฒฝ

    (2023/06/03) ๋„ทํ‹€๋ฆฌํŒŒ์ด ๋ฐฐํฌ๋กœ ๋ณ€๊ฒฝ, ๋„ค์ด๋ฒ„ ์‚ฌ์ดํŠธ๋งต ์ถ”๊ฐ€
    ย 

    โœ… ํฌํŠธํด๋ฆฌ์˜ค ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€๊ฒฝ

    (2022/10/20)
    ย 

    โœ… ํฌํŠธํด๋ฆฌ์˜ค ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋ฆฌ์•กํŠธ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด๊ธฐ

    (2022/05/28) react ํ™œ์šฉ
    ย 

    โœ… ํฌํŠธํด๋ฆฌ์˜ค ํ™ˆํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

    (2021/09/25)
    • html/css/js๋กœ๋งŒ ๋งŒ๋“  ํฌํŠธํด๋ฆฌ์˜ค ํ™ˆํŽ˜์ด์ง€
    ย