Skip to content

๐Ÿšฉ FE ๊ธฐ์ˆ  ์„ ํƒ์ด์œ 

baegyeong edited this page Nov 29, 2024 · 2 revisions
๋ถ„์•ผ ์ž‘์„ฑ์ž ์ž‘์„ฑ์ผ
FE ์กฐ๋ฐฐ๊ฒฝ 24๋…„ 11์›” 06์ผ

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜

  • ๋ฆฌ์•กํŠธ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐ๋ฆฝํ•˜์—ฌ UI๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์œ ์—ฐํ•œ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ์ฑ…์ž„๊ณผ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด ์ฝ”๋“œ ๊ด€๋ฆฌ์™€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•˜๋‹ค.
  • ์ด๋Ÿฌํ•œ ์žฅ์ ์„ ์‚ด๋ ค์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๊ฒŒ ์„ค๊ณ„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

SPA(Single Page Application)

  • ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ํ•œ ํŽ˜์ด์ง€์—์„œ ๋งŽ์€ ๋™์ž‘์ด ์ด๋ค„์ง€๋Š”, ๋Œ€์‹œ๋ณด๋“œ ํ˜•ํƒœ๊ฐ€ ๋งŽ๋‹ค.
  • SPA๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌ๋ฐ›์•„ ํŽ˜์ด์ง€๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ธํ„ฐ๋ ‰์…˜์— ๋Œ€ํ•œ ๋ฐ˜์‘์ด ์ข‹๋‹ค. ๋”ฐ๋ผ์„œ ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ์„ ์œ„ํ•ด, SPA ๋ฐฉ์‹์ด ํ•„์š”ํ•˜๋‹ค.

Next.js๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์€ ์ด์œ 

  • Next.js์˜ ์žฅ์ ์ธ SSR ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ์šฐ์„  ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„์™€ ์žฌ์‚ฌ์šฉ์— ์ง‘์ค‘ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

๋ฆฌ์•กํŠธ ๋นŒ๋“œ ๋„๊ตฌ

๊ธฐ์กด์˜ webpack, rollup๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ ๋„๊ตฌ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ์„ค์ • ๋•Œ๋ฌธ์— ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฒˆ๋“ค๋ง์ด๋ž€?

  • ๋นŒ๋“œ๊ณผ์ • ์ค‘ ํ•˜๋‚˜๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ javascript ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์ด๋‹ค.
  • ๋ฒˆ๋“ค๋ง์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ์‹คํ–‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • webpack, rollup๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋กœ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์™œ ๋ฒˆ๋“ค๋ง ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผํ• ๊นŒ?

  • ์Šค์ฝ”ํ”„ ๋ฌธ์ œ
    • ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์ด ์žˆ์„ ๋•Œ, ๊ฐ ๋ชจ๋“ˆ์—์„œ ์ •์˜๋œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ๋ฒˆ๋“ค๋ง์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์น˜๋ฉด, ์ด ํŒŒ์ผ ๋‚ด์—์„œ ์Šค์ฝ”ํ”„๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”
    • ๋ฒˆ๋“ค๋ง์„ ํ†ตํ•ด HTTP ์š”์ฒญ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด, ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.

Vite์˜ ์žฅ์ 

  • ๊ธฐ์กด์˜ ๋ฒˆ๋“ค๋Ÿฌ ๋Œ€๋น„ 10-100๋ฐฐ ๋น ๋ฅธ ์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • Vite์˜ ์—ญํ• 
    • Dev Server: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ HMR ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์šฉ ์„œ๋ฒ„ ๊ธฐ๋Šฅ
    • Build: Production ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์†Œ์Šค์ฝ”๋“œ ๋ฒˆ๋“ค๋ง ๊ธฐ๋Šฅ
๊ธฐ์กด ๋ฒˆ๋“ค๋Ÿฌ ๊ธฐ๋ฐ˜ ๋„๊ตฌ์˜ ๋ฌธ์ œ vite
๋ชจ๋“ˆ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก, ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. rollup์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ, ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ตœ์ ํ™”๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ œ๊ณตํ•œ๋‹ค.
์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒŒ ๋˜๋ฉด ๋ฒˆ๋“ค๋ง ๊ณผ์ •์„ ๋‹ค์‹œ ๊ฑฐ์นœ๋‹ค. ์ˆ˜์ •๋œ ๋ชจ๋“ˆ๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„๋งŒ ๊ต์ฒดํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์š”์ฒญํ•˜๋ฉด ๊ต์ฒด๋œ ๋ชจ๋“ˆ์„ ์ „๋‹ฌํ•œ๋‹ค.

์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ CSS ํ”„๋ ˆ์ž„์›Œํฌ

  • tailwind์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ,
    • ํŽธ๋ฆฌํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ณ , html๊ณผ css์˜ ๋ถ„๋ฆฌ ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
    • ๋˜ํ•œ ์ผ๊ด€๋œ ๋””์ž์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋งค๋ฒˆ ํด๋ž˜์Šค๋ช…์„ ๊ณ ๋ฏผํ•  ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Utility-First

  • ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ž‘์€ ๋‹จ์œ„์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹

์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํŽธ๋ฆฌํ•œ ์ƒํƒœ ๊ด€๋ฆฌ

  • tanstack query๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํŒจ์นญ์„ ํ•˜๋ฉด, ๋กœ๋”ฉ ์ƒํƒœ, ์—๋Ÿฌ ์ƒํƒœ, ๋ฐ์ดํ„ฐ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ž๋™์œผ๋กœ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์˜ UX ๊ฒฝํ—˜์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

์บ์‹ฑ

  • ์ฟผ๋ฆฌํ‚ค๋ฅผ ํ†ตํ•œ ์บ์‹ฑ์„ ํ†ตํ•ด ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ค‘๋ณต ์š”์ฒญ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„ ์ƒํƒœ ๋™๊ธฐํ™”

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์™€ node.js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Promise ๊ธฐ๋ฐ˜ HTTP ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

fetch์—๋Š” ์—†๋Š” ์š”์ฒญ ํƒ€์ž„์•„์›ƒ, interceptor ๊ธฐ๋Šฅ, json ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์„ ํƒํ–ˆ๋‹ค.

fetch์™€ axios์˜ ๋น„๊ต

  • fetch๋Š” es6 ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, axios์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ http ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
fetch axios
์‘๋‹ต์„ json์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด .json()์„ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค. ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
interceptor ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์„ ๊ฐ€๋กœ์ฑ„์–ด ์ฒ˜๋ฆฌํ•˜๋Š” interceptor ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
ํƒ€์ž„์•„์›ƒ ๊ธฐ๋Šฅ์ด ์—†๋‹ค. ์š”์ฒญ ํƒ€์ž„์•„์›ƒ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด, ์ง€์ •๋œ ์‹œ๊ฐ„ ๋‚ด์— ์‘๋‹ต์ด ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ์š”์ฒญ์ด ์ทจ์†Œ๋œ๋‹ค.
๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ชจ๋“  ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์™€ node.js ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

React์—์„œ URL ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ , SPA์—์„œ ๋งค๋„๋Ÿฌ์šด ํŽ˜์ด์ง€ ์ „ํ™˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

SPA์—์„œ์˜ ๋ผ์šฐํŒ… ๊ด€๋ฆฌ

  • URL ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜์—ฌ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ค‘์ฒฉ ๋ผ์šฐํŠธ

  • ๋ถ€๋ชจ ๋ผ์šฐํŠธ๊ฐ€ ์ž์‹ ๋ผ์šฐํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด, ๋ณต์žกํ•œ UI ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

URL ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์ฟผ๋ฆฌ

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ URL์— ํฌํ•จ์‹œ์ผœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Tanstack Router๋ฅผ ์ฑ„ํƒํ•˜์ง€ ์•Š์€ ์ด์œ 

  • tanstack router์˜ ์žฅ์ ์œผ๋กœ ๊ผฝํžˆ๋Š” ํƒ€์ž… ์•ˆ์ •์„ฑ, ๋ผ์šฐํŒ… ๋ฐ์ดํ„ฐ ํŒจ์นญ์˜ ํ†ตํ•ฉ์ด ์ž˜ ์™€๋‹ฟ์ง€ ์•Š์•˜๋‹ค. ์ด๊ฒƒ์˜ ํ•„์š”์„ฑ์„ ๋Š๋ผ๊ฒŒ ๋  ๋•Œ์ฏค ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.
  • ๊ทธ ์™ธ์˜ ์ด์œ ๋กœ๋Š” react router๋ณด๋‹ค ์ž‘์€ ์ปค๋ฎค๋‹ˆํ‹ฐ, ์ฒ˜์Œ ์ ‘ํ•˜๋Š”๋งŒํผ ๊ฒช๊ฒŒ๋  ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์žˆ๋‹ค.

UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋„๊ตฌ

์ด๋ฒˆ ๋ฆฌ์•กํŠธ ์‚ฌ์šฉ์˜ ๋ชฉํ‘œ๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ์ธ๋ฐ, ์Šคํ† ๋ฆฌ๋ถ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜, ๋ฌธ์„œํ™”๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ํŒ€์›์˜ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์ ์‘ํ•˜๊ณ ์ž ํ•œ๋‹ค.

๐Ÿœ ํŒ€ ๊ฐœ๋ฏธ

๐Ÿ›๏ธ ํŒ€ ๋ฌธํ™”

๊ฐœ๋ฐœ ์œ„ํ‚ค

FE

BE

Infra

๐Ÿ—ฃ๏ธ ๋ฐœํ‘œ

๐Ÿ“š ํšŒ์˜๋ก

๐Ÿ”ด ์ธํ„ฐ๋ฏธ์…˜
๐ŸŸ  1์ฃผ์ฐจ
๐ŸŸก 2์ฃผ์ฐจ
๐ŸŸข 3์ฃผ์ฐจ
๐Ÿ”ต 4์ฃผ์ฐจ
๐ŸŸฃ 5์ฃผ์ฐจ
๐ŸŸค 6์ฃผ์ฐจ

๐Ÿ’ญ ํšŒ๊ณ 

๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ ๋ฉ˜ํ† ๋ง

Clone this wiki locally