230210(๊ธ)
๐ ์ฑ์ฅ์ผ์ง 3.1
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐ณ ํค์๋ (1.0)
์ต๋ํ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ, ์ถํ์ ๋ณด๋ฉด์ ์ค์ค๋ก ์ค๋ช
๐ ๊ฒฝํ ์์ฃผ๋ก (2.0)
๋จ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ๋ณด๋ค ๋ฌด์์ ๋ฐฐ์ ๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์งง๊ณ ๊ฐ๋จํ๊ฒ ์์ฑ
โ๏ธ ์ ํด์ง ํ ํ๋ฆฟ์ ๋ง์ถฐ์ (3.0)
ํค์๋, ๊ฒฝํ ๋ชจ๋ ์ข๋ค. ๋ค๋ง ๋งค์ผ ์์ฑํ๊ธฐ๋ก ๋ง์ ๋จน์๋งํผ ํต์ฌ๋ง ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ ์ ์๊ฒ ํ ํ๋ฆฟ์ ์์ฑ (3.1) 230102๋ถํฐ ์์๋๋ ํ์ต์ ๊ดํ ๋ด์ฉ ์ถ๊ฐ
๐ ์ค๋์ ํค์๋
๋๊ธฐํ
- ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๋ค์ด ์ํ๋๋ ์์ ์ ๋ง์ถ๊ณ ์๋ก ์๊ณ ์๋ ์ ๋ณด๊ฐ ์ผ์นํ๊ฒ ํ๋ ๊ฒ
- ํฌ๊ฒ ์์ ๊ฐ๋ ์ ๋๊ธฐํ๊ฐ ์๊ณ ๊ณต์ ์์์ ํ๋ฒ์ ํ๋๋ง ์ ๊ทผํ๊ฒ ํ๋ ๊ฐ๋ ์ ๋๊ธฐํ๊ฐ ์๋ค.
- ๋๊ธฐํ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ฎคํ ์ค, ์ธ๋งํฌ์ด, ๋ชจ๋ํฐ ๋ฑ์ด ์๋ค.
๋น๋๊ธฐ ์ ๋ ฅ
- ๋น๋๊ธฐ์ ์ผ๋ก ์ ๋ ฅ์ ๋ฐ๋ ๊ฒ์ผ๋ก ์ ์ ํ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ปค๋์ I/O ์์ฒญ์ ๋ณด๋ธ๋ค.
- ์ปค๋์์ ์์ฒญ์ ์๋ฝํ๋ฉด ํธ์ถ ์ค๋ ๋๋ ์ปค๋์ด I/O ์์ ์ด ์๋ฃ๋์์์ ์ค๋ ๋์ ์๋ฆด ๋๊น์ง ๋ค๋ฅธ ์์ ์ ๊ณ์ ์ฒ๋ฆฌํ๋ค.
- ์๋ฆผ์ด ์ค๊ฒ ๋๋ฉด ํ์ฌ ์์ ์ ์ค๋จํ๊ณ ํ์์ ๋ฐ๋ผ I/O ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
๋ฉํฐ ์ค๋ ๋
- ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๋ก ํ๋ก์ธ์ค๋ฅผ ๋์์ ์คํํ๋ ๊ฒ
- ๊ธฐ์กด์ ์ฑ๊ธ ์ค๋ ๋(blocking)์์ ๋ฉํฐ ์ค๋ ๋(non-blocking)์ผ๋ก ๋์ด๊ฐ๋ฉฐ ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ก๋ค.
๋น๋๊ธฐ
- ๋๊ธฐ๊ฐ ์๋ ๊ฒ(asynchronous)
non-blocking
์ผ๋ก ํ ์คํฌ๋ฅผ ์ํํ๋ค.- ๋ณ๋ ฌ์ ์ผ๋ก ํ ์คํฌ๋ฅผ ์ํํ๋ค.
- ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋์ง ์๋๋ค.(์์ฒญํ ๊ทธ ์๋ฆฌ์์ ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง์ง ์๋๋ค.)
- ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๋ผ๋ ๊ทธ๋์ ๋ค๋ฅธ ์์ ์ด ๊ฐ๋ฅํ๋ค.
- ๋๊ธฐ๋ณด๋ค ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ด๋ ต๋ค.(์ค๊ณ๊ฐ ํ๋ค๋ค.)
- blocking ๋ค์ non-blocking ๋ค์์ผ๋ก ๋ฑ์ฅํ ๋ฐฉ๋ฒ
- ๋์์ ์ผ์ด๋์ง ์๋๋ค๋ ์๋ฏธ์ธ๋ฐ, ์ด ๋์ ๋์๋ ์์ฒญ๊ณผ ๋ฐํ์ด ๋์์ ์ผ์ด๋์ง ์๋๋ค๋ ์๋ฏธ์ด๋ค.
node.js์ event emitter
- web์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์๋ฏ์ด, nodejs์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ์ด์ ํด๋์ค
const EventEmitter = require('events');
const eventEmitter = new EventEmitter();
// ์ด๋ฒคํธ ์ด๋ฆ๊ณผ ๊ทธ ์ด๋ฒคํธ ํธ์ถ ์ ๋ถ๋ฌ์ฌ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํ๋ค.
eventEmitter.on('start', () => {
console.log('started');
});
// start๋ผ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.
eventEmitter.emit('start');
- ์ด๋ฐ eventEmitter๋ ๋จ์ผ ์ค๋ ๋์ธ nodejs๊ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ฐ ํต์ฌ์ ์ธ ์์๋ก ์์ฉํ๋ค.
- ๋๋ถ๋ถ์ nodejs์ ๋น๋๊ธฐ api๋ค์ด eventEmitter๋ฅผ ์์ํ๊ณ ์๋ค.(๊ณต์๋ฌธ์ ์ฐธ๊ณ )
์ฐธ๊ณ ์๋ฃ
- ์ฑ
ํผ์ ๊ณต๋ถํ๋ ์ปดํจํฐ ๊ตฌ์กฐ + ์ด์์ฒด์
- nodejs ๊ณต์๋ฌธ์ - event emitter
๐ ์์ฝ ๋ฐ ํ๋ฃจ ๊ฐ๋จ ํ๊ณ
๋ฏธ์
์ ์ฌ์ ํ ๊ฐ์ด ์์กํ์ง๋ง, ๋๋ฆ ๊ทธ๋์ ๊ณต๋ถํ ๊ฒ๋ค๊ณผ ํด์จ ๋ฏธ์
๋ค์ ์ ๋ฆฌํ๋๋ ๋จธ๋ฆฌ๊ฐ ๊ฐ์ดํด์ก๋ค. ์์ผ๋ก ์ด๋ค ๊ฑธ ๋ ์ค์ ์ ์ผ๋ก ๋ค์ ์๋ํ๊ณ ์ฐ์ตํด์ผํ ์ง ๋ช
ํํด์ง๋ฏํด์ ๊ธฐ๋ถ์ด ์ข๋ค.
์ ๊ทธ๋ฆฌ๊ณ ๋น๋๊ธฐโฆ ํ ๋ญ๊ฐ ์๊ฒ ๋๋ฐ, ๋ ๋ณด๋ฉด ํท๊ฐ๋ฆฌ๊ณ ์ฐธโฆ ๊ณ์ ์ต๊ด์ ์ผ๋ก ์ฌ์ฉํ๋ฉด์ ์์ ์ต์ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค. ๋ ํ๋ฉด ๋ค ๋๋ค.
์ค๋์ ์ํ ์
- ๊ทธ๋์ ๋ฏธ์ ์ ๋ฆฌ๋ฅผ ํตํด ๋จธ๋ฆฌ ๋ง๊ฒ ํ ์
- ๋น๋๊ธฐ ๋ค์ ๊ณต๋ถํ๋ฉด์ ์ดํดํ ์
- ๋ฏธ์ 1 ๋ผ์ด๋ ๋ก๋น์ผ๋ก๋ผ๋ ์ผ๋จ ๊ตฌํํ ์
- ๊ธ์์ผ์์๋ ๋ง์ ํ๋ค๋ฆฌ์ง ์๊ณ ํ๋ฃจ ์ด์ฌํ ๋ณด๋ธ ์ !!!(์ง์ง ๋ฟ๋ฏ)
์ค๋์ ์์ฌ์ด ์
- ์๊ณ ๋ฆฌ์ฆ ํ์ต ๊ณํโฆ ์ผ๋ฅธ ์ธ์ฐ์!