ํ์ ๋๊ธฐ์ ๋น๋๊ธฐ์ ๋ํ ์ฐจ์ด๊ฐ ๋ฌด์์ด๋๋ ์ง๋ฌธ์ ๋ฐ์ผ๋ฉด, ์ด๋ ๊ฒ ๋ตํ๊ณ ํ๋ค.
” ๋๊ธฐ๋ ํ๊ฐ์ง ์ผ๋ง ํ ์ ์๋ ๊ฒ์ด๊ณ , ๋น๋๊ธฐ๋ ์ฌ๋ฌ๊ฐ์ง ์ผ์ ๋ฐ๊พธ์ด๊ฐ๋ฉฐ ๋์์ ์คํํ ์ ์๋ ๋ฐฉ์์ ๋งํฉ๋๋ค “
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ถ๊ฐ์ ์ธ ์ง๋ฌธ์ด ๋ค์ด์จ๋ค. ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ ๊ทธ๋ผ ๋ฌด์จ์ฐจ์ด์์?
” ๋๊ธฐ์ ๋ธ๋กํน์ด ๋น์ทํ๊ณ ๋น๋๊ธฐ์ ๋ ผ๋ธ๋กํน์ด ๋น์ทํ ๋ฐฉ์์๋๊น์..? “
๋น์ฐํ ๋น์ทํ ๊ฐ๋ ์ด๋ฉด, ๊ตณ์ด ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ด๋ผ๋ ๋จ์ด๋ฅผ ์ฐ์ง ์๊ฒ ์ง..๐ค
๊ฒฐ๋ก ์ ์ผ๋ก ๋งํ์๋ฉด, ๋ ๊ฐ๋ ์ ๋ช ํํ๊ฒ ๋ค๋ฅด๋ค! ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์ดํด๋ณด๋๋ก ํ์ ๐
๋๊ธฐ/๋น๋๊ธฐ, ๋ธ๋กํน/๋ ผ๋ธ๋กํน ์๋ฏธ
๐ ๋๊ธฐ / ๋น๋๊ธฐ๋ ์์ ์ ์์์ ๊ด๋ จ๋ ๊ฐ๋ ์ด๋ค.
๋๊ธฐ์ ๋น๋๊ธฐ๋ฅผ ์์ด๋ก Synchronous์ Asynchronous๋ก ํํํ๋๋ฐ
Sync๋ ์์ด๋ก ์ผ์น, ์กฐํ๋ฅผ ๋ปํ๊ณ ,
๋ค์ ๋์ค๋ Chronous๋ ์๊ฐ์ ๋ปํ๋ค.
์ด๋ฅผ ์ข ํฉํ์๋ฉด, ์๊ฐ์ ๋ง์ถฐ์ ๋์ํ๋ ๋ฐฉ์์ ๋๊ธฐ์์ด๋ผ๊ณ ํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ‘์๊ฐ์ ๋ง์ถฐ์ ๋์ํ๋ค’ ๋ผ๋ ๋ง์ ์๋ฏธ๋ ๋ฌด์์ผ๊น?
์ฌ๊ธฐ์ ๋งํ๋ ‘์๊ฐ์ ๋ง์ถฐ์ ๋์ํ๋ค’ ๋ผ๋ ๋ง์ ์๋ฏธ๋ ํ๋์ ์์ ์ด ๋๋์ผ ๋ค๋ฅธ ์์ ์ด ์คํ ๋ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
( ๋ง์ฝ, ์ฌ๋ฌ ์์ ์ด ๋์์ ์คํ๋๋ค๋ฉด ์ด๋ค ์์ ์ด ๋จผ์ ๋๋ ์ง ์์ธกํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ ์๊ฐ์ ๋ง์ถฐ์ ๋์ํ๋ ๋ฐฉ์์ด ์๋๊ธฐ ๋๋ฌธ์ ๋๊ธฐ์์ด ์๋๋ผ๊ณ ํ ์ ์๋ค! )
๋๊ธฐ์์ ํ๋์ ์์ ์ด ๋๋์ผ ๋ค์ ์์ ์ด ์คํ๋๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ์์ ์์๋ฅผ ๋ณด์ฅํ๋ค.
๋ฐ๋ฉด ๋น๋๊ธฐ ๋ฐฉ์์ ์์ ์ด ๋๋์ง ์์ ์ํ๋ก ๋ค๋ฅธ ์์ ์ด ์คํ๋๊ธฐ ๋๋ฌธ์ ์ด๋ค ์์ ์ด ๋๋ ์ง ์์ธกํ ์ ์๋ค.
์ด๋ฅผ ์ ๋ฆฌํ์๋ฉด, ์์ฒญํ ์์๊ฐ ์๋ต์์ ์ง์ผ์ง๋ค๋ฉด ๊ทธ ๋ฐฉ์์ ๋๊ธฐ์์ด๋ผ ํ ์ ์๊ณ
๋ง์ฝ ์ง์ผ์ง์ง ์๋๋ค๋ฉด ์ด๋ ๋น๋๊ธฐ์์ด๋ผ๊ณ ํ ์ ์๋ค.
๐ ๋ธ๋กํน / ๋ ผ๋ธ๋กํน์ ์์ ํ๋ฆ์ ๋ง๋ ์ฌ๋ถ์ ๊ด๋ จ๋ ๊ฐ๋ ์ด๋ค.

์ ๊ทธ๋ฆผ์์ ์ผ์ชฝ์ ๋ธ๋กํน ์ค๋ฅธ์ชฝ์ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ๋์์ ๋ํ๋ธ๋ค.
์ผ์ชฝ ๊ฐ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ฌ ์์ ์ ์งํ์ ์ค๋จํ๋ค.
๋ฐ๋ฉด ์ค๋ฅธ์ชฝ์ ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ฌ ์์ ์งํ์ ์ค๋จํ์ง ์๋๋ค.
์ฆ ๋ค๋ฅธ ์์ ์ ์ํํ ๋ ์์ ์ ํ๋ฆ์ ๋ง๋๋, ์๋ง๋๋์ ๋ฐ๋ผ ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ด ๊ฒฐ์ ๋๋ค.
๋ธ๋กํน๊ณผ ๋
ผ๋ธ๋กํน์ ์ค๋ช
ํ ๋ ํํ ๋์ค๋ ๊ฐ๋
์ด ์ ์ด๊ถ
์ด๋ค.
์ ์ด๊ถ์ ํ๋ก์ธ์ค์ ์คํ ํ๋ฆ์ ์ ์ดํ ์ ์๋ ๊ถ๋ฆฌ๋ฅผ ๋ปํ๋๋ฐ,
๋ธ๋กํน ๋ฐฉ์์ ๊ฒฝ์ฐ ์ ์ด๊ถ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์คํ๋ ๋ ๋๊ธฐ๊ฒ ๋๋ค. ์ด ๋ ๊ธฐ์กด์ ํ๋ก์ธ์ค๋ ์ ์ด๊ถ์ด ์์ผ๋ฏ๋ก, ์คํ๋์ง ๋ชปํ๋ค.
๋ฐ๋ฉด ๋ ผ๋ธ๋กํน์ ์ ์ด๊ถ์ ๊ธฐ์กด์ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ๊ฐ์ง๊ณ ์๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์คํ๋์ด์ผ ํ ๋๋ ์ ์ด๊ถ์ ํตํด ์คํ๋ง ์ํค๊ณ , ๊ธฐ์กด์ ํ๋ก์ธ์ค ๋ํ ์์ ์ ์ด์ด๊ฐ๋ค.
๋ ๊ฐ๋ ์ ์ข ํฉํ์ฌ ์๊ฐํด๋ณด๊ธฐ
๋ ๊ฐ๋ ์ ์์ธํ ์ดํด๋ด๋ ๋ธ๋กํน์ด ๋๊ธฐ์์ด๊ณ ๋ ผ๋ธ๋กํน์ด ๋น๋๊ธฐ์์๋์ผ? ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋๊ฑฐ์ง? ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์๋ค.
์ด๋ด ๋ ๊ตฌ์ฒด์ ์ธ ์์๋ฅผ ํตํ์ฌ ์ดํดํ๋๊ฒ ๊ฐ์ฅ ๋น ๋ฅด๋ค.
์์ ์ฒ๋ฆฌ ์์์ ๊ด๋ จ๋ ๊ฐ๋ ์ด 2๊ฐ์ง (๋๊ธฐ/๋น๋๊ธฐ)
์์ ํ๋ฆ์ ๋ง๋ ์ฌ๋ถ์ ๊ด๋ จ๋ ๊ฐ๋ ์ด 2๊ฐ์ง (๋ธ๋กํน/๋ ผ๋ธ๋กํน)
์ด๋ฅผ ์ข ํฉํ๋ฉด ์ด 4๊ฐ์ง์ ๋์ ๋ฐฉ์์ด ๋์ฌ ์ ์๋ค.
- ๋๊ธฐ + ๋ธ๋กํน - ๋น๋๊ธฐ + ๋ธ๋กํน - ๋๊ธฐ + ๋ ผ๋ธ๋กํน - ๋น๋๊ธฐ + ๋ ผ๋ธ๋กํน
๋น๋๊ธฐ+๋ ผ๋ธ๋กํน

์ ์ฝ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๊ณตํ๋ setTimeout ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ์์ ํ ์คํธ๋ฅผ ํ์ํ๋ ๋์์ ์ํํ๋ค.
์ด ๋ฐฉ์์ ์์ ๋์ดํ 4๊ฐ์ง ๋ฐฉ์์ค ์ด๋ ๋ฐฉ์์ ํด๋นํ ๊น?
์ฐ์ ์ฝ์์ ์ฐํ๋ ์์ ๊ฒฐ๊ณผ๊ฐ ์ฝ๋์ ์์ ์์์ ๋ค๋ฅด๊ฒ ๋์ํ๋ค.
Start
์ end
๊ฐ ์ฝ์์ ํ์๋๊ณ ๋์ค์ Hello after 2 Seconds
๊ฐ ์ฝ์์ ํ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ ์ฝ๋๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ํ setTimeout์ด๋ผ๋ ํจ์๋ฅผ ์คํํ๊ธฐ ์ํ์ฌ ๋ฉ์ธ ์ค๋ ๋์ ์์ ํ๋ฆ์ด ๋งํ์ง ์๋๋ค.
๋ง์ฝ ๋งํ๋๋ผ๋ฉด, end
๊ฐ ๋จผ์ ์ถ๋ ฅ๋๋๊ฒ ์๋๋ผ Hello after 2 Seconds
๊ฐ ๋จผ์ ์ถ๋ ฅ๋์์ ๊ฒ์ด๋ค.
์ฆ ์ ์ด๊ถ์ ๋ฉ์ธ์ค๋ ๋๊ฐ ๊ฐ์ง๊ณ ์๊ณ ์์ ํ๋ฆ์ ๋ง์ง ์์๊ธฐ ๋๋ฌธ์
์ ์ฝ๋๋ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ ์๋ค.
์ข ํฉํ์๋ฉด, ์ ์ฝ๋๋ (๋น๋๊ธฐ+๋ ผ๋ธ๋กํน) ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ ์๋ค.
์ด์ฒ๋ผ, ์ฐ๋ฆฌ๊ฐ ํํ ์๊ธฐํ๋ ๋น๋๊ธฐ ํจ์๋ค์ ์ฌ์ค (๋น๋๊ธฐ+๋ ผ๋ธ๋กํน) ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ ์๋ ๊ฒ์ด ๋๋ถ๋ถ์ด๋ค.
๋น๋๊ธฐ+๋ธ๋กํน
๋ณดํต ๋น๋๊ธฐ+๋ธ๋กํน ๋ฐฉ์์ ํ์ค์์ ๊ฑฐ์ ์ฐ์ด์ง ์๋๋ค.
๋๋ถ๋ถ์ ๋น๋๊ธฐ+๋ธ๋กํน ๋ฐฉ์์ ๊ฐ๋ฐ์๊ฐ ๋น๋๊ธฐ+๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ค๋ค๊ฐ ์ค์ํ๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ค.
๊ทธ๋์ ์ํฐํจํด์ด๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค.
const getData = () => { return new Promise((resolve) => { setTimeout(() => { console.log('data arrived'); resolve(); }, 3000); }); } const myFunc = async () => { console.log('start'); await getData(); console.log('before data arrived jobs'); } myFunc(); console.log('after data arrived jobs');

์ ์ฝ๋๊ฐ ์๋ฒฝํ๊ฒ ๋น๋๊ธฐ+๋ธ๋กํน ๋ฐฉ์์ ์๋์๋ ์๊ฒ ์ง๋ง ์ด๋์ ๋ ์ฌํ์ ํด๋ดค๋ค.
๊ฐ๋ฐ์๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก getData๋ผ๋ ํจ์๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ๊ทธ ์ดํ์ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๊ธฐ ์ ์ ํด์ผ๋๋ ์์ ๋ค์ ์ํํ๋ ค๊ณ ๊ณํํ์๋ค.
ํ์ง๋ง, await๊ฐ getData() ํจ์ ์์ ๋ถ์ด์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๊ฐ ์ค๊ธฐ์ ์ ํด์ผ๋๋ ์์ ๋ค์ ๋ธ๋กํน๋์ด ์ํ๋์ง ๋ชปํ๋ค.
๋ฐ๋ฉด myFunc() ํธ์ถ ์ดํ์ ์ํ๋๋ after data arrived jobs์ async ๋งฅ๋ฝ์ ์ํด์์ง ์๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋จผ์ ์คํ์ด ๋๋ค.
์ด์ฒ๋ผ ๋น๋๊ธฐ+๋ธ๋กํน ๋ฐฉ์์ ์ฌ์ค ๋น๋๊ธฐ+๋ ผ๋ธ๋กํน์ผ๋ก ์คํ๋์ด์ผ ํ๋๋ฐ ๊ฐ๋ฐ์์ ์ค์๋ก ์๋์น ์๊ฒ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ค.
๋๊ธฐ+๋ธ๋กํน
๋๊ธฐ ๋ธ๋กํน ๋ฐฉ์์ ์์ ์ ์์๋ฅผ ๋ณด์ฅํ๊ณ , ๋๊ธฐ ํ๋ ๋์ ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์๋ ๋ฐฉ์์ ๋ปํ๋ค.
๋ํ์ ์ธ ์์๋ก๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ผ์ ์ฝ์ด ์ฝ๋ readFileSyncํจ์๊ฐ ์๋ค.
const fs = require('fs'); const data = fs.readFileSync('example.txt', 'utf8'); console.log("File read complete");
์ ์ฝ๋์์ example.txt๋ผ๋ ํ์ผ์ ์ฝ๋ ๋์ ๋ฐ์ ์๋ console.log ํจ์๋ฅผ ์คํํ์ง ์๋๋ค. ์ฆ ๋ธ๋กํน ์ํ๊ฐ ์ ์ง๋๋ฉฐ, ์์ ์ ์ฒ๋ฆฌ ์์๋ ๋ณด์ฅ๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋๊ธฐ+๋ ผ๋ธ๋กํน
๋๊ธฐ+๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์์ ์ ์ฒ๋ฆฌ ์์๋ฅผ ๋ณด์ฅํ๋ฉด์ ๋์์ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ ๋ฐฉ์์ ๋ปํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ async/await ๊ตฌ๋ฌธ์ด ๋๊ธฐ+๋ ผ๋ธ๋กํน ๋ฐฉ์์ ๋ถ๋ถ์ ์ผ๋ก ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.

์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ฉ์ธ ์ค๋ ๋๋ ์ ์ด๊ถ์ ๋๊ธฐ์ง ์๊ณ ๊ณ์ ๋์์ ํ๋ฉฐ ์ฝ์์ ์ถ๋ ฅ์ ํ๋ค. ์ฆ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ ์๋ค.
ํ์ง๋ง order1๊ณผ order2์ ๊ฐ์ ์์๋ฅผ ์ง์ผ์ผํ๋ ๋ถ๋ถ์์๋ async์ await์ ์ฌ์ฉํจ์ผ๋ก์จ ๋๊ธฐ์์ผ๋ก๋ ๋์ํ๊ณ ์๋ค.
์ ๋ฆฌํ๋ฉฐ..
์ฌ์ค ๋๊ธฐ์ ๋น๋๊ธฐ, ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ ์ฐจ์ด์ ๋ํด ๋ช ํํ๊ฒ ๋ชฐ๋์ง๋ง, ์ด๋ฒ ๊ธฐํ์ ํ์ต์ ํ๋ฉด์ ๋ถ๋ฆฌ๋ ๊ฐ๋ ์ผ๋ก ๋ช ํํ๊ฒ ์ดํดํ ์ ์์๋ค.
ํํ ์ฌ์ฉํ๋ ๋น๋๊ธฐ ํจ์๊ฐ ์ฌ์ค์ ๋น๋๊ธฐ + ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋์ํ๊ณ ์๋ค๋ ์ฌ์ค๋ ์๋กญ๊ฒ ์ ์ ์์๋ค.
'CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ด์ง ๊ต์ฒด์ ํ๋ ์ ํ ๋น์ด๋? (0) | 2023.05.16 |
---|---|
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋? (4) | 2023.05.07 |
์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฌธ์ ์ ์? (0) | 2023.05.03 |
๊ต์ฐฉ ์ํ (0) | 2023.04.07 |
ํ๋ก์ธ์ค ๋๊ธฐํ๋ (0) | 2023.03.15 |