๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ๋ฉด์ ‘ ์งˆ๋ฌธ

๋“œ๋””์–ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ์„ฑ๊ณตํ–ˆ๋‹ค. ๊ทธ๋™์•ˆ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ๋“ค์„ ์‚ฌ์šฉ๋ฒ• ์œ„์ฃผ๋กœ ์ตํ˜”๋˜ํ„ฐ๋ผ ๋ง‰์ƒ ๊ธฐ์ˆ  ๋ฉด์ ‘์„ ๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๋” ์–ด๋ ค์› ๋‹ค. ๊ทธ๋ž˜์„œ ์•ž์œผ๋ก  ๊ธฐ์ˆ ์„ ์ตํž ๋•Œ ๊ผญ ์ด๋ก ์ ์ธ ๋ถ€๋ถ„๋„ ์ดํ•ดํ•˜๋ฉด์„œ ๊นŠ์ด ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. ์•„๋ฌดํŠผ ๋ฉด์ ‘์„ ์ค€๋น„ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์„ ๊ฐ„๋‹จํžˆ ๊ธฐ๋กํ•ด ๋ณด์ž. ์งˆ๋ฌธ ํ•ญ๋ชฉ์€ ๋‚ด๊ฐ€ ์ž‘์—…ํ•œ ํ”„๋กœ์ ํŠธ ๊ธฐ์ˆ  ์Šคํƒ ์œ„์ฃผ์ด๋‹ค. 


React

  • ๋ฆฌ์•กํŠธ ์žฅ๋‹จ์ 
    • ์žฅ์ : ๋ฆฌ์•กํŠธ๋Š” ๊ธฐ๋Šฅ ๋‹จ์œ„, UI ๋‹จ์œ„๋กœ ์บก์Šํ™”ํ•˜์—ฌ(๋ฌถ์–ด์„œ) ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ€์ƒ ๋”์„ ์‚ฌ์šฉํ•ด ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ UI๋ฅผ ๋น ๋ฅด๊ฒŒ ๋žœ๋”๋งํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ข‹์€ ํผํฌ๋จผ์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹จ์ : ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋žœ๋”๋ง ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ์‹œ๊ฐ„์ด ๊น๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  SEO๊ฐ€ ์ ์ ˆํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ฃผ๋กœ ๊ฒ€์ƒ‰์—”์ง„์€ <meta> ํƒœ๊ทธ์—์„œ ์›น์‚ฌ์ดํŠธ ์ •๋ณด๋ฅผ ์ฝ์–ด์˜ค๋Š”๋ฐ ํ•˜๋‚˜์˜ index.html์ด๋ฏ€๋กœ ํŽ˜์ด์ง€๊ฐ€ ์ „ํ™˜๋˜์–ด๋„ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•„์„œ ์ž…๋‹ˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ ๋™์ž‘๋ฐฉ์‹
    • ๋ฆฌ์•กํŠธ๋Š” ์‹ค์ œ ๋”์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹  ๊ฐ€์ƒ ๋”์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ–ˆ์„ ๋•Œ ์ง์ ‘์ ์œผ๋กœ ๋”์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ๋”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ€์ƒ ๋”๊ณผ ์ด์ „์— ์ €์žฅ๋œ ๊ฐ€์ƒ ๋”์„ ๋น„๊ตํ•ด ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์˜ ์‹ค์ œ ๋”๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ DOM์ด๋ž€
    • ์‹ค์ œ ๋”์„ ์ถ”์ƒํ™”์‹œํ‚จ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๋”์ด ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์„ ๋•Œ ์‹ค์ œ DOM์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์žฌ๋žœ๋”๋ง์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ์žฌ๋žœ๋”๋ง์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€์ƒ ๋”์˜ ๊ฒฝ์šฐ ๊ฐ€์ƒ๋”์˜ ๋ณ€๊ฒฝ ์ „๊ณผ ํ›„๋ฅผ ๋น„๊ตํ•œ ํ›„์— ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ ๋”์— ์ ์šฉํ•˜์—ฌ ํ•œ๋ฒˆ๋งŒ ์žฌ๋žœ๋”๋ง์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ ํ›…
    • v.16.8์— ๋„์ž…๋œ ๊ธฐ๋Šฅ์œผ๋กœ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ๋ช‡๊ฐ€์ง€ ๊ธฐ์ˆ ๋“ค์€ Hook์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ํ›…์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” setState, ๋žœ๋”๋ง ์งํ›„ ์ž‘์—…์„ ์„ค์ •ํ•˜๋Š” useEffect ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • useState()๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ state๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. setState()๋Š” ์ปดํฌ๋„ŒํŠธ์˜ state ๊ฐ์ฒด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋žœ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
    • useEffect()๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋žœ๋”๋ง ๋ ๋•Œ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…(์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ)์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋กœ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋žœ๋”๋ง ๋œ ์ดํ›„ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋“ฑ๋“ฑ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ
    • ๋นŒ๋“œ๊ฐ€ ์™„์„ฑ๋˜์–ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์— ๋ฐฐ์น˜ํ‚ค์‹œ๋Š” ์ผ์ž…๋‹ˆ๋‹ค.
    • Heroku๋Š” ๋ณ„๋„์˜ ๋ฏธ๋“ค์›จ์–ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ ์—†์ด ์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œ๋ผ๋ฉด ๊ฐœ๋ฐœํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋„์–ด์ฃผ๋Š” ํด๋ผ์šฐ๋“œ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

JavaScript

  • JWT
    • ์ธ์ฆ๋ฐ›์€ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์•”ํ˜ธํ™”๋œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์„œ, ์„œ๋ฒ„์— ์ธ์ฆ์ด ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ HTTP ํ—ค๋”์— ํ† ํฐ์„ ํ•จ๊ป˜ ๋ณด๋‚ด์–ด์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
    • ํ† ํฐ์€ ํ•œ๋ฒˆ ๋ฐœ๊ธ‰๋˜๋ฉด ์œ ํšจ๊ธฐ๊ฐ„์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ์œผ๋กœ ์–ด์„ธ์Šค ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์„ธ์…˜/์ฟ ํ‚ค ๋ฐฉ์‹๊ณผ์˜ ์ฐจ์ด์ ์œผ๋กœ๋Š” ์„ธ์…˜/์ฟ ํ‚ค๋Š” ์„ธ์…˜ ์ €์žฅ์†Œ์— ์œ ์ €์˜ ์ •๋ณด๋ฅผ ๋„ฃ๊ณ , jwt๋Š” ํ† ํฐ ์•ˆ์— ์œ ์ €์˜ ์ •๋ณด๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„  ๋™์ผํ•˜๊ฒŒ http ํ—ค๋”์— ์ •๋ณด๋ฅผ ์‹ค์–ด๋ณด๋‚ด์ง€๋งŒ ์„œ๋ฒ„ ์ž…์žฅ์—์„  ์ธ์ฆ์„ ์•”ํ˜ธํ™”ํ•˜๋ƒ, ๋ณ„๋„์˜ ์ €์žฅ์†Œ๋ฅผ ์ด์šฉํ•˜๋ƒ์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • CSR๊ณผ SSR
    • ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋žœ๋”๋ง์€ ์ตœ์ดˆ ๋กœ๋”ฉ ์‹œ ์„œ๋ฒ„์—์„œ HTML, CSS, JS ๋“ฑ ๊ฐ์ข… ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ๋ฐ›์•„์™€์„œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋žœ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋Š” SSR์— ๋น„ํ•ด ๋Š๋ฆฌ์ง€๋งŒ, ์ดˆ๊ธฐ์— ๋ฐ›์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ํ™”๋ฉด์„ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€ ์ „ํ™˜ ์†๋„๋Š” SSR์™€ ๋น„๊ต ์‹œ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋™์ ์œผ๋กœ ์ฝ˜ํ…์ธ ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋žœ๋”๋ง์€ ์„œ๋ฒ„์—์„œ ์ฆ‰์‹œ ๋žœ๋”๋ง ๊ฐ€๋Šฅํ•œ HTML ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์š”์ฒญํ•œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋Š” ๋น ๋ฅด์ง€๋งŒ ์ดํ›„ ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ๋งค๋ฒˆ ์„œ๋ฒ„์—์„œ ์š”์ฒญ๋ฐ›์•„ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์†Œ ๋Š๋ฆฌ๊ณ  ์„œ๋ฒ„ ์ž์›์„ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ์ฐจ์ด์  ํฌ์ธํŠธ: ์ฒซ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์‹œ๊ฐ„, ์ดํ›„ ๋‚˜๋จธ์ง€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์‹œ๊ฐ„, SEO ๋Œ€์‘, ์„œ๋ฒ„์ž์› ์‚ฌ์šฉ๋Ÿ‰
  • DOM์ด๋ž€
    • HTML ํƒœ๊ทธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜์™€ ๋™๊ธฐ ํ•จ์ˆ˜
    • ๋น„๋™๊ธฐ๋Š” ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋˜๋Š” ํ•จ์ˆ˜์ด๊ณ , ๋™๊ธฐ๋Š” ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋ฆฌํ„ด๋ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ๋‹ค์Œ ๋™์ž‘์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด๋‹ค. ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ์–ด๋–ค ๋กœ์ง์ด ๋™๊ธฐ์ ์œผ๋กœ๋งŒ ์‹คํ–‰๋  ๊ฒฝ์šฐ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋งŽ์•„์ ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ถˆํŽธํ•จ์„ ๋Š๋ผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ์ธ์ž๋กœ ๋„˜๊ฒจ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์ค‘์ฒฉ๋˜์–ด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ์—” promise์™€ async/await๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  • promise
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด(ํŒจํ„ด)์ž…๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด pending, ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด fulfilled, ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด reject ์ƒํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    • new ํ‚ค์›Œ๋“œ์™€ ํ•จ์ˆ˜ ์ธ์ž๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํ•จ์ˆ˜ ์ธ์ž๋Š” resolve์™€ reject๋ผ๋Š” ๋‘๊ฐœ์˜ ํ•จ์ˆ˜ํ˜• ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. resolve()๋Š” ์–ป๊ฒŒ ๋  ๊ฒฐ๊ณผ๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ , reject()๋Š” ๋ฐœ์ƒํ•  ์˜ˆ์™ธ๋ฅผ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.
    • ์ •์ƒ์ ์ธ ์ธ์ž๋ฅผ ๋„˜๊ธด ๊ฒฝ์šฐ(resolve) then() ๋ฉ”์†Œ์Šค๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , ๋น„์ •์ƒ์ ์ธ ์ธ์ž๋ฅผ ๋„˜๊ธด ๊ฒฝ์šฐ(reject) catch() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ทผ๋ฐ promise๋„ ์ฒด์ธ์ด ๊ณ„์† ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟ ํ‚ค์™€ ์„ธ์…˜
    • ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ, ํ…์ŠคํŠธ ํ˜•์‹, ๋งŒ๋ฃŒ์‹œ์  ์ง€์ •(๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ๋˜๋„ ๋งŒ๋ฃŒ์‹œ์ ์ด ์ง€๋‚˜์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ ์•ˆ๋จ), ์„ธ์…˜๋ณด๋‹ค ๋น ๋ฅด๊ณ , ๋ณด์•ˆ์€ ๋œ ์ข‹์Œ
    • ์„ธ์…˜์€ ์›น์„œ๋ฒ„์— ์ €์žฅ, ๊ฐ์ฒด ํ˜•์‹, ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ์‚ญ์ œ๋˜๊ณ  ๋”ฐ๋กœ ๊ธฐ๊ฐ„ ์ง€์ • ๊ฐ€๋Šฅ, ์ฟ ํ‚ค๋ณด๋‹ค ๋Š๋ฆฌ์ง€๋งŒ ๋ณด์•ˆ์€ ์šฐ์ˆ˜ํ•จ.
    • ์„ธ์…˜์€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ID๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ์ธ์ฆ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ง€ ๋งŽ์•„์ง.
  • ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ
    • ์ฟ ํ‚ค๋Š” ์„ค์ • ์ดํ›„ ๋ชจ๋“  HTTP Request์— ์ฟ ํ‚ค์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด๋งŒ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์šฉ๋Ÿ‰์— ์ œํ•œ์ด ์žˆ์œผ๋ฉฐ ๋งŒ๋ฃŒ์ผ์ž๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • ์›น ์Šคํ† ๋ฆฌ์ง€๋Š” ์˜๊ตฌ์ €์žฅ์†Œ์ธ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์™€ ์ž„์‹œ ์ €์žฅ์†Œ์ธ ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ํ›„ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ์™ธ์—๋„ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ์šฉ๋Ÿ‰์€ ์ฟ ํ‚ค์— ๋น„ํ•ด ๋„‰๋„‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•œ๋ฒˆ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ง€์šฐ์ง€ ์•Š๋Š” ํ•œ ์˜๊ตฌ์ ์œผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด๊ด€๋˜๊ณ , ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ฆฌ๋กœ๋“œ ์‹œ์—” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘์›๋ฆฌ
    • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•˜์—ฌ HTML ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  HTML ํŒŒ์ผ์„ ํ•ด์„ํ•ด HTML, CSS, JS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋” ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ถ•ํ•œ DOM๊ณผ CSSOM์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์งˆ ์š”์†Œ๋“ค๋กœ render tree ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ์š”์†Œ์˜ ์Šคํƒ€์ผ์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ์œ„์น˜, ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ณ„์‚ฐ์ด ์™„๋ฃŒ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜ธ์ด์ŠคํŒ…
    • ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ํ•จ์ˆ˜ ์•ˆ์— ์žˆ๋Š” ์„ ์–ธ๋“ค์„ ํ•ด๋‹น ํ•จ์ˆ˜ ์œ ํšจ ๋ฒ”์œ„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง„ ๊ฒƒ ๊ฐ™์€ ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • var, let, const
    • ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. var๋Š” ์žฌ์„ ์–ธ, ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. let์€ ์žฌ์„ ์–ธ์€ ๋ถˆ๊ฐ€, ์žฌํ• ๋‹ฌ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. const๋Š” ์žฌ์„ ์–ธ๊ณผ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณ€์ˆ˜ ๋ชจ๋‘ ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚  ๋•Œ var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์ด์ „์— ์ฐธ์กฐ ์‹œ undefined๋กœ ์ฝํžˆ๋Š” ๋ฐ˜๋ฉด let, const๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์ด์ „์— ์ฐธ์กฐ ์‹œ ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • HTTP GET๊ณผ POST
    • GET์€ ๋ฆฌ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ์ด๊ณ , URL ํŒŒ๋ผ๋ฏธํ„ฐ์— ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  POST๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ ๋ฐ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๊ณ , HTTP body์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • RESTful API
    • ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์— ์ œ์•ฝ์„ ๋‘์ง€ ์•Š๊ณ  ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด HTTP ํ‘œ์ค€ ๊ต์•ฝ์„ ์ง€ํ‚ค๋ฉด์„œ API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • HTTP์™€ URI ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.
    • ์ฆ‰, ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์™€์˜ํ†ต์‹ ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„๊ฐ€ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก HTTP ํ‘œ์ค€ ๊ทœ์•ฝ์„ ์ง€ํ‚จ API๋ฅผ ๋งŒ๋“  ๊ฒƒ.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ
    • ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋Šฅ์˜ ์ง‘ํ•ฉ์ฒด๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ œ์–ด ํ๋ฆ„์— ๋Œ€ํ•œ ์ฃผ๋„์„ฑ์ด ๋ˆ„๊ตฌ์—๊ฒŒ ์žˆ๋Š”๊ฐ€์— ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ์ง์ ‘ ์ฅ๊ณ  ์žˆ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ์•ˆ์— ๋งž์ถฐ ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์งœ๋„ฃ๋Š” ๊ตฌ์กฐ์ด๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ๋งŒ๋“ค๊ณ  ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ตฌ์กฐ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›นํŒฉ๊ณผ ๋ฐ”๋ฒจ
    • ์›นํŒฉ์€ ์˜์กด์„ฑ ์žˆ๋Š” ๋ชจ๋“ˆ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ†ตํ•ฉ์‹œ์ผœ์ฃผ๋Š” ๋„๊ตฌ์ธ ๋ฒˆ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ๋งค๋ฒˆ ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์„ ๋”ฐ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ๋ณ‘๋ชฉํ˜„์ƒ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ”๋ฒจ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœํ•œ ๊ฒƒ์„ ๊ตฌ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์–ด ๋‹ค์–‘ํ•œ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.
  • ํ”„๋ก์‹œ ์„œ๋ฒ„
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„์—์„œ ๋Œ€๋ฆฌํ•ด์ฃผ๋Š” ์„œ๋ฒ„๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์—์„œ ๋Œ€๋ฆฌ๋กœ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • <script> ํƒœ๊ทธ๋ฅผ </body> ์ „์— ๋‘์–ด์•ผ ํ•˜๋Š” ์ด์œ 
    • ๋ธŒ๋ผ์šฐ์ €๋Š” <script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด html ํŒŒ์‹ฑ์„ ๋ฉˆ์ถ”๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ชจ๋“  html ์š”์†Œ๊ฐ€ ํŒŒ์‹ฑ๋˜๊ธฐ ์ „(DOM์ด ์ƒ์„ฑ๋˜๊ธฐ ์ „)์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋˜๋ฉด DOM์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  html ์š”์†Œ๊ฐ€ ํŒŒ์‹ฑ๋œ ํ›„์— JS ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ๋ผ๊ณ  ์‹คํ–‰ํ•˜๋„๋ก </body>์— ์œ„์น˜ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.
    • async๋Š” HTML ํŒŒ์‹ฑํ•˜๋Š” ๋™์‹œ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋ฐ›๊ณ , HTMLํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•„๋„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์ฆ‰์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • defer๋Š” HTML ํŒŒ์‹ฑํ•˜๋Š” ๋™์‹œ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋ฐ›๊ณ , HTMLํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜์–ด์•ผ๋งŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CORS(Cross-Origin Resource Sharing)
    • ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ๊ฐ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ๋ชจ๋ฅด๋Š” ์™ธ๋ถ€์ธ์ด ๋‚ด ์›น์‚ฌ์ดํŠธ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•จ๋ถ€๋กœ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์€ ์ข‹์ง€ ๋ชปํ•˜๋‹ˆ๊น์š”. ํ•˜์ง€๋งŒ ํ•„์š”์— ์˜ํ•œ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ๊ณต์œ  ์‹œ์—” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จ๋˜์–ด ์žˆ๋Š” CORS ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • CORS ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์„œ๋ฒ„์—์„œ ์‘๋‹ต ํ—ค๋”์— ํŠน์ • ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TypeScript

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ž€?
    • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋ฉด์„œ ํƒ€์ž…์ด๋‚˜ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ๋ณ„๋„๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ , ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ์‹œ์ ์— ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ํƒ€์ž…์„ ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์•”๋ฌต์ ์œผ๋กœ ํƒ€์ž…์ด ๋ณ€ํ•˜๊ธฐ๋„ ํ•ด์„œ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ถ”์ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๊ณ  ์‹ ๋ขฐ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๋˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๊ธฐ ๋–„๋ฌธ์— ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ ๋•Œ์ธ ๋Ÿฐํƒ€์ž„์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด๋กœ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ํ†ตํ•ด(๋ฐ”๋ฒจ ๋“ฑ) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๋Š”๋ฐ, ์ด๋•Œ ํƒ€์ž…์„ ์ฒดํฌํ•ด ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹จ, ๊ทธ๋งŒํผ ์ฝ”๋“œ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.)
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์žฅ๋‹จ์ 
    • ์žฅ์ : ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฏธ๋ฆฌ ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ๋ฐœ๊ฒฌํ•ด ๋Ÿฐํƒ€์ž„ ์ „์— ์˜ค๋ฅ˜๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹จ์ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด type/node๋‚˜ type/react ๋“ฑ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผํ•˜๋Š”๋ฐ ์ถ”๊ฐ€์ ์ธ ์‹œ๊ฐ„์ด ๋“ญ๋‹ˆ๋‹ค.
  • ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ฐจ์ด
    • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ „์ฒด ํŒŒ์ผ์„ ์Šค์บ”ํ•˜์—ฌ ํ•œ๊บผ๋ฒˆ์— ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ดˆ๊ธฐ ์Šค์บ”์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ ํ•œ๋ฒˆ ์‹คํ–‰ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๊ณ  ๋‚˜๋ฉด ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ชจ๋“  ์˜ค๋ฅ˜๊ฐ€ ์ถœ๋ ฅ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „์— ์˜ค๋ฅ˜ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ํ•œ๋ฒˆ์— ํ•œ ๋ฌธ์žฅ์”ฉ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋Š๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ฐ™์ด ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ์ •์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ›„ ์˜ค๋ฅ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ ์—ญ๋Ÿ‰
    • ์ธํ„ฐํŽ˜์ด์Šค - ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…๋“ค์„ ์˜ค๋ธŒ์ ํŠธ ํ˜•ํƒœ์˜ ๋ฌถ์Œ์œผ๋กœ ์ •์˜ํ•ด ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ
    • ์œ ๋‹ˆ์–ธ ํƒ€์ž… - ํ•œ๊ฐ€์ง€ ์ด์ƒ์˜ ํƒ€์ž…์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ ( ์˜ˆ: string | number)
    • (์•ˆ์จ๋ณธ)์ œ๋„ค๋ฆญ - ์ธ์ž๋ฅผ ๋„˜๊ฒจ ํ˜ธ์ถœํ•˜๋Š” ์‹œ์ ์— ํƒ€์ž…์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ.
  • any์™€ void
    • any๋Š” ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šธ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋กœ ์‚ฌ์šฉ์ž input ๊ฐ’์œผ๋กœ ๋ฌด์—‡์ด ๋“ค์–ด์˜ฌ์ง€ ๋ชจ๋ฅธ ๊ฒฝ์šฐ. ๋ฐ˜๋Œ€๋กœ void๋Š” ๋ณ€์ˆ˜์— ์œ ํ˜•์ด ์—†์„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(๊ฐ’ ํ• ๋‹น์€ null, undefined๋งŒ ๊ฐ€๋Šฅ). ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Next

  • Next๋ž€? (+Hydrate)
    • ๋ฆฌ์•กํŠธ์˜ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ ์‹œ ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ์›นํŽ˜์ด์ง€(html ํŒŒ์ผ)์„ ์ƒ์„ฑํ•˜์—ฌ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค(Pre-Rendering). ์ด๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ›์€ ์›นํŽ˜์ด์ง€๋Š” ๋‹จ์ˆœํžˆ ํ™”๋ฉด๋งŒ ๋ณด์—ฌ์ฃผ๋Š” html ํŒŒ์ผ์ด๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์š”์†Œ๋Š” ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ดํ›„ ๋ฐ”๋กœ ๋ฆฌ์•กํŠธ๊ฐ€ ๋ฒˆ๋“ค๋ง ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ์ด์ „์— ๋ฐ›์€ HTML ์ฝ”๋“œ์™€ JS ์ฝ”๋“œ๋ฅผ ์„œ๋กœ ๋งค์นญ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋žœ๋”๋งํ•  ๋•Œ ์‹ค์ œ ์›นํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •๊นŒ์ง„ ์•Š์Šต๋‹ˆ๋‹ค(painํ•จ์ˆ˜ ํ˜ธ์ถœ ์•ˆํ•จ)
    • ์ด๊ฒƒ์€ ๋งˆ์น˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋“ค์ด ๋” ์š”์†Œ์˜ ํ•„์š”ํ•œ ์š”์†Œ๋ฅผ ์ฑ„์šด๋‹ค ํ•˜์—ฌ Hydrate(์ˆ˜ํ™”)๋ผ๋Š” ์šฉ์–ด๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • SSG์™€ SSR
    • pre-rendering์„ ๋™์ ์œผ๋กœ ํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ฉด SSR, ์ •์ ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ฉด SSG ์ž…๋‹ˆ๋‹ค.
    • SSG๋Š” peges ํด๋”์— staticํ•œ ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŽ˜์ด์ง€ ์š”์ฒญ ์‹œ ์ด๋ฏธ ์ƒ์„ฑ๋œ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌ์•กํŠธ์˜ CSR๋ณด๋‹ค ์‘๋‹ต์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  Next์—์„œ๋„ SSG ์‚ฌ์šฉ์„ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค.
      • getStaticProps ํ•จ์ˆ˜๋Š” api์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. props์— ๋ฆฌํ„ด๊ฐ’์„ ๋‹ด์•„ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
      • getStaticPaths ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋™์ ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์šฉ๋„๋กœ, ์ด๋•Œ ์ƒ์„ฑํ•œ params ์ธ์ž๋ฅผ getStaticProps ํ•จ์ˆ˜์— ๋„˜๊ฒจ ์ฃผ์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…
    • Next๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด์„œ pages ํด๋”์— ์žˆ๋Š” ํŒŒ์ผ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

Redux

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

Redux-saga

  • ๋น„๋™๊ธฐ ์ž‘์—…์™€ ๊ฐ™์€ ๋ถ€์ˆ˜์ ์ธ ์ž‘์—…์„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋•์Šค์˜ action์ด ๋ฐœ์ƒํ•˜๋ฉด reducer๊ฐ€ ๊ทธ ์•ก์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋“ค์›จ์–ด ์—ญํ• ์„ ํ•ด์ค๋‹ˆ๋‹ค.
  • put: ์ธ์ž๋กœ ๋“ค์–ด์˜จ ์•ก์…˜์„ dispatchํ•ฉ๋‹ˆ๋‹ค. call: ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. takeEvrey: ํŠน์ • ์•ก์…˜์— ๋Œ€ํ•ด ํŠน์ • ํ•จ์ˆ˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.