TIL/JavaScript

TIL 29: [JS/Node] ๋น„๋™๊ธฐ - ํƒ€์ด๋จธ/ํŒŒ์ผ์—ด๊ธฐ

Deviloper๐Ÿ˜ˆ 2021. 9. 1. 00:09

์˜ค๋Š˜์€ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋น„๋™๊ธฐ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์™„์ „ํžˆ ์ฒ˜์Œ ๋ฐฐ์šด ๋ถ€๋ถ„์ด๋ผ ์•„์ง ๋งŽ์ด ๋‚ฏ์„ค์ง€๋งŒ ์ž์ฃผ ๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ง€๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

 

๋น„๋™๊ธฐ ์ •์˜ ๋ฐ ์‚ฌ๋ก€

๋™๊ธฐ์™€ ๋‹ฌ๋ฆฌ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ์š”์ฒญ๊ณผ ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ฒญ ์ดํ›„ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์ด ๊ณ„์†ํ•ด์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

์‚ฌ๋ก€: DOM Elemenet์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ, ํƒ€์ด๋จธ, ์„œ๋ฒ„์— ์ž์› ์š”์ฒญ ๋ฐ ์‘๋‹ต

 

 

 

Callback

Async(๋น„๋™๊ธฐ)์—์„œ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๋ฅผ ํ†ต์ œํ•˜๊ณ  ์‹ถ์„ ๋•Œ Callback ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Error Handling์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ (err, data) ์ˆœ์„œ๋กœ ๋ฐ›๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Callback ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” Callback Hell์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

Promise

Callback์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ผ์ข…์˜ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— new Promise()๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ Callback์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ , ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ resolve์™€ reject ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ดํ›„ Callback๊ณผ ๋‹ค๋ฅด๊ฒŒ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•ด๋„ .then()๊ณผ return์„ ์ด์šฉํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ catch()๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ํ•œ๋ฒˆ์— ์—๋Ÿฌ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Promise.all() ๋ฉ”์„œ๋“œ๋Š” ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์— ์ฃผ์–ด์ง„ ๋ชจ๋“  Promise๋ฅผ ์ดํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ดํ–‰ ๊ฒฐ๊ณผ๊ฐ’์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง„ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์— ํฌํ•จ๋œ ๋ชจ๋“  ๊ฐ’์„ ๋‹ด์€ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ Promise ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฑฐ๋ถ€ํ•˜๋ฉด, ๋‹ค๋ฅธ ํ”„๋กœ๋ฏธ์Šค์˜ ์ดํ–‰ ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ์ฒซ ๋ฒˆ์งธ ๊ฑฐ๋ถ€ ์ด์œ ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Async / Await

์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” argument ์•ž์— async๋ฅผ ๊ผญ ์จ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Promise์™€ ๋‹ฌ๋ฆฌ ๋ฆฌํ„ด๋ฌธ๋„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

ํƒ€์ด๋จธ ๊ด€๋ จ API

setTimeout(callback, millisecond)

setTimeout(function() {
  console.log('5์ดˆ ํ›„ ์‹คํ–‰');
}, 5000);
//123

์ผ์ • ์‹œ๊ฐ„ ํ›„์— ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. 

๋ฆฌํ„ด ๊ฐ’์€ ์ž„์˜์˜ ํƒ€์ด๋จธ ID์ž…๋‹ˆ๋‹ค.

 

 

setInterval(callback, millisecond)

setInterval(function() {
  console.log('5์ดˆ๋งˆ๋‹ค ์‹คํ–‰');
}, 5000);
//345

์ผ์ •์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ๊ฐ€์ง€๊ณ  ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๋ฆฌํ„ด ๊ฐ’์€ ์ž„์˜์˜ ํƒ€์ด๋จธ ID์ž…๋‹ˆ๋‹ค.

 

clearInterval(timerId)

const timer = setInterval(function() {
  console.log('5์ดˆ๋งˆ๋‹ค ์‹คํ–‰');
}, 5000);
clearInterval(timer);

setInterval๋กœ ๋ฐ˜๋ณต ์‹คํ–‰์ค‘์ธ ํƒ€์ด๋จธ๋ฅผ ์ข…๋ฃŒํ•ด์ค๋‹ˆ๋‹ค. 

๋ฆฌํ„ด ๊ฐ’์€ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

Node.js ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ•

fs.readFile(path[, options], callback)๋ฅผ ์ด์šฉํ•ด์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํŒŒ์ผ ๋‚ด์šฉ ์ „์ฒด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

path์—๋Š” ํŒŒ์ผ๋ช…์ด๋‚˜ ํŒŒ์ผ URL ๋“ฑ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

options๋Š” ๊ฐ์ฒด ํ˜•ํƒœ ๋˜๋Š” ๋ฌธ์ž์—ด๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

callback์€ ํŒŒ์ผ์„ ์ฝ๊ณ  ๋‚œ ํ›„์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.