ํฐ์คํ ๋ฆฌ ๋ทฐ
1. ๋ ธ๋์ ์ ์
- ๋ ธ๋๋ ์๋ฒ๊ฐ ์๋๋ค. ์๋ฐ์คํธ๋ฆฝํธ ์์ง์ผ๋ก ๋น๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์
- ์คํ๊ธฐ. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํ
์๋ฒ
- ๋ ธ๋๋ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ฐ ์ ์ผ ๋ง์ด ์ฌ์ฉ
- ์๋ฒ : ๋คํธ์ํฌ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ ๋ณด๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ปดํจํฐ ๋๋ ํ๋ก๊ทธ๋จ์ ๋งํจ
- ํด๋ผ์ด์ธํธ : ์์ฒญ์ ๋ณด๋ด๋ ์ฃผ์ฒด
- ex) ์ฃผ์์ฐฝ์ ์น ์ฌ์ดํธ ์ฃผ์๋ฅผ ์ ๋ ฅ(์์ฒญ)ํ๋ฉด ๊ทธ ์ฃผ์์ ํด๋นํ๋ ์ปดํจํฐ ์์น๋ฅผ ํ์ ํ๊ณ ์น ์ฌ์ดํธ ํ์ด์ง๋ฅผ ๋ฐ์์์ ์์ฒญ์์ ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ ๋์ด๋ค(์๋ต)
- ex) ๋ชจ๋ฐ์ผ ์ฑ ์ค์น โก ์ฑ์คํ ์ด์์ ์ํ๋ ์ฑ์ ๊ณ ๋ฅธ ํ ์ค์น ๋ฒํผ์ ๋๋ฅด๋ฉด(์์ฒญ) ๋ด๋ ค๋ฐ๊ธฐ(์๋ต)์ด ์์
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด ์๋ต์ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์
- ๋ ธ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์.
- ๋ฐํ์ : ํน์ ์ธ์ด๋ก ๋ง๋ ํ๋ก๊ทธ๋จ๋ค์ ์คํํ ์ ์๋ ํ๊ฒฝ์ ๋ปํจ
- ๋ ธ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ ์ปดํจํฐ์์ ์คํํ ์ ์์ (์๋ฐ์คํฌ๋ฆฝํธ ์คํ๊ธฐ)

- ๊ตฌ๊ธ์ด V8 ์์ง์ ์ฌ์ฉํด ํฌ๋กฌ์ ์ถ์, V8 ์์ง์ ๋งค์ฐ ๋นจ๋์
- ๋ ธ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (V8, libuv)๋ C์ C++๋ก ๊ตฌํ
- libuv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ธ๋์ ํน์ฑ์ธ ์ด๋ฒคํธ ๊ธฐ๋ฐ, ๋ ผ ๋ธ๋กํน I/O ๋ชจ๋ธ์ ๊ตฌํ
์ด๋ฒคํธ ๊ธฐ๋ฐ
- ์ด๋ฒคํธ ๊ธฐ๋ฐ(event-driven) : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ฏธ๋ฆฌ ์ง์ ํด๋ ์์ ์ ์ํํ๋ ๋ฐฉ์ ์๋ฏธ
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์์๋ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ๋ฌด์์ ํ ์ง ๋ฏธ๋ฆฌ ๋ฑ๋กํด๋์ด์ผ ํจ โฌ ์ด๋ฒคํธ ๋ฆฌ์ค๋(event listner)์ callback ํจ์๋ฅผ ๋ฑ๋กํ๋ค๊ณ ํํ

- ๋ ธ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ฐฉ์ โก ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋ฑ๋กํด๋ ์ฝ๋ฐฑ ํจ์ ํธ์ถ, ๋ฐ์ํ ์ด๋ฒคํธ๊ฐ ์๊ฑฐ๋ ์ด๋ฒคํธ๋ฅผ ๋ค ์ฒ๋ฆฌํ๋ฉด ๋ ธ๋๋ ๋ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๊น์ง ๋๊ธฐ
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ชจ๋ธ์์๋ event loop ๋ผ๋ ๊ฐ๋ ๋ฑ์ฅ โก ์ฌ๋ฌ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ค ์์๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ ์ง๋ฅผ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํ๋จ
function first() {
second();
console.log('์ฒซ ๋ฒ์งธ');
}
function second() {
third();
console.log('๋ ๋ฒ์งธ');
}
function third() {
console.log('์ธ ๋ฒ์งธ');
}
first();
- ๋ ธ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋งจ ์๋ถํฐ ํ์ค์ฉ ์คํ, ํจ์ ๋ถ๋ถ์ ๋ฐ๊ฒฌํ๋ฉด ํธ์ถ ํจ์๋ฅผ call stack์ ๋ฃ์
- ์ ์ฝ๋๋ first -> second -> third ์์ผ๋ก ํธ์ถ์ด ๋๊ณ , ์คํ์ ๋ฐ๋๋ก ๋๋ค

- anonymous ํจ์๋ ์คํ ์์ global context๋ฅผ ์๋ฏธ โฌ ํจ์๊ฐ ํธ์ถ๋์์ ๋ ์์ฑ๋๋ ํ๊ฒฝ
- ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ ์คํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ญ ์ปจํ ์คํธ ์์์ ๋์๊ฐ๋ค.
- ์ถ๋ ฅ ๊ฒฐ๊ณผ : ์ธ๋ฒ์งธ ๋๋ฒ์งธ ์ฒซ๋ฒ์งธ
function run() {
console.log('3์ด ํ ์คํ');
}
console.log('์์');
setTimeout(run, 3000);
console.log('๋');
- ์ถ๋ ฅ ๊ฒฐ๊ณผ : ์์ ๋ 3์ด ํ ์คํ
- 3์ด ๋ค์ run ํจ์๋ฅผ ์คํํ๋ ์ฝ๋
์ด๋ฒคํธ ๋ฃจํ : ์ด๋ฒคํธ ๋ฐ์ ์ ํธ์ถํ ์ฝ๋ฐฑ ํจ์๋ค์ ๊ด๋ฆฌํ๊ณ , ํธ์ถ๋ ์ฝ๋ฐฑ ํจ์์ ์คํ ์์๋ฅผ ๊ฒฐ์ ํ๋ ์ญํ ๋ด๋น. ๋ ธ๋๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์์ ์ ๋ฐ๋ณตํ๋ฏ๋ก ๋ฃจํ๋ผ๊ณ ๋ถ๋ฆ
๋ฐฑ๊ทธ๋ผ์ด๋ : setTimeout ๊ฐ์ ํ์ด๋จธ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ค์ด ๋๊ธฐํ๋ ๊ณณ. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ๋ด๋ ๋จ, ์ฌ๋ฌ ์์ ๋์์ ์คํ ๊ฐ๋ฅ
ํ์คํฌ ํ : ์ด๋ฒคํธ ๋ฐ์ ํ, ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ํ์คํฌ ํ๋ก ํ์ด๋จธ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ณด๋. ์ ํด์ง ์์๋๋ก ์ฝ๋ฐฑ๋ค์ด ์ค์ ์ ์์ผ๋ฏ๋ก ์ฝ๋ฐฑ ํ๋ผ๊ณ ๋ถ๋ฆ. ์ฝ๋ฐฑ๋ค์ ๋ณดํต ์๋ฃ๋ ์์๋๋ก ์ค์ ์ ์์ง๋ง ํน์ ํ ๊ฒฝ์ฐ์๋ ์์๊ฐ ๋ฐ๋๊ธฐ๋ ํจ

- annonymous, setTimeout ์์ผ๋ก ํธ์ถ ์คํ์ ๋ค์ด๊ฐ
- ๋ค์ด๊ฐ ์์์ ๋ฐ๋๋ก ์คํ๋๋ฏ๋ก, setTimeout ์คํ. ํ์ด๋จธ์ ํจ๊ป run ์ฝ๋ฐฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋ณด๋ด๊ณ setTimeout์ ํธ์ถ ์คํ์์ ๋น ์ง. ๋ค์์ผ๋ก anonymous๊ฐ ํธ์ถ ์คํ์์ ๋น ์ง. ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ 3์ด ์ดํ run ํจ์๋ฅผ ํ์คํฌ ํ๋ก ๋ณด๋.
- ํ์คํฌ ํ๋ ์ฌ๋ฌ๊ฐ์ ํ๋ก ์ด๋ฃจ์ด์ง. ์ด๋ฒคํธ ๋ฃจํ๋ ์ ํด์ง ๊ท์น์ ๋ฐ๋ผ ์ฝ๋ฐฑ ํจ์๋ค์ ํธ์ถ ์คํ์ผ๋ก ๋ถ๋ฆ

- ํธ์ถ ์คํ์์ anonymous๊น์ง ์คํ์ด ์๋ฃ๋์ด ํธ์ถ ์คํ์ด ๋น์ด ์๋ ์ํฉ
- ์ด๋ฒคํธ ๋ฃจํ๋ ํธ์ถ ์คํ์ด ๋น์ด์์ผ๋ฉด ํ์คํฌ ํ์์ ํจ์๋ฅผ ํ๋์ฉ ๊ฐ์ ธ์ ํธ์ถ ์คํ์ ๋ฃ๊ณ ์คํ

- ์ด๋ฒคํธ ๋ฃจํ๊ฐ run ์ฝ๋ฐฑ์ ํ์คํฌ ํ์์ ๊บผ๋ด ํธ์ถ ์คํ์ผ๋ก ์ฌ๋ฆฐ ์ํฉ
- ํธ์ถ ์คํ์ผ๋ก ์ฌ๋ ค์ง run์ ์คํ๋๊ณ ์คํ ์๋ฃ ํ ํธ์ถ ์คํ์์ ๋น์์ง
- ์ด๋ฒคํธ ๋ฃจํ๋ ํ์คํฌ ํ์ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ค์ด์ฌ ๋๊น์ง ๊ณ์ ๋๊ธฐ
๋ ผ ๋ธ๋กํน I/O
- ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ ํ์ฉํ๋ฉด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์์ ์๋ ๋๊ฐ์ง ์ข ๋ฅ โก ๋์์ ์คํ ๊ฐ๋ฅ, ๋์์ ์คํ ๋ถ๊ฐ๋ฅ
- ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๋์์ ์คํ ๋ถ๊ฐ๋ฅํ์ง๋ง I/O ์์ ์ ๋์์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- I/O : Input/Output ํ์ผ ์์คํ ์ ๊ทผ์ด๋ ๋คํธ์ํฌ๋ฅผ ํตํ ์์ฒญ ๋ฑ

- ๋ธ๋กํน : ์ด์ ์์ ์ด ๋๋์ผ๋ง ๋ค๋ฅธ ์์ ์ํ ๊ฐ๋ฅ
- ๋ ผ๋ธ๋กํน : ์ด์ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํ์ง ์๊ณ ๋ค์ ์์ ์ํ

- ์์ ์์์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง
function longRunningTask() {
// ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
console.log('์์
๋');
}
console.log('์์');
longRunningTask();
console.log('๋ค์ ์์
')
- ๋ธ๋กํน ๋ฐฉ์์ ์ฝ๋
- ์คํ ๊ฒฐ๊ณผ : ์์ | ์์ ๋ | ๋ค์ ์์
function longRunningTask() {
// ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
console.log('์์
๋');
}
console.log('์์');
setTimeout(longRunningTask, 0);
console.log('๋ค์ ์์
')
- setTimeout ์ด์ฉํด ์ฝ๋ ๋ณ๊ฒฝ
- ์คํ๊ฒฐ๊ณผ : ์์ | ๋ค์ ์์ | ์์ ๋
- setTimeout(์ฝ๋ฐฑ, 0)์ ์ฝ๋๋ฅผ ๋ ผ ๋ธ๋กํน์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ ์ค ํ๋
- setTimeout์ ์ฝ๋ฐฑํจ์์ธ longRunnigTask๊ฐ ํ์คํฌ ํ๋ก ๋ณด๋ด์ง๋ฏ๋ก ์์๋๋ก ์คํ๋์ง ์๋๋ค.
- ํ์ง๋ง ์ฝ๋๋ ๋์์ ์คํ๋์ง ์๊ณ ์คํ ์์๋ง ๋ฐ๋๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์์ ์๊ฐ์ด ์งง์์ง์ง ์๋๋ค.
- ๋ ผ๋ธ๋กํน๊ณผ ๋์๋ ๊ฐ์ง ์๋ค
์ฑ๊ธ ์ค๋ ๋
- ์ฑ๊ธ ์ค๋ ๋ : ์ค๋ ๋ ํ๋๋ฟ์ ์๋ฏธ
- ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ์์ ํ ๋นํ๋ ์์ ๋จ์ ์๋ฏธ. ๋ ธ๋๋ ์น ๋ธ๋ผ์ฐ์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ณ์ ์ธ ํ๋ก์ธ์ค. (์์ ๊ณต์ X)
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ํ๋ฆ์ ๋จ์. ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ฅผ ์ด์ฉํด ์ฌ๋ฌ ์์ ๋์ ์ฒ๋ฆฌ ๊ฐ๋ฅ. ์ค๋ ๋๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ๊ณต์ ๊ฐ๋ฅ

- ๋ ธ๋๋ฅผ ์คํํ๋ฉด ๋จผ์ ํ๋ก์ธ์ค๊ฐ ํ๋ ์์ฑ. ๊ทธ ํ๋ก์ธ์ค์์ ์ค๋ ๋๋ค ์์ฑํ๋๋ฐ ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ ์ฌ๋ฌ๊ฐ ์์ฑ
- ๊ทธ์ค์์ ์ฐ๋ฆฌ๊ฐ ์ ์ดํ ์ ์๋ ์ค๋ ๋๋ ํ๋๋ผ์ ๋ ธ๋๊ฐ ์ฑ๊ธ ์ค๋ ๋๋ผ๊ณ ์ฌ๊ฒจ์ง

- ์ฑ๊ธ ์ค๋ ๋(์ ์), ๋ธ๋กํน ๋ชจ๋ธ โก ๋งค์ฐ ๋นํจ์จ์

- ์ฑ๊ธ ์ค๋ ๋, ๋ ผ ๋ธ๋กํน ๋ชจ๋ธ โก ๋ ธ๋ ์ฑํ

- ๋ฉํฐ ์ค๋ ๋, ๋ธ๋กํน : ๋น์ฉ์ด ๋ฐ์ํ๋ค.

- ๋ฉํฐ ์ค๋ ๋๊ฐ ๋ ผ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์งํํ๋ค๋ฉด ์ข์ง ์์๊น? โก ๊ทธ๋ ์ง๋ง, ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ด ์๋นํ ์ด๋ ค์ฐ๋ฏ๋ก ๋ฉํฐ ํ๋ก์ธ์ฑ ๋ฐฉ์์ ๋์ ์ฌ์ฉ
- I/O ์์ฒญ์๋ ๋ฉํฐ ํ๋ก์ธ์ฑ์ด ๋ ํจ์จ์
์๋ฒ๋ก์์ ๋ ธ๋
- ๋ ธ๋ : ์ฑ๊ธ ์ค๋ ๋, ๋ ผ ๋ธ๋กํน ๋ชจ๋ธ(์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด ํน์ฑ)
- I/O ์ฒ๋ฆฌ๋ฅผ ์ํ๋ ๋ ธ๋๋ฅผ ์๋ฒ๋ก ์ฌ์ฉํ๋ฉด ์ข์
- CPU ๋ถํ๊ฐ ํฐ ์์ ์๋ ์ ํฉํ์ง ์์
- ๋ ธ๋์๋ ์น ์๋ฒ๊ฐ ๋ด์ฅ๋์ด ์์ด ์ ๋ฌธ์๊ฐ ์ฝ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
- ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ์ฌ์ฉํด ๊ฐ๋ฐ ์์ฐ์ฑ์ ํ๊ธฐ์ ์ผ๋ก ๋์

์๋ฒ ์ธ์ ๋ ธ๋
- React, Vue, Angular

- npm ์ค๋ฅ
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. ํด๊ฒฐ
npm install -g n ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ค๋ค๊ฐ ๋ธ๋ก๊ทธ์ ์ค๋ช ํ๋ ๊ฒ์ ๋ฐ๋ผํ๋ค.๊ทธ ํ๋ก๋ถํฐ npm WARN config global '--global', '--local' are deprecated. Use '--location=global'๋ผ๋ ๊ฒฝ๊ณ ๊ฐ ๋ด๋ค.npm
velog.io

- ์ ํฌ์คํ ์ ๋ณด๊ณ ํด๊ฒฐ
- ๋ฐฑ์ค
- ํ๋ก์ธ์ค
- PHP
- ๋จธ์ ๋ฌ๋
- C
- ์๊ณ ๋ฆฌ์ฆ
- ๋ค์คํ๋ก์ธ์ค
- ๋ฒํผ
- ์ค์น
- Baekjoon
- Programming
- Apache
- ๊ธฐ๊ณํ์ต
- bitnami
- error
- SpringBoot
- react
- MySQL
- ๋ฆฌ๋ ์ค
- C++
- ์ค๋ฅ
- Linux
- machine learning
- SWiFT
- Annotation
- ํ๋ก๊ทธ๋๋ฐ
- react-scripts
- 9086๋ฒ
- ํ์ผ ์ ์ถ๋ ฅ
- GIT
- Total
- Today
- Yesterday