230328(ํ)
๐ ์ฑ์ฅ์ผ์ง 4.0
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐ณ (1.0)ํค์๋
์ต๋ํ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ, ์ถํ์ ๋ณด๋ฉด์ ์ค์ค๋ก ์ค๋ช
๐ (2.0)๊ฒฝํ ์์ฃผ๋ก
๋จ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ๋ณด๋ค ๋ฌด์์ ๋ฐฐ์ ๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์งง๊ณ ๊ฐ๋จํ๊ฒ ์์ฑ
โ๏ธ (3.0)์ ํด์ง ํ ํ๋ฆฟ์ ๋ง์ถฐ์
ํค์๋, ๊ฒฝํ ๋ชจ๋ ์ข๋ค. ๋ค๋ง ๋งค์ผ ์์ฑํ๊ธฐ๋ก ๋ง์ ๋จน์๋งํผ ํต์ฌ๋ง ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ ์ ์๊ฒ ํ ํ๋ฆฟ์ ์์ฑ
(3.1)230102๋ถํฐ ์์๋๋ ํ์ต์ ๊ดํ ๋ด์ฉ ์ถ๊ฐ
(3.2)230313๋ถํฐ ์ข๋ ๊ฒฝํ, ๊ฐ์ ์์ฃผ์ ๋ด์ฉ๋ ๋ด๊ธฐ!
๐พ (4.0)ํ์ต ํค์๋์์ ์ต๋ํ ๊ฐ๋จํ ์ ๋ณด ์ ๊ณต, ๊ณ ๋ฏผ์์ ๋ด ๊ฒฝํ์ ์์ธํ ์ ์!
๐ ์ค๋์ ํ์ต ํค์๋
๋๊ธฐ(synchronous)?
- ๋์์ ์ผ์ด๋๋ค๋ ์๋ฏธ๋ก, ์ฌ๊ธฐ์ ๋์์ ์ผ์ด๋๋ค๋ ๊ฒ์
์์ฒญ
๊ณผ๊ฒฐ๊ณผ
๊ฐ ๋์์ ์ผ์ด๋๋ค๋ ์๋ฏธ - ์์ ์ฝ๋๊ฐ ์์ง ์คํ ์ค์ด๋ผ๋ฉด ๊ทธ ์คํ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผํ๋ค.(๋ธ๋กํน)
- ์ค๊ณ๊ฐ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด๋ค.
๋น๋๊ธฐ(asynchronous)?
- ๋์์ ์ผ์ด๋์ง ์๋๋ค๋ ์๋ฏธ๋ก, ์ฌ๊ธฐ์ ๋์์ ์ผ์ด๋์ง ์๋๋ค๋ ๊ฒ์
์์ฒญ
๊ณผ๊ฒฐ๊ณผ
๊ฐ ๊ฐ์ ์๋ฆฌ์์ ๋์์ ์ผ์ด๋์ง ์์์ ์๋ฏธ - ๋๊ธฐ๋ณด๋ค ๋ณต์กํ์ง๋ง ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๋ผ๋ ๊ทธ ์๊ฐ์ ๋ค๋ฅธ ์์ ์ ํ ์ ์์ด, ์๊ฐ์ ์ผ๋ก ์ข๋ ํจ์จ์ ์ด๋ค.
setTimeout์ ๋์์๋ฆฌ?
setTimeout(() => console.log('๋น๋๊ธฐ์
๋๋ค.'), 10000);
setTimeout์ ๋ธ๋ผ์ฐ์ ์ V8 ์์ง ์์ฒด์ ๋ด์ฅ๋์ด์๋ ํจ์๊ฐ ์๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณตํ๋ api์ธ WEB API ์ค ํ๋์ด๋ค. ์คํ๋๋ฉด 10000ms ์ฆ, 10์ด ๋ค์ cb(callback) ํจ์๋ฅผ ์คํํด๋ฌ๋ผ๋ ์ด๋ฒคํธ๊ฐ ๋ฑ๋ก๋๊ณ 10์ด ๋ค์ cb๊ฐ ์คํ๋๋ค.
์๋์ ๋ง์ ์ดํดํด๋ณด๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ฐ๋ ๋ ๊ธฐ๋ฐ์ด๋ฉฐ ๋
ผ ๋ธ๋กํน ๋ฐฉ์์ ๋น๋๊ธฐ์ ์ธ ๋์์ฑ ์ธ์ด์ด๋ฉฐ ์ฝ ์คํ, ์ด๋ฒคํธ ๋ฃจํ์ ์ฝ๋ฐฑ ํ ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๊ฐ์ง ๋ค๋ฅธ API๋ค์ ๊ฐ์ง๊ณ ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ฐ๋ ๋์ด์ง๋ง, ์คํ๋๋ ํ๊ฒฝ(๋ธ๋ผ์ฐ์ , nodejs ๋ฑ)์์ ์ ๊ณตํ๋ event loop, callback queue๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ ์ ์๋ค.
- ์ฌ๊ธฐ์ ๋งํ๋ ๋์์ฑ์ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๋น๋๊ธฐ ๋ก์ง์ด ๋์์ ์คํ๋๋ ์ฑ์ง์ ๋งํ๋ค.(๋๊ธฐ = ๋์์ ์ผ์ด๋๋ค, ๋น๋๊ธฐ = ๋์์ ์ผ์ด๋์ง ์๋๋ค ์ ๊ฐ๋ ์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ๊ฐ์ ์๋ฆฌ์์ ์ผ์ด๋๊ณ ๋ง๊ณ ๋ฅผ ๋งํ๋ค.)
JSON(JavaScript Object Notation)
- ์ด์ ์๋ ์ฃผ๋ก XML ํ์์ผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค. ํ์ง๋ง ์ดํ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ ๋ฐ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ฒจ๋๋ฉด์ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ๋์๋ค.
- ์ฌ์ค์ XML์ ์ด์ ๊ฑฐ์ ์ ์์ฐ์ด๊ณ ์์ผ๋ฉฐ, JSON ํํ๋ฅผ ๊ฑฐ์ ํ์ค์ฒ๋ผ ์ฌ์ฉํ๊ณ ์๋ค. ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋๋ ๋ฐ์ ๋ ๋ชจ๋ JSON ํํ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
fetch api
- ๊ธฐ์กด์๋ XMLHTTPRequest ๊ฐ์ฒด๋ฅผ ํตํด ๋น๋๊ธฐ ๋ฐ์ดํฐ ํต์ ์ ์งํํ์๋ค.
- ์ ์ ๋น๋๊ธฐ ์์ฒญ์ด ๋ ๋ณต์กํ๊ณ ์ฆ๊ฐ๋๋ฉด์, ๋น๋๊ธฐํต์ ๋ก์ง์ ๋ณด๊ธฐ ์ข์ ํจํด์ด ์ ์ฉ๋๊ณ ์๋ค.
- fetch api๋ ํ๋ก๋ฏธ์ค ํจํด์ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๋ก์ง์ ์ข๋ ๋๊ธฐ์ ์ผ๋ก ๋ณด์ด๊ฒ๋ ํด์ค๋ค.(๊ฐ๋ ์ฑ์ ๋์ฌ์ค๋ค.)
Promise ํจํด
- Promise ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋๊ธฐ์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ฌ์ฃผ๋ ํจํด์ด๋ค.
Promise: all vs allSettled
- Promise.all(): ๋ชจ๋ Promise ๊ฐ์ฒด๊ฐ fulfilled๋๋ฉด resolveํ ๊ฐ๋ค์ ๋ฐฐ์ด์ ๋ฐํ. ๋จ, ํ๋๋ผ๋ ์๋ฌ ๋ฐ์ ์ ์ฆ์ rejectํ ๊ฐ ๋ฐํ.
- Promise.allSettled(): fulfilled์ rejected ์๊ด์์ด ๋ชจ๋ Promise ๊ฐ์ฒด๊ฐ settled๊ฐ ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ค๋ค.
Promise: race vs any
- Promise.race(): fulfilled๋ rejected๋ ๊ทธ์ ๊ฐ์ฅ ๋จผ์ settled๋ ๊ฐ์ ๋ฐํํ๋ค.
- Promise.any(): ๋จผ์ ์ฒ๋ฆฌ๋ ์ํ๋ค ์ค์์ fulfilled์ธ ์ํ๋ง ๋ฐํํ๋ค.(๋ง์ฝ ๋ชจ๋ Promise์์ fulfilled๊ฐ ์๋ค๋ฉด
AggregateError
๋ฐ์)
Promise์ then
- Promise๋ฅผ ํตํด resolve์ reject ํจ์๋ฅผ ์คํ์ํฌ ์ ์๋ค.
- ์ด ๋, ์ด๋ค ๊ฐ์ resolveํ๊ฒ ๋๋ฉด ๊ทธ ๋ ์ฐ๋ฆฌ๋ ๊ทธ ๊ฐ์ then์ ๋ด๋ถ ์ฝ๋ฐฑํจ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ข ๋จ์ํ๊ฒ ์๊ฐํด๋ณด์๋ฉด,
then(cb)
๋ฅผ ํตํด์ ์ฐ๋ฆฌ๋resolve
๊ฐ ๋ฐ์ํ์ ๋(์ด๋ฒคํธ ๊ฐ๋ ), then์ผ๋ก ์ ๋ฌํcb
๋ฅผ resolve๋ก ์ ๋ฌํ ๊ฐ๊ณผ ํจ๊ปmicro task queue
์ ๋ณด๋ด๊ฒ ๋๋ค.
๐ ์ค๋์ ๊ณ ๋ฏผ ํค์๋
fetch์ then ์ฝ๋ ์คํ
fetch(URL).then(cb1).then(cb2)
์์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์คํ๋๊ณ ์ฒ๋ฆฌ๋๋์ง?!
fetch์ then, then์ ์ด ์์ฒด๋ ๋๊ธฐ์ ์ผ๋ก ์คํ์ด ๋๋ค. fetch ๋ด๋ถ์์ ์๋ฒ์์ ํต์ ์ด ์ฑ๊ณตํ๋ฉด ์ด๋ค ์๋ต์ resolveํ๊ฒ ๋๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
์ฆ, resolve ํจ์๊ฐ ์คํ๋๋ฉด then์ ํตํด ๋ฑ๋ก๋ cb๊ฐ micro task queue์ ์ ๋ฌ๋๋ฉฐ ์ฝ์คํ์ด ๋น์์ ๋ ์คํํ ์ ์๊ฒ ๋๋ค.
์์ โฆ ๋๊น์ง ๊ตดํ์ง ์๊ณ promise์ then์ด addEventListener์ ์ ์ฌํ๋ค๋ ์๊ฐ์ ๊ฐ์ ธ์์ค์ ๊ณ ๋ง์ต๋๋นใ
ใ
ใ
ใ
ใ
๐ ์์ฝ ๋ฐ ํ๋ฃจ ๊ฐ๋จ ํ๊ณ
- Promise, fetch, ๋๊ธฐ/๋น๋๊ธฐ ์๊ฒ ํ๋ฃจ์ข ์ผ ๋๋๋ ค๋ง์ ํ๋ฃจ
์ค๋์ ์ํ ์
- ๋๋ฃ๋คํ๊ณ ํ๋ฃจ์ข ์ผ ํ ๋ก ํ๋ฉด์ ๋จธ๋ฆฌ ์ธ๋งค๊ณ ๊ณต๋ถํ ์
- ์๊ณ ๋ฆฌ์ฆ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ํ์ด๋ ์
์ค๋์ ์์ฌ์ด ์
- ๊ณํํ๋ ๊ฐ์์ ์ฝ๋ ๊ตฌํ์ ๋ง์ด ๋ชปํ ์