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

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section2 Unit3 JS/Node ๋น„๋™๊ธฐ - ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ

๋ฐ˜์‘ํ˜•

 

์ถœ์ฒ˜: https://adrianmejia.com/asynchronous-vs-synchronous-handling-concurrency-in-javascript/


Section2 Unit3 [JS/Node] ๋น„๋™๊ธฐ - ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ (callback, promise, async/await)

 

๐Ÿ“Œ Chapter2. ๋น„๋™๊ธฐ

 ๋™๊ธฐ(synchronous)๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ์–ด๋–ค ์ž‘์—…์ด ์ˆ˜ํ–‰ ์ค‘์ด๋ฉด ๋‹ค์Œ ํƒœ์Šคํฌ๋Š” ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.
• ๋น„๋™๊ธฐ(asynchronous)๋Š” ํƒœ์Šคํฌ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ ํ•˜๋”๋ผ๋„ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ๋‹ค์Œ ํƒœ์Šคํฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. 

• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์–ธ์–ด์ด์ง€๋งŒ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

• ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ฝœ๋ฐฑํ•จ์ˆ˜, Promise, async/await ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  → Promise, async/await๋ฅผ ๋”ฐ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜๋‹ค. 

 

 

ES6, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ”„๋กœ๋ฏธ์Šค (Promise)

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

fay-story.com

 

ES8, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ async / await ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

async/await ๋ฌธ๋ฒ•์€ ES8์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ๋ฒ•์œผ๋กœ์„œ, Promise ๋ฅผ ๋”์šฑ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. โฌ‡๏ธŽ ํ”„๋กœ๋ฏธ์Šค๋Š” ์•„๋ž˜ ๊ธ€ ์ฐธ๊ณ  ES6, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ”„๋กœ๋ฏธ์Šค (Promise) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ

fay-story.com

 

์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑํ—ฌ ๋“ฑ์˜ ๋ฌธ์ œ์—์„œ ๋ฒ—์–ด๋‚˜๊ธฐ ์œ„ํ•ด ES6์—์„œ๋Š” Promise๊ฐ€ ๋„์ž…๋˜์—ˆ๊ณ , ES8์—์„œ๋Š” async/await๊ฐ€ ๋„์ž…๋˜์—ˆ๋‹ค. Promise๋ฅผ ์—ด์‹ฌํžˆ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๊ฐ€ ๋ฌธ๋“ async๊ฐ€ ์žˆ๋Š”๋ฐ Promise๋ฅผ ๊ตณ์ด ๊ณต๋ถ€ํ•ด์•ผํ•ด? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ chatGPTํ•œํ…Œ ๋ฌผ์–ด๋ดค์—ˆ๋‹ค.


Q. js์—์„œ async await๋‚˜ ๋‚˜์™”๋Š”๋ฐ promise๋ฅผ ํ•™์Šตํ•  ํ•„์š”๊ฐ€ ์žˆ๋‚˜์š”?

A. ๋„ค, JavaScript์—์„œ async/await๋Š” Promise๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Promise๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์žฅ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. Promise๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ async/await๋Š” Promise๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Promise๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ๊ตฌ๋ฌธ์ ์ธ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ async/await๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Promise์˜ ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‹ค์ œ๋กœ Promise๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Promise๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, async/await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Promise๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Promise์˜ ๋™์ž‘๊ณผ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


์˜คํ™ async ํ•จ์ˆ˜๊ฐ€ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋‹ˆ Promise๋ฅผ ๊ณต๋ถ€ํ•˜๋Š”๊ฑด ํ•„์š”ํ•œ ์ผ์ด์—ˆ๋‹ค๋Š” ๊ฒฐ๋ก ์— ์ด๋ฅด๋ €๋‹ค. 

 

๐Ÿ“Œ Chapter3. Node.js

 "๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ JavaScript ๋Ÿฐํƒ€์ž„”

• ๋ชจ๋“ˆ์ด๋ž€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“  ๋ถ€๋ถ„. fs(File System) ๋ชจ๋“ˆ์€, PC์˜ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

Node.js ๋‚ด์žฅ ๋ชจ๋“ˆ ๋ชฉ๋ก: Node.js v16.14.2 Documentation

 

Node.js ๋ถ€๋ถ„์€ ์šฐ์„  ์ •๋ฆฌ๋Š” ์•ˆํ•ด๋‘๊ณ  ํ•œ๋ฒˆ ํ›‘์–ด๋ณด๊ธฐ๋งŒ ํ–ˆ๋‹ค..! ๋‚˜์ค‘์— ์ข€ ๋” ์ต์ˆ™ํ•ด์ง€๋ฉด ์ •๋ฆฌํ•ด๋ด์•ผ์ง€.

 

โญ๏ธ ๊ณผ์ œ. Part 1 - ํƒ€์ด๋จธ API

• callback, promise, async/await ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๋Š” ์‹œ๊ฐ„ ๐ŸŽˆ

→ ์„ธ ๊ฐ€์ง€ ํŒจํ„ด์˜ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด ํ•™์Šตํ–ˆ๋‹ค. (์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋™์ž‘์„ ํ•œ๋‹ค.) ํƒ€์ด๋จธ API ๊ณผ์ œ๋ฅผ ํ•˜๋ฉด์„œ promise์™€ async/await ์— ๋Œ€ํ•ด ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค. 

→ ์„ธ ๊ฐ€์ง€ ํŒจํ„ด์— ๋Œ€ํ•œ ํ•™์Šต์ด ๋˜์–ด์žˆ๋‹ค๋ฉด ์ดํ•ดํ•˜๋Š”๋ฐ ์–ด๋ ต์ง€๋Š” ์•Š์€ ๊ณผ์ œ์˜€๋‹ค.

 

โญ๏ธ ๊ณผ์ œ. Part 2 - fs ๋ชจ๋“ˆ

 fs ๋ชจ๋“ˆ ๊ณผ์ œ๋Š” ์ง„ํ–‰์ค‘! ์ฒซ ์‹œ์ž‘๋ถ€ํ„ฐ ํ—ค๋งค์„œ ์ž˜ ์•ˆํ’€๋ ธ๋Š”๋ฐ, ์‚ฌ์‹ค ์—„์ฒญ ๊ฐ„๋‹จํ•œ ๋ถ€๋ถ„์„ ํ—ค๋งค๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ๊ฑฐ... ๐Ÿ˜ญ ๊ทธ๋ž˜๋„ ๋น„๋™๊ธฐ ํŒจํ„ด์— ๋Œ€ํ•ด ์ข€ ๋” ๊ณต๋ถ€ํ•˜๊ณ  ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋‚ด์ผ ํŽ˜์–ด ์‹œ๊ฐ„์— ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค..!

 


๐ŸŒ™  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

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

๋ฐ˜์‘ํ˜•