Published on

๐Ÿ›  | ๊ฐœ์ธ ๊นƒํ—ˆ๋ธŒ ๋ธ”๋กœ๊ทธ/๊นƒ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœ ํ›„๊ธฐ

๊ฐœ์ธ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœ ํ›„๊ธฐ

๋ธ”๋กœ๊ทธ์™€ ํฌํŠธํด๋ฆฌ์˜ค๊นŒ์ง€ ํ•œ ๋ฒˆ์—!

Background

๋‚ด ๋ธ”๋กœ๊ทธ๊ฐ€ ๋„ˆ๋ฌด ์ง€๋ฃจํ•ด์ ธ๊ฐˆ ์ฐฐ๋‚˜์— 2์›” ์ดˆ์ค‘์ˆœ ๋‚ด๋‚ด ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
์‚ฌ์‹ค ์ด ๋ธ”๋กœ๊ทธ๊ฐ€ ์ฒ˜์Œ์€ ์•„๋‹ˆ๊ณ  Chirpy theme์œผ๋กœ ๋ธ”๋กœ๊ทธ ํ…Œ๋งˆ๋กœ ์ง€๋ƒˆ์—ˆ์—ˆ๋‹ค. ๋Œ€์ถฉ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ๊ฒผ์—ˆ๋‹ค.

์ด ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ๊ณผ Table์„ ํฌ์ŠคํŠธ๋งˆ๋‹ค ์ œ๊ณตํ•ด์ฃผ์–ด์„œ ์ง๊ด€์ ์ด๊ณ  ๋‚˜๋ฆ„ ํ‹ฐ์Šคํ† ๋ฆฌ ๋ธ”๋กœ๊ทธ์ฒ˜๋Ÿผ ๊ฐ€๋…์„ฑ๋„ ํŽธํ•œ ํ…Œ๋งˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด ์ฝ”๋“œ๋ฅผ ๋œฏ์–ด๋ณด๋ ค๊ณ  ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์•Œ๊ฒ ์ง€๋งŒ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์‰ฝ์ง€ ์•Š๊ณ , ๋ฌด์—‡๋ณด๋‹ค ์Œฉ html๊ณผ js๋งŒ ์“ฐ๊ธฐ์—๋Š” ๋‚˜์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ๋ถˆํŽธํ–ˆ๋‹ค..ใ… ใ…  ์œ„์— ์ด๋ฏธ์ง€์—์„œ ๋ดค๋“ฏ ๊ณ ์ž‘ ๋‚ด๊ฐ€ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ž€ ๋ฐฐ๊ฒฝ ์‚ฌ์ง„๊ณผ ํฐํŠธ ์ด ์ •๋„์˜€๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ํ…Œ๋งˆ ๋’ค์ ธ๋ณด์•˜๋Š”๋ฐ๋„ jekyll ์ž์ฒด๊ฐ€ ๋ญ”๊ฐ€ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ธ”๋กœ๊ทธ ํ…Œ๋งˆ๋„ ์—†๊ณ ..hexo๋„ ์—†์–ด์„œ ์•„์˜ˆ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด๋ณด์ž๋Š” ์‹ฌ์ •์— ์—Ž๊ฒŒ ๋˜์—ˆ๋‹ค.

Preliminary

๋ธ”๋กœ๊ทธ๋Š” 1์ฐจ์ ์œผ๋กœ ์•„๋งˆ ์ž‘๋…„ 6์›” ๊ฒฝ์— ๋ฐ”๊ฟจ๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•œ๋‹ค. ๋‹น์‹œ ๋‚ด๊ฐ€ ์•„๋Š” ์›น ๊ธฐ์ˆ  ์Šคํƒ์€ Reactjs ๋ฐ–์— ์—†์—ˆ๊ณ , ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์šฐ๊ธฐ๋„ ๋‚ด๊ฐ€ ์›น/์•ฑ ๊ฐˆ ๊ฒƒ๋„ ์•„๋‹ˆ์—ฌ์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‚ด๊ฐ€ ๋ญ˜ํ•˜๊ธฐ์—๋Š” ๋ญํ•ด์„œ ์•„๋งˆ ๊ทธ ๋•Œ ๊ตฌ๊ธ€์ด๋ž‘ ๊นƒ์— github blog template ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฒ€์ƒ‰ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋ธ”๋กœ๊ทธ ํ…Œ๋งˆ ์„ ์ • ๊ธฐ์ค€์— ์žˆ์–ด์„œ ๋‚˜๋Š” ์•„๋ž˜๊ฐ€ ๊ผญ ๋งŒ์กฑ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ,

  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ง€์›
  • ํƒœ๊ทธ ๊ธฐ๋Šฅ
  • ๋ธ”๋กœ๊ทธ ์™ธ ๋‚ด ์†Œ๊ฐœ ํŽ˜์ด์ง€ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•œ..

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋งˆ์นจ๋‚ด ๋ˆˆ์— ๋“ค์–ด์˜จ ํ…Œ๋งˆ๊ฐ€ Tailwindcss Nextjs starter blog์˜€๋‹ค. Example์—์„œ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ž์œ ๋กญ๊ฒŒ ๊พธ๋ฏธ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๊ณ .. ๋งค๋ ฅ์ ์ธ ์Šคํƒ€ํ„ฐํŒฉ์ธ ๊ฒƒ ๊ฐ™์•„์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

Nextjs๋Š” ํฌ๊ฒŒ ๋ชฐ๋ผ๋„ ํ”„๋ก ํŠธ์—”๋“œ๋งŒ ์ž˜ ๋‹ค๋ค„์„œ ๋ธ”๋กœ๊ทธ ๊ตฌ์ƒ‰๋งŒ ๋งž์ถ”๊ฒŒ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. tailwindcss๋„ ๋ชจ๋ฅด๋‹ค๊ฐ€ ์ ์ฐจ ๋งŒ์ง€๋ฉด์„œ ์ฐจ์ฐจ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ ..

๊ทผ๋ฐ ๋ญ..ใ…‹ใ…‹ ๋ง๊ทธ๋Œ€๋กœ ๊ตฌ์ƒ‰๋งŒ ๋งž์ถ˜ ๊ฑฐ๋ผ ํ…Œ๋งˆํ•ด์„œ ์ƒ‰ ๋ฐ”๊พธ๊ณ  ์•ž์— ๋ฉ”์ธ ํŽ˜์ด์ง€๋งŒ ๋ฐ”๊ฟจ์—ˆ๋‹ค.
์ฒ˜์Œ์—๋Š” ์ด๊ฒƒ๋„ ๋ญ”๊ฐ€ ์ž˜ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์–ผ๋งˆ ์•ˆ๊ฐ€ ์†์ด ์•ˆ๊ฐ€๊ฒŒ ๋˜๋Š” ๋ธ”๋กœ๊ทธ๊ฐ€ ๋˜์–ด๋ฒ„๋ ธ๋‹ค..ใ… 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ์— ๋ฐ”๊พธ๋ฉด์„œ ํฌ๊ฒŒ ๋ฐ”๊พผ ๋ช‡๊ฐ€์ง€๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์•ž์— ๋ฉ”์ธ ํŽ˜์ด์ง€์— ๋‚˜์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ณด์™€ ๋ธ”๋กœ๊ทธ preview ์ •๋„
  • About: ๋‚˜์— ๋Œ€ํ•œ CV๋ฅผ ์›นํŽ˜์ด์ง€๋กœ,
  • Blog: ๋ธ”๋กœ๊ทธ์—๋Š” ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ์ฒ˜๋Ÿผ ํ”„๋กœํ•„์ด๋ž‘ ํƒœ๊ทธ๊ฐ€ ์žˆ์—ˆ์Œ ์ข‹๊ฒ ๋‹ค.

์ด ์ •๋„๊ฐ€ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๊ธฐ์ˆ ์Šคํƒ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค

  • React
  • TailwindCSS
  • Next JS

UI/UX Design

UX๋Š” Miro๋ผ๋Š” ์•ฑ์„ ํ†ตํ•ด์„œ ์‹œ๊ฐ„๋‚ ๋•Œ ํ‹ˆํ‹ˆ์ด ๊ณ ๋ฏผํ•ด์„œ ๋งŒ๋“ค์—ˆ๋‹ค.
Home ์นดํ…Œ๊ณ ๋ฆฌ๋งŒ ํ•„์š”ํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋””์ž์ธ ํ•ด์ฃผ์—ˆ๋‹ค.

์›๋ž˜๋Š” ๊นŒ๋งŒ๋ถ€๋ถ„์€ threejs๋ฅผ ์ด์šฉํ•ด์„œ ์žˆ๋˜ ๊ฑธ ๊ฐ€์ง€๊ณ  ์žฌ๋ฐŒ๊ฒŒ ํ’€์–ด๋ณผ๊นŒ ์‹ถ๋‹ค๊ฐ€.. ๋’ค์— ๋‚˜์˜ค๊ฒ ์ง€๋งŒ vercel์—์„œ ๊ณ„์† ํ„ฐ์ง€๊ณ  ํ•ด์„œ ๊ณ„ํš์„ ๋ฐ”๊ฟจ๋‹ค..ใ… ใ…  ์•„๋ž˜ ์‚ฌ์ดํŠธ ๋””์ž์ธ๋“ค์„ ํ•ฉํ•ด์„œ ๋‚ด ํ…Œ๋งˆ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„, ์ € ํ‹€์„ ํ† ๋Œ€๋กœ ์ˆ˜์ •ํ•ด๋‚˜๊ฐ”๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์ƒ‰ ํŒ”๋ ˆํŠธ๋Š” Tailwindcss์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” blue-500, indigo-500 ๋‘˜ ๋‹ค ์‚ฌ์šฉํ–ˆ๋‹ค. ์ข€ ์ผ๊ด€์„ฑ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์•„ ์ด๊ฑด ์ถ”ํ›„์— ์ˆ˜์ •ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

ํ”„๋กœํ•„์— ์‚ฌ์šฉํ•œ ์ด๋ฏธ์ง€ ์†Œ์Šค๋Š” ์•„์ดํŒจ๋“œ์—์„œ ์ œ์ž‘ํ•ด์„œ ๋‹ค์šด๋ฐ›์•˜๋‹ค.

Front End

์†”์งํžˆ.. ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์ข€ ์—‰๋ง์ด๋‹ค. ์ด repo๋Š”..ใ…‹ใ…‹ใ…‹ ๊ทธ๋ž˜์„œ ์ตœ๋Œ€ํ•œ ๊ฒฝ๋กœ ๊ผฌ์ด๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด ์‹๋Œ€๋กœ ๋จผ์ € ์ •๋ฆฌํ•ด๋†“์•˜๋‹ค. VS studio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฝ๋กœ๋„ ๋‹ค ์ž๋™์œผ๋กœ ์žฌ์„ค์ •ํ•ด์ฃผ๊ธด ํ•˜์ง€๋งŒ ๊ฒฝ๋กœ๋ฅผ ์•„์˜ˆ ๋ฐ•์•„๋ฒ„๋ฆฌ๋Š” ์ฝ”๋“œ ๋ช‡๊ฐœ๊ฐ€ ๊ผฌ์ผ๊นŒ๋ด ์ตœ์†Œํ•œ์œผ๋กœ ์ •๋ฆฌํ•˜์˜€๋‹ค.

1. Repository ๋‚ด ํŒŒ์ผ๋“ค ์„ค๋ช…

์ถ”ํ›„ ์ด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ž‘์—…ํ•˜์‹ค ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋น ๋ฅธ ์ •๋ฆฌ! ์ด ๋ถ€๋ถ„๋งŒ ๊ฑด๋“ค๋ฉด ๊ฑฐ์˜ ๋ธ”๋กœ๊ทธ ๋Œ€๋ถ€๋ถ„์„ ๊ฑด๋“  ๊ฒƒ๊ณผ ๋‹ค๋ฆ„์—†๋‹ค.

  • index.js: ํ™ˆ ํ™”๋ฉด
  • AuthorLayout.js: About ์นดํ…Œ๊ณ ๋ฆฌ, about.js์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, data > author > default.md ๋‚ด์šฉ์„ ์ตœ๋Œ€ํ•œ ๋ฐ˜์˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, AuthorLayout์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.
  • blog.js, ListLayout.js, PostLayout.js: ๋ธ”๋กœ๊ทธ ๋‚ด ์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ๋นผ์„œ Listlayout component๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์–ด์ค„ ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ์ถ”ํ›„ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜์˜€๋‹ค. PostLayout.js๋Š” ์ง€๊ธˆ ๋ณด๋Š” ํฌ์ŠคํŠธ์˜ ๋””์ž์ธ์ด๋‹ค! ๋‚˜์˜ ๊ฒฝ์šฐ Sticky TOC๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
  • [tag].js: Nextjs ํŠน์„ฑ์ƒ route ๊ตฌ์กฐ = ํŒŒ์ผ ๊ตฌ์กฐ, ์ด๋Ÿฐ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ, blog์—์„œ ๋”ฐ๋กœ ๋บ€ component๋ฅผ [tag].js์— ์ ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

๊ฐœ์ธ์ •๋ณด ๋ณ€๊ฒฝ์€ data > author > default.md ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๊ณ  ์ถ”ํ›„ ํฌ์ŠคํŠธ๋ฅผ ์“ธ ๋•Œ๋Š” data ํด๋” ์•ˆ์— ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค. ๋งˆํฌ๋‹ค์šด ํ—ค๋”์˜ ๊ฒฝ์šฐ, ๊ณต์‹ repo์—์„œ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค!

2. Threejs ์ ์šฉ ์‹คํŒจ? Why?

์•„๋ž˜๋Š” ๋ฉ”์ธ ํŽ˜์ด์ง€์— ๊ฑธ๋ ค๊ณ  ํ–ˆ๋˜ ์—์…‹์ธ๋ฐ

๋กœ์ปฌ์—์„œ๋Š” ๊ต‰์žฅํžˆ ์ž˜๋˜๋Š” ๋ชจ์Šต์ด์ง€๋งŒ, vercel์— ์˜ฎ๊ฒผ์„ ๋•Œ๋Š” ์•ˆ๋˜๋Š”..๊ทธ๋Ÿฐ ๋Œ€์ฐธ์‚ฌ ์•„๋‹Œ ๋Œ€์ฐธ์‚ฌ๊ฐ€ ์—†์—ˆ๋‹ค..ใ… ใ…  ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ๊ณ„ํš์„ ํ‹€๋ฉด์„œ ์—Ž์–ด์กŒ์ง€๋งŒ.. ์™œ ์•ˆ๋˜์—ˆ๋Š”์ง€๋Š” ๋‚˜๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค..

ํ˜น์‹œ๋‚˜ ์ด ํฌ์ŠคํŒ…์„ ๋ณด์‹œ๋Š”๋ฐ tailwind-nextjs ์Šคํƒ€ํ„ฐ ํ…œํ”Œ๋ฆฟ์— ์ ์šฉํ•˜์‹œ๋‹ค๊ฐ€ threejs๋ฅผ ์ ์šฉํ•˜์‹œ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด..

์ด๋ ‡๊ฒŒ ์ค€๋น„ํ•ด์ฃผ์‹ฌ ๋  ๊ฒƒ ๊ฐ™๋‹ค. gltf ํŒŒ์ผ ์˜ฌ๋ฆฌ๋Š” ๊ฑฐ ์™ธ์— threejs ์“ฐ์ž„์ƒˆ๋Š” ๋ฌด๊ถ๋ฌด์ง„ํ•ด์„œ, ๊ณต์‹์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ๋„ ๊ถŒํ•จ! ๊ตญ๋‚ด์—์„œ๋Š” ์•„์ง ์ž˜ ์•ˆ์“ฐ์ง€๋งŒ ์™ธ๊ตญ์—์„œ๋Š” ํ™œ๋ฐœํžˆ ์“ฐ๊ณ  ์žˆ๋Š” ์ถ”์„ธ๋ผ example ์‚ฌ์ดํŠธ๊ฐ€ ๋งŽ๋‹ค.. ๋‚˜์˜ค์ง€๋Š” ๊ฝค๋‚˜ ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ง€๋งŒ ๊ธฐ์ˆ  ์Šคํƒ ์ถ”๊ฐ€ํ•˜๊ธฐ์— ๋งค๋ ฅ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

3. React awesome button๊ณผ nextjs์™€ ์ถฉ๋Œ

์™œ ๊ทธ๋Ÿฐ์ง€๋Š” ์ด๊ฒƒ๋„ ์ž˜์€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ..ใ…  React 18์—์„œ๋Š” transition์ด defined ๋˜์ง€ ์•Š๋‹ค๊ณ  ๊ณ„์† vercel์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋Š”๋ฐ, react 18์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ useTransition ํ•จ์ˆ˜ ๋•Œ๋ฌธ์ด์ง€ ์•Š์„๊นŒ ์ถ”์ธกํ•œ๋‹ค.. react 17๋กœ ๋‚ด๋ ธ์œผ๋‚˜ ๊ฐ€๋ง์ด ์—†์–ด์„œ ์ด๊ฑด tailwindcss๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋‹ค.

Dark ๋ชจ๋“œ์—์„œ๋Š” ์ข€ ๋ชป์ƒ๊ธฐ๊ฒŒ ๋‚˜์˜ค์ง€๋งŒ ๋‚˜๋ฆ„ ๊ตฌํ˜„์„ ์ž˜ํ–ˆ๋‹ค๊ณ ๋Š” ์ƒ๊ฐํ•œ๋‹ค ใ…Žใ…Ž

Back End

Nextjs ์„ค๋ช… ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ๊ฒƒ๋“ค:

์š”์•ฝํ•˜๋ฉด, react-router-dom ๋ณด๋‹ค๋Š” ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค!
ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ ์ „์ฒด๊ฐ€ ์ƒˆ๋กœ์ฝ”์นจ์ด ๋˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๋ถ€ํ•˜๋ฅผ ์ข€ ์ค„์ด๊ณ ์ž ๋ธ”๋กœ๊ทธ ListLayout.js์—์„œ ์–ด์ฐจํ”ผ ์ „์ฒด ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€๋ฅผ ์ดˆ๊ธฐ ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ [page].js ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ sliceํ•œ index ์ •๋ณด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ useState๋กœ ์ƒํƒœ ๊ด€๋ฆฌํ•˜์˜€๋‹ค. [tag].js ๋Š” ์–ด์ฉ” ์ˆ˜ ์—†์ด ํ˜ธ์ถœ๋˜๋Š” ์ง€๋ผ ์ด๊ฑด ํฌ๊ฒŒ ๊ฑด๋“ค์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

Nextjs ํŠน์„ฑ์ƒ ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ๋žœ๋”๋ง์„ ํ•˜๋ฏ€๋กœ ๋ณ„๋„์˜ Loading ํŽ˜์ด์ง€๋Š” ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ timeout์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

GISCUS ์—ฐ๊ฒฐํ•˜๊ธฐ

giscus ์—ฐ๊ฒฐ์€ ํ•˜๋ผ๋Š”๋Œ€๋กœ ํ•˜๋ฉด ๋œ๋‹ค. discussion category ํ•˜๋‚˜ ์ƒˆ๋กœ ํŒ” ๋•Œ Q&A ์˜ต์…˜์ธ์ง€ ํ™•์ธํ•˜๊ณ , ์•„๋ž˜ ์ƒ์„ฑ๋œ <script> ์— ๋‚˜์˜จ ์ •๋ณด๋ฅผ ํด๋” ๋‚ด .env.example ์— ๋ณต๋ถ™ํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ .example์„ ์ง€์›Œ์ฃผ๋ฉด ์ž˜ ์—ฐ๊ฒฐ๋œ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

vercel์— ์˜ฌ๋ฆด ๋•Œ๋Š” Setting > Project Setting > Environment Variables ์—์„œ .env import ํ•˜๊ณ  production, develop, preview ๋ชจ๋‘ ์ฒดํฌํ•˜๊ณ  ๋!

Wrap up | Conclusion

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์™„๋ฒฝํ•˜๊ฒŒ๋Š” ์™„์„ฑํ•˜์ง„ ์•Š์•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์–ด๋””๊ฐ€์„œ ๋‚˜ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ์ด๋‹ค!๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋‚˜๋งŒ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ถ”ํ›„ ํฌํŠธํด๋ฆฌ์˜ค๋„ ์ •๋ฆฌํ•ด์„œ ์—ฌ๊ธฐ์— ์—…๋ฐ์ดํŠธํ•  ๋“ฏ ์‹ถ๋‹ค. ์•„์‰ฝ๊ฒŒ๋„ awesome button ๋„ฃ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, ๋ญ๊ฐ€ ๋ฌธ์ œ์ธ์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ.. ์•„๋ฌด๋ฆฌ ๊ฒ€์ƒ‰ํ•ด๋„ ์•ˆ๋‚˜์™€์„œ ํฌ๊ธฐํ–ˆ๋‹ค. ๋‹คํฌ ๋ชจ๋“œ๋Š” ๊ณง ์—…๋ฐ์ดํŠธ๋  ๊ฒƒ ๊ฐ™๊ณ , ์ถ”ํ›„ ์‹คํŒจํ–ˆ๋˜ three.js๋ฅผ ๋‚ด ์—ฐ๊ตฌ๋ž‘ ์—ฐ๊ฒฐ์„ ํ•ด์„œ ์˜ฌ๋ฆด ๊ฒƒ ๊ฐ™๋‹ค. ์ข€ ๋” ์žฌ๋ฐŒ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ ๋•Œ ๊ฐ€์„œ ๋ณผ ๋“ฏ ์‹ถ๋‹ค. ์•„๋ฌดํŠผ ์ด๋ฒˆ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ ๋Œ๋ฆด ๋™์•ˆ ๊ณต๋ถ€ํ•œ ์›น๊ณต๋ถ€๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ž˜ ํ™œ์šฉํ•œ ๊ฒƒ ๊ฐ™์•„ ๋ฟŒ๋“ฏํ•˜๋‹ค.

  • ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์„ ํ•˜์˜€๊ณ  ์ ์šฉํ•ด๋ณด์•˜๋‹ค.
  • ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด Componentํ™”ํ•˜๊ณ  ํŒŒ์ผ ๊ตฌ์กฐ๋„ ์žฌ์ •๋ฆฝํ•ด๋ณด์•˜๋‹ค.
  • tailwindcss ์‚ฌ์šฉํ•œ์ง€ 1๋…„์ฐจ๋กœ์„œ ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ๋ฌธ์ œ๊ฐ€ ์—†์„ ์ •๋„๋กœ ์„ฑ์žฅ!
  • React 3๋…„์ฐจ๋กœ์„œ ํด๋ก ์ฝ”๋”ฉ movie app ํ•ด๋งค๋ฉด์„œ ๋งŒ๋“ค๋˜๊ฒŒ ์—Š๊ทธ์ œ ๊ฐ™์€๋ฐ, ๋‚จ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•˜๊ณ  ๋‚ด ๊ฒƒ์œผ๋กœ ๋‹ค์‹œ ์ฝ”๋”ฉํ•˜๋Š” ์‹ค๋ ฅ์œผ๋กœ ์„ฑ์žฅํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
  • Nextjs์— ๋Œ€ํ•ด ์ƒˆ๋กœ ์•Œ์•„๊ฐ€๊ณ  ๋งŽ์€ ๊ณต๋ถ€๊ฐ€ ๋˜์—ˆ๋‹ค. ์ •์  ์‚ฌ์ดํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ๋‹จ์ ์ด์ง€๋งŒ, ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ์‚ด๋ ค์„œ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ ํ™œ์šฉํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

๋‹ค์Œ ๊ณต๋ถ€๋Š” Flutter๊ฐ€ ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๊ฐœ๋ฐœ ํ›„๊ธฐ ๋~!

Authors