๐Ÿ“ [JS ๊ณต๋ถ€๊ธฐ๋ก] 0725~0729 Rest, Promise, ์ œ๋„ˆ๋ ˆ์ด์ฒ˜, ์—๋Ÿฌ ์ฒ˜๋ฆฌ => 1ํšŒ๋… ์™„๋ฃŒ

์ œ๋ก ยท2022๋…„ 7์›” 31์ผ
0

[JS ๊ณต๋ถ€๊ธฐ๋ก] TIL โœจ

๋ชฉ๋ก ๋ณด๊ธฐ
12/12

44์žฅ: Rest API

  • 2000๋…„ ๋กœ์ด ํ•„๋”ฉ์ด ๋…ผ๋ฌธ์— ์ฒ˜์Œ ์†Œ๊ฐœ

    • -> ๋‹น์‹œ ์›น์ด HTTP๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์—ˆ์Œ
    • -> HTTP๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ(๊ตฌ์กฐ)๋ฅผ ์ œ๊ณต
  • Rest: HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทœ์ •ํ•œ ์•„ํ‚คํ…์ฒ˜(๊ตฌ์กฐ)

  • ๊ตฌ์„ฑ

    • ์ž์› -> URI
    • ํ–‰์œ„ -> ๋ฉ”์„œ๋“œ
    • ํ‘œํ˜„ -> ํŽ˜์ด๋กœ๋“œ
  • ์„ค๊ณ„ ์›์น™

    • URI๋Š” ๋ฆฌ์†Œ์Šค ํ‘œํ˜„ -> ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉ
    • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„ -> GET, POST, PUT, PATCH, DELETE

45์žฅ: ํ”„๋กœ๋ฏธ์Šค

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋‹จ์ 
    • ์ฝœ๋ฐฑ ํŒจํ„ด -> ์ฝœ๋ฐฑ ์ง€์˜ฅ
    • ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ณค๋ž€ -> ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ์™ธ๋ถ€ ๋ฐ˜ํ™˜X, ์ƒ์œ„ ์Šค์ฝ”ํ”„ ๋ณ€์ˆ˜ ํ• ๋‹นX

ํ”„๋กœ๋ฏธ์Šค

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ƒํƒœ์™€ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด
  • new Promise๋กœ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด ์ƒ์„ฑ
  • resolve, reject ์ธ์ˆ˜๋ฅผ ๋ฐ›์Œ
  • ๋น„๋™๊ธฐ ์„ฑ๊ณต์‹œ -> resolve ํ•จ์ˆ˜ ์‹คํ–‰ -> promise๋ฅผ fulfilled ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ
  • ๋น„๋™๊ธฐ ์‹คํŒจ์‹œ -> reject ํ•จ์ˆ˜ ์‹คํ–‰ -> promisefmf rejected ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ -> .then, .catch, .finally

ํ”„๋กœ๋ฏธ์Šค ์ฒด์ด๋‹

  • then, catch, finally ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ๋‚˜ promise๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ์†์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ์Œ
  • ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ํ”„๋กœ๋ฏธ์Šค์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์„ ํƒ์ ์œผ๋กœ ํ˜ธ์ถœ๋จ

ํ”„๋กœ๋ฏธ์Šค ์ •์  ๋ฉ”์„œ๋“œ

  • Promise.resolve/reject -> ๊ฐ’์„ ๋ž˜ํ•‘ํ•˜์—ฌ promise๊ฐ’ ์ƒ์„ฑ
  • Promise.all -> ๋น„๋™๊ธฐ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ - ์ˆœ์„œ๋Œ€๋กœ
  • Promise.race -> ๊ฐ€์žฅ ๋จผ์ € fulfilled๋œ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜
  • Promise.allSettled -> ๋ชจ๋“œ settled ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ

  • ํ”„๋กœ๋ฏธ์Šค ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ์— ์ž„์‹œ ์ €์žฅ๋จ
  • ๋‹ค๋ฆ„ ํ•จ์ˆ˜ ํ˜น์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ž„์‹œ ์ €์žฅ๋˜๋Š” ํƒœ์Šคํฌ ํ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋จ(์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Œ)

fetch

  • HTTP ์‘๋‹ต์„ ๋‚˜ํƒ€๋‚ด๋Š” response๊ฐ์ฒด๋ฅผ ๋ž˜ํ•‘ํ•œ promise ๊ฐ์ฒด ๋ฐ˜ํ™˜
  • ์‘๋‹ต body๋ฅผ ์–ป์œผ๋ ค๋ฉด response.json()์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ์Œ
    • ์‘๋‹ต body๋ฅผ ์–ป์–ด ์—ญ์ง๋ ฌํ™”ํ•ด์„œ ๋ฐ˜ํ™˜
  • fetch ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    • ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ์‹œ response.ok์˜ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ false๋กœ ์„ค์ •ํ•จ
    • response.ok๋กœ ์—๋Ÿฌ์ฒ˜๋ฆฌ ํ•ด์•ผํ•จ

46์žฅ: ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์™€ async/await

  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ: ์ฝ”๋“œ ๋ธ”๋ก์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์žฌ๊ฐœ ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ํ•จ์ˆ˜
    • function* ๋กœ ์ •์˜
    • ํ•จ์ˆ˜ ํ˜ธ์ถœ์ž์—๊ฒŒ ํ•จ์ˆ˜ ์‹คํ–‰ ์ œ์–ด๊ถŒ ์–‘๋„
    • ํ˜ธ์ถœ์ž์™€ ํ•จ์ˆ˜ ์ƒํƒœ ์ฃผ๊ณ  ๋ฐ›์Œ
    • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
      • ์ดํ„ฐ๋Ÿฌ๋ธ” & ์ดํ„ฐ๋ ˆ์ดํ„ฐ
        • ์ดํ„ฐ๋Ÿฌ๋ธ” -> Symbol.iterator ๋ฉ”์„œ๋“œ ์ƒ์†
        • ์ดํ„ฐ๋ ˆ์ดํ„ฐ -> ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฆฌ์ ˆํŠธ๊ฐ์ฒด(value, done), next() ๋ฉ”์„œ๋“œ

์ผ์‹œ์ค‘์ง€, ์žฌ๊ฐœ

  • yield ํ‚ค์›Œ๋“œ

    • ํ•จ์ˆ˜ ์‹คํ–‰ ์ผ์‹œ ์ค‘์ง€
    • yield ๋’ค ํ‘œํ˜„์‹ ๊ฒฐ๊ณผ๋ฅผ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฐ˜ํ™˜
  • next() ๋ฉ”์„œ๋“œ ์‹คํ–‰ -> yield ํ‘œํ˜„์‹๊นŒ์ง€ ์‹คํ–‰ํ•˜๊ณ  ์ผ์‹œ์ค‘์ง€

    • ํ•จ์ˆ˜ ์ œ์–ด๊ถŒ์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์ž๋กœ ์–‘๋„๋จ
  • async/await

    • ๋™๊ธฐ์ฒ˜๋Ÿผ ํ”„๋กœ๋ฏธ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • async
      • ์–ธ์ œ๋‚˜ ํ”„๋กœ๋ฏธ์Šค ๋ฐ˜ํ™˜
      • await๋Š” ๋ฐ˜๋“œ์‹œ async ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ
    • await
      • ํ”„๋กœ๋ฏธ์Šค๊ฐ€ settled๊ฐ€ ๋  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ณ  resolve ์ฒ˜๋ฆฌ ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

47์žฅ: ์—๋Ÿฌ ์ฒ˜๋ฆฌ

  • ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ด์œ 

    • ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์— ์˜ํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ•์ œ ์ข…๋ฃŒ๋œ๋‹ค.
      -> ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ „์ œํ•˜๊ณ  ์ฝ”๋“œ ์ž‘์„ฑํ•ด์•ผํ•จ!
  • ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

  1. ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์—์„œ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ if๋ฌธ ์ฒ˜๋ฆฌ
  2. ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ฝ”๋“œ ๋ฏธ๋ฆฌ ๋“ฑ๋ก
  • try ... catch ... finally ...

  • try๋ฌธ ์‹คํ–‰, ์—๋Ÿฌ ๋ฐœ์ƒ -> catch(err) ์—๋Ÿฌ err์„ ๋ฐ›์Œ -> finally ์—๋Ÿฌ ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ํ•œ ๋ฒˆ ์‹คํ–‰

  • Error ๊ฐ์ฒด

    • const error = new Error('invalid')
    • message ํ”„๋กœํผํ‹ฐ -> ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฉ”์„ธ์ง€
    • stack ํ”„๋กœํผ์น˜ -> ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์ฝœ์Šคํƒ ํ˜ธ์ถœ ์ •๋ณด ๋ฌธ์ž์—ด
    • 7๊ฐœ์˜ ์—๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•จ
  • throw ๋ฌธ

    • ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋˜์ง€๋Š” ์šฉ๋„ -> catch์—์„œ ๊ทธ ์—๋Ÿฌ๋ฅผ ๋ฐ›์Œ
  • ์—๋Ÿฌ ์ „ํŒŒ

    • ์—๋Ÿฌ๋Š” ํ˜ธ์ถœ์ž ๋ฐฉํ–ฅ์œผ๋กœ ์ „ํŒŒ๋จ(์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์œ„์—์„œ ๋ฐ‘์œผ๋กœ)
      => ์ „์—ญ์—์„œ ์บ์น˜ ๊ฐ€๋Šฅํ•˜๋‹ค!
profile
Software Developer

0๊ฐœ์˜ ๋Œ“๊ธ€