๐Ÿฆ‹

Hello (Again) World!

ํ™ˆ์„œ๋ฒ„๋ฅผ ๋‚ ๋ ค๋จน์–ด์„œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“  ์ด์•ผ๊ธฐ

๋ธ”๋กœ๊ทธ

๋˜ ๋‹ค์‹œ ๋งŒ๋“ค๊ฒŒ ๋œ ์ด์•ผ๊ธฐ

ํ™ˆ์„œ๋ฒ„์— ๋ธ”๋กœ๊ทธ์˜ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” Ghost CMS๊ฐ€ ๋ถ™์–ด์žˆ์—ˆ๋Š”๋ฐ, ํ™ˆ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ๋ผ๊ฐ€์„œ ๋ธ”๋กœ๊ทธ๋ฅผ ๋‚ ๋ ค๋จน์—ˆ๋‹ค. ๋ณต๊ตฌํ• ๋ ค๊ณ  ์‹œ๊ฐ„์„ ์“ฐ๊ธฐ์—๋Š” ํšŒ์‚ฌ ์—…๋ฌด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•˜์–ด์„œ, ํฌ๊ธฐํ–ˆ๋‹ค๊ฐ€ ์ตœ๊ทผ์— ๋‹ค์‹œ ํž˜์„ ๋‚ด์„œ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ณ ์ณค๋‹ค.

์ด์ฏค๋˜๋ฉด ๋ธ”๋กœ๊ทธ๋ฅผ ๋‹ค๋“ฌ๋Š”๊ฒƒ์„ ์—ฐ๋ก€ ํ–‰์‚ฌ์ฏค์œผ๋กœ ์‚ผ์•„์•ผํ•˜๋‚˜ ์‹ถ๊ธฐ๋„...

์ด๋ฒˆ์— ์‚ฌ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค

1. React Router + Vite

9๋ฒ„์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•ด์„œ ์ •๋“ค์—ˆ๋˜ NextJS๋ฅผ ๋ฒ„๋ฆฌ๊ณ , react-router๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ฃผ๋œ ์ด์œ ๋Š” ์ •์„์—์„œ ์กฐ๊ธˆ์ด๋ผ๋„ ๋ฒ—์–ด๋‚˜๋Š” ์‚ฌ์šฉ์„ ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์–ธ์ œ๋‚˜ ๊ณ ํ†ต์Šค๋Ÿฌ์› ๋˜ ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ํ•œ ๋ชซ์„ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

react-router๊ฐ€ v7 ๋ฒ„์ „์œผ๋กœ ์˜ฌ๋ผ์˜ค๋ฉด์„œ remix๋ฅผ ํก์ˆ˜ํ–ˆ๋Š”๋ฐ ์ด๋•Œ clientLoader ์™€ ๊ฐ™์€ ๋™์ž‘๋“ค์„ ์‰ฝ๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด์„œ ์ตœ๊ทผ์— ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์ปค์Šคํ…€๋„ ์ƒ๋Œ€์ ์œผ๋กœ ์ž์œ ๋กญ๊ณ , ๋”ฑํžˆ ๋ง‰ํžˆ๋Š”๊ฒƒ๋„ ์—†์–ด์„œ ๋งŒ์กฑํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ง„์ž‘์— Vite๋กœ ๋„˜์–ด์˜ฌ๊ป„.. ์ด๋ผ๋Š” ํ›„ํšŒ๊ฐ€ ์žˆ์ง€๋งŒ... ์ง€๊ธˆ์ด๋ผ๋„ ๋„˜์–ด๊ฐ”์œผ๋‹ˆ ๋œ๊ฑฐ๋‹ค.

2. MDX + react-router-mdx

์ •์  ๋งˆํฌ๋‹ค์šด ์ƒ์„ฑํ•˜๋‹ค๊ฐ€ CMS๋กœ ๋ฐ”๊ฟจ๋‹ค๊ฐ€ ๋งˆํฌ๋‹ค์šด์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“ค๋‹ค๊ฐ€ ์ƒ์„ฑํ•˜๋Š”๊ฑธ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋‹ˆ ๊ทธ๋ƒฅ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ๋‚ซ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ๋‹ค. DB๋ฅผ ๋‚ ๋ ค๋จน์œผ๋ฉด ์ง€๊ธˆ๊นŒ์ง€ ๊ณ ์ƒํ–ˆ๋˜๊ฒŒ ๋‹ค 0์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ์—, ์ด์ œ๋Š” ์ง„์งœ๋กœ ์•ˆ๋‚ ๋ ค๋จน๊ฒ ๋‹ค๋Š” ๋งˆ์Œ๊ฐ€์ง์œผ๋กœ Git์—๊ฒŒ ๋‚˜์˜ ๋ธ”๋กœ๊ทธ ๊ธ€ ๊ด€๋ฆฌ๋ฅผ ๋งก๊ธฐ๊ธฐ๋กœ ํ–ˆ๋‹ค.

๊ทผ๋ฐ ๋งŒ๋“ค๋‹ค๋ณด๋‹ˆ mdx ํŒŒ์ผ์„ ์ •์  ๋ Œ๋”๋ง์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์˜ˆ์ œ๋Š” ์•„๋ฌด๋ž˜๋„ ๋ชป์ฐพ๊ฒ ์–ด์„œ, ํฌ๊ธฐํ•˜๊ณ  react-router-mdx๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๊ฑธ Vercel ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋‹ˆ๊นŒ MDX ํŒŒ์ผ์„ ๋ชป๋ถˆ๋Ÿฌ์˜ค๋Š” ์‚ฌ์†Œํ–ˆ์ง€๋งŒ ๋งค์šฐ ๊ฒฐ์ •์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด ์ž„์‹œ๋กœ ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํฌ๊ธฐํ•ด์•ผํ•œ๋‹ค๋Š” ์•„์ฃผ ๋ผˆ์•„ํ”ˆ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜๋ฅผ ๋ฐ˜๊ฒผ๋‹ค.

์ด๊ฑฐ ์“ฐ๋ฉด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ์Šค์ฝ”๋“œ ๋ณด๊ณ  ์žˆ๋Š”๋ฐ remark ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋” ๋ชป๋ถ™์ด๋Š”๊ฒƒ์„ ์•Œ์•„๋ƒˆ๋‹ค... ์ง„์งœ ๋‚ด์žฌํ™” ํ•ด์•ผ๊ฒ ๋‹ค...

3. Mantine UI

์†”์งํžˆ ์ธ์ •ํ• ๊ฑด ์ธ์ •ํ•ด์•ผ๊ฒ ๋‹ค. ๋‚˜๋Š” ๋””์ž์ธ์— ์žฌ๋Šฅ์ด ์—†๋‹ค. ๊ทธ๊ฒƒ๋„ ์•„์ฃผ ์ฒ˜์ฐธํ•˜๊ฒŒ ์—†๋‹ค.

๊ทธ๋ ‡๊ธฐ์— tailwind๋กœ ์ง์ ‘ ํผ๋ธ”๋ฆฌ์‹ฑ์„ ํ•˜๋Š”๊ฒƒ๋ณด๋‹ค ๊ทธ๋Ÿด์‹ธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š”๊ฒƒ์ด ๋‚ซ๊ฒ ๋‹ค๋Š” ํŒ๋‹จ์„ ํ–ˆ๊ณ , MantineUI๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ถ€์กฑํ•œ ๋‚˜์˜ ๋ฏธ๊ฐ์œผ๋กœ๋„ ๊ฝค๋‚˜ ๊ดœ์ฐฎ์€ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ๋„์›€์ด ํฌ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํŠธ์œ„ํ„ฐ(X) ์—์„œ ์–ธ์  ๊ฐ€ ๋ณด์•˜๋˜ ํ† ๋ง‰์ง€์‹์œผ๋กœ ๋ฐฐ๊ฒฝ์ƒ‰์€ #FAFAFA, ๊ธ€์ž์ƒ‰์€ #1A1A1A ๋กœ ์„ค์ •ํ•˜๋‹ˆ๊นŒ ๋”์šฑ ์˜ˆ๋ป์กŒ๋‹ค. (์•ผํ˜ธ)

4. SUIT + Tossface

Pretendard๋„ ๋ถ„๋ช… ๊น”๋”ํ•œ ํฐํŠธ์ง€๋งŒ, ๋‚˜๋Š” SUIT ํฐํŠธ๊ฐ€ ๋” ์ด์˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ž˜์„œ SUIT๋ฅผ ๋ธ”๋กœ๊ทธ์˜ ๋ฉ”์ธ ํฐํŠธ๋กœ ์‚ฌ์šฉํ–ˆ๊ณ , ์ด๋ชจ์ง€๋„ ๊ทธ๋ƒฅ ์“ฐ๊ธฐ์—๋Š” ๋ฐ‹๋ฐ‹ํ•ด์„œ Tossface๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ญ˜ ๋” ํ•ด์•ผํ• ๊นŒ

๋งจ๋‚  TODO๋กœ ํ•˜๊ฒ ๋‹ค๊ณ  ํ•ด๋†“๊ณ  ๋ธ”๋กœ๊ทธ๋ฅผ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ์ง€๋งŒ... ์ง„์งœ ์ด์ œ๋Š” ํ• ๋งŒํ•˜๋‹ค๊ณ  ์ƒ๊ฐ(์–ธ์ œ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ์Œ)ํ•ด์„œ ์ด๊ฒƒ์ €๊ฒƒ ๋ถ™์—ฌ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

  • react-router-mdx ์˜์กด์„ฑ ์ง€์šฐ๊ธฐ
    • remark-gfm ์ด๋ž‘ ์ด๊ฒƒ์ €๊ฒƒ ๋ถ™์ด๊ธฐ
    • SSR ๋‹ค์‹œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ (์•ˆ๋ ๊ฑฐ ๊ฐ™๊ธด ํ•œ๋ฐ...) -> ๊น”๋”ํ•˜๊ฒŒ ํฌ๊ธฐ
  • ๋Œ“๊ธ€ ๊ธฐ๋Šฅ
  • ๋ฐฉ๋ช…๋ก ๊ธฐ๋Šฅ
  • ๊ธ€/ํƒœ๊ทธ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
  • ๋ฉ”๋ชจ ์นดํ…Œ๊ณ ๋ฆฌ๋ž‘ ์ƒ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ž‘ ๋ถ„๋ฆฌํ•˜๊ธฐ
  • ์—์…‹ ๋ฒˆ๋“ค๋ง ๊ธฐ๋Šฅ

ํ• ๊ฑฐ ๊ฒ๋‚˜๊ฒŒ ๋งŽ๋„ค...