๋ ธ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค๋ผ๋ ๋ง์ ๋ง์ด ๋ฃ๋๋ค! ์ด๋ฒคํธ ๊ธฐ๋ฐ! ๊ทธ๊ฒ ๋์ฒด ๋ญก๋๊น!
์ด๋ฒคํธ ๊ธฐ๋ฐ (event-driven)
์ด๋ฒคํธ ๊ธฐ๋ฐ (event-driven)์ด๋, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ฏธ๋ฆฌ ์ง์ ํด๋ ์์ ์ ์ํํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
์ ) ํด๋ฆญ, ๋คํธ์ํฌ ์์ฒญ
์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฑ๋ก?
์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์์๋ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋, ๋ฌด์์ ํ ์ง ๋ฏธ๋ฆฌ ๋ฑ๋กํด ๋๋ค.
์) ๋ฒํผ์ ํด๋ฆญํ ๋ ๊ฒฝ๊ณ ์ฐฝ์ ๋์ฐ๋๋ก ์ค์
ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๊ฒฝ๊ณ ์ฐฝ์ ๋์ฐ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํ๋ฉด, ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์ฝ๋ฐฑ ํจ์๊ฐ ์คํ๋์ด ๊ฒฝ๊ณ ์ฐฝ์ด ๋ฌ๋ค.
๋ ธ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฏ๋ก, ์ด๋ฒคํธ ๋ฐ์์, ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋ฑ๋กํด๋ ์ฝ๋ฐฑํจ์๋ฅผ ํธ์ถํ๋ค.
๋ฐ์ํ ์ด๋ฒคํธ๊ฐ ์๊ฑฐ๋, ์ด๋ฒคํธ๋ฅผ ๋ค ์ฒ๋ฆฌํ๋ฉด, ๋ ธ๋๋ ๋ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๊น์ง ๋๊ธฐํ๋ค.
์ด๋ฒคํธ๊ฐ ์ฌ๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋? ์ด๋ค ์์๋ก ์ฝ๋ฐฑํจ์๋ฅผ ํธ์ถํ ์ง๋ '์ด๋ฒคํธ ๋ฃจํ'๊ฐ ํ๋จํ๋ค!
์ด๋ฒคํธ ๋ฃจํ
: ์ด๋ฒคํธ ๋ฐ์ ์ ํธ์ถํ ์ฝ๋ฐฑ ํจ์๋ค์ ๊ด๋ฆฌํ๊ณ , ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์์ ์คํ ์์๋ฅผ ๊ฒฐ์ ํ๋ ์ญํ ์ ๋ด๋นํ๋ค. ๋ ธ๋๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์์ ์ ๋ฐ๋ณตํ๋ฏ๋ก '๋ฃจํ'
๋ฐฑ๊ทธ๋ผ์ด๋
: setTimeout๊ฐ์ ํ์ด๋จธ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ค์ด ๋๊ธฐํ๋ ๊ณณ. ์ฌ๋ฌ ์์ ์ด ๋์์ ์คํ๋ ์ ์๋ค.
ํ์คํธ ํ (์ฝ๋ฐฑ ํ)
: ์ด๋ฒคํธ ๋ฐ์ ํ, ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ํ์คํฌ ํ๋ก ํ์ด๋จธ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ณด๋ธ๋ค. ์ ํด์ง ์์๋๋ก ์ฝ๋ฐฑ๋ค์ด ์ค์ ์์๋๋ค. ์ฝ๋ฐฑ๋ค์ ์๋ฃ๋ ์์๋๋ก ์ค์ ์์์ง๋ง, ํน์ ํ ๊ฒฝ์ฐ์๋ ์์๊ฐ ๋ฐ๋๊ธฐ๋ ํ๋ค.
์ด๋ฒคํธ ๋ฐ์ ์์
function run() {
console.log('3์ด ํ ์คํ');
}
console.log('์์');
setTimeout(run, 3000);
console.log('๋');
1. ์ ์ญ์ปจํ ์คํธ์ธ anonymous๊ฐ ํธ์ถ์คํ์ ๋ค์ด๊ฐ.
2. setTimeout()์ด ํธ์ถ ์คํ์ ๋ค์ด๊ฐ
3. setTimeout()์ด ๋จผ์ ์คํ. ํ์ด๋จธ์ ํจ๊ป run ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋ณด๋ด๊ณ , setTimeout()์ ํธ์ถ์คํ์์ ๋น ์ง๋ค.
4. anonymous๊ฐ ํธ์ถ์คํ์์ ๋น ์ง๋ค.
5. ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ 3์ด๋ฅผ ์ธ๊ณ run ํจ์๋ฅผ ํ์คํฌ ํ์ ๋ณด๋ธ๋ค.
6. ์ด๋ฒคํธ ๋ฃจํ๋ ํธ์ถ ์คํ์ด ๋น์ด์์ผ๋ฉด ํ์คํฌ ํ์์ ํจ์๋ฅผ ํ๋์ฉ ๊ฐ์ ธ์ ํธ์ถ ์คํ์ ๋ฃ๊ณ ์คํํ๋ค.
์ด๋ฒคํธ ๋ฃจํ๊ฐ run ์ฝ๋ฐฑ ํจ์๋ฅผ ํ์คํฌ ํ์์ ๊บผ๋ด ํธ์ถ ์คํ์ผ๋ก ์ฌ๋ฆฐ๋ค.
7. ํธ์ถ ์คํ์ผ๋ก ์ฌ๋ ค์ง run์ ์คํ๋๊ณ , ์คํ ์๋ฃ ํ ํธ์ถ ์คํ์์ ๋น์์ง๋ค.
8. ์ด๋ฒคํธ ๋ฃจํ๋ ํ๊ทธ์ค ํ์ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ค์ด์ฌ ๋๊น์ง ๊ณ์ ๋๊ธฐํ๋ค.
โ ์ด ๋๋ฌธ์, setTimeout์ด ์ ํํ์ง ์์ ์ ์๋ค!
๋ง์ฝ, ํธ์ถ ์คํ์ ํจ์๊ฐ ๋๋ฌด ๋ง์ด ๋ค์ด ์์ผ๋ฉด, 3์ด๊ฐ ์ง๋ ํ์๋ run ํจ์๊ฐ ์คํ๋์ง ์์ ์ ์๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ ํธ์ถ ์คํ์ด ๋น์ด ์์ ๋๋ง ํ์คํฌ ํ์ ์๋ runํจ์๋ฅผ ์คํ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ!
- anonymousํจ์ : ์ฒ์ ์คํ ์์ ์ ์ญ ์ปจํ ์คํธ(global context)๋ฅผ ์๋ฏธํ๋ค.
- ์ปจํ ์คํธ: ํจ์๊ฐ ํธ์ถ๋์์๋, ์์ฑ๋๋ ํ๊ฒฝ์ ์๋ฏธ.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์คํ์ ๊ธฐ๋ณธ์ผ๋ก ์ ์ญ ์ปจํ ์คํธ ์์์ ์คํ๋๋ค.
์ถ์ฒ
Node.js๊ต๊ณผ์
SOPT 31๊ธฐ Serverํํธ
'Server๐งค > Node.JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js] CI/CD ๊ตฌ์ถํ๊ธฐ - Github Actions, AWS Codedeploy (Prisma, yarn run build keeps running) (0) | 2023.01.09 |
---|---|
[Node.js/Error] Cannot find module '~.json' (0) | 2022.10.26 |
ํธ์ด์คํ ์ด๋? / var๋ฅผ ์ง์ํ๊ณ const, let ์ฌ์ฉํ๋ผ๋ ์ด์ (0) | 2022.10.03 |
[Node.js] NPM ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2022.06.21 |
[Node.js] NPM ๋ชจ๋ (0) | 2022.06.12 |