3๊ฐ ์ง๋ฌธ
๐ก[CS ์ค๋ฌด Point: OS ๊ณ์ธต์ ์ญ๋ ํ์ฉ (epoll / kqueue)] ๋จ์ผ ์ค๋ ๋๋ผ๊ณ ํด์ ์ปดํจํฐ๊ฐ ์ ๋ง๋ก ํผ์ ์ผํ๋ ๊ฒ์ ์๋๋๋ค. ํ์ผ ์ฝ๊ธฐ๋ ๋คํธ์ํฌ ํต์ ๊ฐ์ ๋ฌด๊ฑฐ์ด ์์ ์ Node.js๊ฐ ์ง์ ์ฒ๋ฆฌํ์ง ์๊ณ , ์ด์์ฒด์ ์ปค๋์ด ์ ๊ณตํ๋ ๊ณ ์ฑ๋ฅ ์ด๋ฒคํธ ํต์ง API(Linux์ epoll, macOS์ kqueue ๋ฑ ์์คํ ์ฝ)๋ฅผ ํตํด ์ด์์ฒด์ ์๊ฒ ์ฒ ์ ํ๊ฒ ์์(Offloading)ํฉ๋๋ค. ์ฆ, Node.js์ ๋ฉ์ธ ์ค๋ ๋๋ ๊ตํต์ ๋ฆฌ๋ง ์์ฃผ ๋น ๋ฅด๊ฒ ์ํํ ๋ฟ, ์ค์ ๋ฌด๊ฑฐ์ด ์ง์ OS ์ปค๋์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋๋ฅด๊ณ ์๋ ๊ฒ์ ๋๋ค.
์๋ ํ์ธ์, ์ ์ค๋ช ์์ ์ง๋ฌธ์ด ์์ต๋๋ค.
์ด์์ฒด์ ์ ์์ํ๋ ์์ ๊ณผ libuv ์ค๋ ๋ ํ์ ์์ปค ์ค๋ ๋๊ฐ ์ด๋ค ์ฐ๊ด์ด ์๊ณ ์ด๋ป๊ฒ ์ ๊ธฐ์ ์ผ๋ก ๋์ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
Answer 2
1
์๋ ํ์ธ์ ๋ฐ์์ก๋, ์ง๋ฌธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ด ๋ถ๋ถ์ ์ ์ดํดํ๊ณ ๋์ด๊ฐ๋ ๊ฒ์ ์์คํ ์ ์ฒด๋ฅผ ์กฐ๋งํ๋ฉฐ ์๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ดํ ์ ์๋ ์๋์ด ๋ ๋ฒจ๋ก ๋์๊ฐ๊ธฐ ์ํด ๊ผญ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ์ข์ ์ง๋ฌธ์ ๋๋ค. ๊ฒฐ๋ก ๋ถํฐ ๋ช ํํ๊ฒ ๋ง์๋๋ฆฌ๋ฉด, ๋ง์ ๋ถ๋ค์ด ๋ชจ๋ ๋น๋๊ธฐ ์์ ์ด ์ค๋ ๋ ํ(Thread Pool)๋ก ๊ฐ๋ค๊ณ ์๊ฐํ์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์ต๋๋ค. Node.js(์ ํํ๋ libuv ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ ์์ ์ ์ฑ๊ฒฉ์ด๋ ํ๋์จ์ด์ ํน์ฑ์ ๋ฐ๋ผ ์ด์์ฒด์ (OS) ์ปค๋์ ์ง์ ์์ํ ์ง, ์๋๋ฉด ์์ ์ด ๊ด๋ฆฌํ๋ ์์ปค ์ค๋ ๋ ํ(Worker Thread Pool)์ ๋์ง์ง๋ฅผ ์ฒ ์ ํ๊ฒ ๋ถ๋ฆฌํด์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ๋ ๊ฐ์ง๊ฐ ์ด๋ป๊ฒ ๋๋๊ณ , ๋ ์ด๋ป๊ฒ ์ ๊ธฐ์ ์ผ๋ก ๋ง๋ฌผ๋ ค ๋์๊ฐ๋์ง ์ปดํจํฐ ๊ณตํ(CS)์ ํ๋์จ์ด ๋ ๋ฒจ๋ถํฐ ์์ธํ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
๋ณธ๊ฒฉ์ ์ธ ์ค๋ช ์ ์์, ์ฝ๊ฒ ์ดํดํ์ค ์ ์๋๋ก ํต์ฌ ์ฉ์ด ๋ค ๊ฐ์ง๋ฅผ ๋จผ์ ๊ฐ๋ณ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ์ฒซ์งธ๋ก ์ค๋ ๋(Thread)๋ ์ปดํจํฐ๊ฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฅ ์์ ์์ ์ ๋จ์๋ก, ์๋น์ ์ง์ ํ ๋ช ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ๋์งธ๋ก ๋ธ๋กํน(Blocking)์ ์ด ์ง์์ด ๊ณ ๊ธฐ๋ฅผ ๊ตฝ๋๋ผ ๋ถํ ์์ ๋ ๋์ง ๋ชปํ๊ณ ๋ค๋ฅธ ์๋์ ์ฃผ๋ฌธ์ ์ ํ ๋ฐ์ง ๋ชปํ๋ ๋ฉ์ถค ์ํ๋ฅผ ๋งํฉ๋๋ค. ์ ์งธ๋ก ์คํ๋ก๋ฉ(Offloading)์ ๋งค๋์ ๊ฐ ์ง์ ๊ณ ๊ธฐ๋ฅผ ๊ตฝ์ง ์๊ณ ์ฃผ๋ฐฉ ๋ด๋น์๋ ์ธ๋ถ ์ ์ฒด์ ๊ทธ ์ผ์ ๋ ๋๊ฒจ ์์ํ๋ ํจ์จ์ ์ธ ํ๋์ ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ค๋ ๋ ํ(Thread Pool)์ ์ผ์ด ์๊ธธ ๋๋ง๋ค ์ง์์ ์๋ก ๋ฝ๋ ๋์ , ๋ฏธ๋ฆฌ ๊ณ ์ฉํด ๋ 4๋ช ์ ๋์ ์ ๋ด ๋๊ธฐ์กฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด์ ํ๋์จ์ด์ CS์ ๊ด์ ์์ ๋๊ฐ ์ง์ง ์ผ์ ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ปดํจํฐ์ ํต์ฌ ๋ถํ๋ค์ ์๋ ์ฐจ์ด๊ฐ ํฝ๋๋ค. CPU๋ ์ด๋น ์๋ง์ ์ฐ์ฐ์ ํ๋ ๋งค์ฐ ๋น ๋ฅธ ์ฅ์น์ด๋ฉฐ, RAM์ CPU๊ฐ ์์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ ค๋๋ ๋๊ณ ๋น ๋ฅธ ์์ ๋์ ๋๋ค. ๋ฐ๋ฉด Network Card(NIC)๋ ์ธ๋ถ ์ธํฐ๋ท๋ง๊ณผ ํต์ ํ๋ ์ถ์ ๊ตฌ๋ก์ ์๋์ ์ผ๋ก ๋๋ฆฌ๊ณ ์ธ์ ๋ฐ์ดํฐ๊ฐ ์ฌ์ง ๋ชจ๋ฅด๋ ํน์ฑ์ด ์์ผ๋ฉฐ, Storage(SSD/HDD)๋ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ๊ฑฐ๋ํ ์ฐฝ๊ณ ๋ก ๋ฌผ๋ฆฌ์ ์ด๊ณ ๊ตฌ์กฐ์ ์ธ ํ๊ณ ๋๋ฌธ์ ๊ฐ์ฅ ๋๋ฆฝ๋๋ค.
Node.js์ ๋ฉ์ธ ์ค๋ ๋์ธ ์ด๋ฒคํธ ๋ฃจํ๋ ์ค์ง CPU์ RAM ์์์๋ง ์์ฃผ ๋น ๋ฅด๊ฒ ๋์๊ฐ๋๋ค. ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๋คํธ์ํฌ ํต์ ์ด๋, ๋๋ฆฐ ํ๋๋์คํฌ๋ฅผ ๋ค์ ธ์ผ ํ๋ ์์ ์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋ฌถ์ฌ๋ฒ๋ฆฌ๋ ๋ธ๋กํน ์ํ๊ฐ ๋๋ฉด ์ ์ฒด ์๋ฒ๊ฐ ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ Node.js๋ ์ด ๋ฌด๊ฑฐ์ด ์ง๋ค์ ์ธ๋ถ๋ก ์คํ๋ก๋ฉํ์ฌ ๋๊ธฐ๋๋ฐ, ์ฌ๊ธฐ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ๊ฒฝ๋ก๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ๋ ๊ฐ์ง ์์ ๊ฒฝ๋ก๋ OS ์ปค๋๊ณผ ์ค๋ ๋ ํ๋ก ๋๋ฉ๋๋ค. libuv๋ ๋ฉ์ธ ์ค๋ ๋์๊ฒ ๋น๋๊ธฐ ์์ ์ ๋ฐ์์ ๋, ์ด ์์ ์ด ๋คํธ์ํฌ ํต์ ์ธ์ง ์๋๋ฉด ํ์ผ ์ ์ถ๋ ฅ์ด๋ CPU ์ฐ์ฐ์ธ์ง ํ๋จํ์ฌ ์์ ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๋ณด๋ ๋๋ค.
์ฒซ ๋ฒ์งธ ๊ฒฝ๋ก๋ ์ฃผ๋ก ๋คํธ์ํฌ ํต์ ์์ ๋ฐ์ํ๋ OS ์ปค๋ ์์(epoll / kqueue)์ ๋๋ค. ์ด์์ฒด์ (OS)๋ ์ด๋ฏธ ๋คํธ์ํฌ ์นด๋(NIC)๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์์ด ์ ๋ฌธ๊ฐ์ ๋๋ค. ๋คํธ์ํฌ ์์ผ ํต์ ์ด๋ HTTP ์์ฒญ ๋ฑ์ด ๋ค์ด์ค๋ฉด, libuv๋ ์ค๋ ๋ ํ์ ๋๊ธฐ์กฐ๋ฅผ ์ฐ์ง ์๊ณ , ๋์ OS ์ปค๋์๊ฒ ์ด ์์ผ์์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด ๋ํํ ์๋ ค๋ฌ๋ผ๊ณ ์๋๋ง ๋ง์ถ๊ณ ๋ค๋์์ญ๋๋ค. ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ RAM์ ์ ์ฌํ๋ ๊ฒ์ NIC์ OS๊ฐ ์์์ ์ฒ๋ฆฌํ๋ฉฐ, ์์ ์ด ๋๋๋ฉด OS๊ฐ ์๋์ ์ธ๋ ค ๋ฉ์ธ ์ค๋ ๋์๊ฒ ๊ฐ์ ธ๊ฐ๋ผ๊ณ ํต์งํฉ๋๋ค.
๋ค๋ง ์ฌ๊ธฐ์ ํ ๊ฐ์ง ์ฃผ์ํด์ผ ํ ์์ธ๊ฐ ์์ต๋๋ค. ๋๋ฉ์ธ ์ฃผ์๋ฅผ IP๋ก ๋ฐ๊พธ๋ dns.lookup() ๋ฉ์๋์ ๊ฒฝ์ฐ, OS์ ๋๊ธฐ์ ์ธ ์์คํ
ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ์์
์์๋ ์์ธ์ ์ผ๋ก OS ์ปค๋์ด ์๋ libuv ์ค๋ ๋ ํ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ์ค๋ฌด์์ ๋ณ๋ชฉ์ ์ถ์ ํ ๋ ์์ฃผ ์ค์ํ ํฌ์ธํธ์
๋๋ค.
๋ ๋ฒ์งธ ๊ฒฝ๋ก๋ ์ฃผ๋ก ํ์ผ I/O, ์ํธํ, ์์ถ์์ ์ฌ์ฉ๋๋ libuv ์ค๋ ๋ ํ ์์์ ๋๋ค. ํ์ผ ์์คํ ์ ๊ทผ์ ์ด์์ฒด์ ๋ง๋ค ๋น๋๊ธฐ๋ฅผ ์ง์ํ๋ ๋ฐฉ์์ด ํํธํ๋์ด ์๊ณ , ์ํธํ๋ ์์ถ ๊ฐ์ด ์์ํ๊ฒ CPU๋ฅผ ๋ง์ด ์จ์ผ ํ๋ ์ฐ์ฐ์ OS ์ปค๋์ ๋น๋๊ธฐ API๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด๋ libuv๊ฐ ๊บผ๋ด ๋๋ ๊ฒ์ด ๋ฐ๋ก ๊ธฐ๋ณธ๊ฐ 4๊ฐ๋ฅผ ๊ฐ์ง ์ค๋ ๋ ํ์ ๋๋ค. ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ด ํ์ผ์ ์ฝ์ด์ค๋ผ๊ฑฐ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํด ๋ฌ๋ผ๊ณ ํ๋ฉด, libuv๋ ์ค๋ ๋ ํ์ ์์ปค ์ค๋ ๋ ์ค ํ๋๋ฅผ ๊นจ์์ ๊ทธ ์ผ์ ์ ๋ด์ํต๋๋ค. ์ด ์์ปค ์ค๋ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ด์ฌํ ํ์ผ์ ์ฝ๊ฑฐ๋ ์ฐ์ฐ์ ํ ๋ค, ๋๋๋ฉด ๋ฉ์ธ ์ค๋ ๋์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค๋๋ค. ์์ปค ์ค๋ ๋ ์์ฒด๊ฐ ๋ธ๋กํน๋๋๋ผ๋ ๋ฉ์ธ ์ค๋ ๋์๋ ๋ถ๋ฆฌ๋์ด ์์ผ๋ ๋ฉ์ธ ์ค๋ ๋๋ ์์ ํ๊ฒ ๋ค๋ฅธ ์ผ์ ๊ณ์ํ ์ ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ณผ์ ์ ์ข ํฉํ์ฌ ๋ํ ๋ ์คํ ๋์ ์ด์ ์์คํ ์ ๋น์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฉ์ธ ์ค๋ ๋๋ ํ์ ์ด๊ดํ๋ ๋จ 1๋ช ์ ๋งค๋์ ๋ก์, ์๋์ ์ฃผ๋ฌธ์ ๋ฐ๊ณ ์์ฑ๋ ์๋ฆฌ๋ฅผ ์๋นํ๋ ๊ตํต์ ๋ฆฌ๋ง ํ๋ฉฐ ์ฃผ๋ฐฉ์ ๋ค์ด๊ฐ์ ์ง์ ์๋ฆฌํ์ง ์์ต๋๋ค. RAM์ ๋งค๋์ ๊ฐ ์ฃผ๋ฌธ์์ ์์ฑ๋ ์๋ฆฌ๋ฅผ ์์๋ก ์ฌ๋ ค๋๋ ์นด์ดํฐ ํ ์ด๋ธ ์ญํ ์ ํฉ๋๋ค. OS ์ปค๋๊ณผ NIC๋ ์ธ๋ถ ๋ฐฐ๋ฌ ๋ํ์ฌ๊ฐ ์์์ ์๋ นํด ๊ฐ๋ ์๋ํ ๋๋ผ์ด๋ธ์ค๋ฃจ ์์คํ ๊ณผ ๊ฐ์ผ๋ฉฐ, libuv ์ค๋ ๋ ํ์ ์ฐฝ๊ณ ์์ ๋ฌด๊ฑฐ์ด ์์์ฌ๋ฅผ ๊บผ๋ด์ค๊ฑฐ๋ ์ฅ์๊ฐ ๊ณ ๊ธฐ๋ฅผ ๊ตฌ์์ผ ํ๋ 4๋ช ์ ์ ๋ด ํน์ ์์ ๋ฐ๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฅผ ๋ฐํ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ฌ์ง์ฒฉ ์ฑ์ ์ ์ํด ํ๋กํ ์ฌ์ง์ ์์ฒญํ๋ API๋ฅผ ํธ์ถํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ ์ธํฐ๋ท๋ง์ ํ๊ณ ๋ค์ด์จ ์๋์ ์์ฒญ์ด ์๋ฒ์ ํต์ ์ฅ๋น์ ๋์ฐฉํฉ๋๋ค. OS๋ ์ด ์์ฒญ์ ์กฐ๋ฆฝํด ์นด์ดํฐ์ธ RAM์ ์ฌ๋ ค๋๊ณ ๋งค๋์ ์ธ ๋ฉ์ธ ์ค๋ ๋์๊ฒ ์๋์ ์ธ๋ฆฝ๋๋ค. ์๋์ ๋ค์ ๋งค๋์ ๋ ๋ฌ๋ ค๊ฐ ์ฃผ๋ฌธ์๋ฅผ ํ์ธํ๊ณ , ์ฌ์ง ํ์ผ์ ์คํ ๋ฆฌ์ง์์ ์ฝ์ด์์ผ ํ๋ค๋ ๊ฒ์ ํ์ ํฉ๋๋ค. ๋งค๋์ ๋ ์ด ์์ ์ ์์ ์ด ์ง์ ํ๊ฑฐ๋ ๋๋ผ์ด๋ธ์ค๋ฃจ ์ฅ๋น๊ฐ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ธฐ ๋๋ฌธ์, ์ฆ์ 4๋ช ์ ํน์ ์์ ๋ฐ์ธ ์ค๋ ๋ ํ ์ค ๋๊ธฐํ๊ณ ์๋ 1๋ช ์๊ฒ ์์ ์ง์์๋ฅผ ๋์ง๊ณ ๋ค๋ฅธ ์๋์ ์ฃผ๋ฌธ์ ๋ฐ์ผ๋ฌ ํ์ฐํ ๋ ๋ฉ๋๋ค.
๊ทธ๋์ ์์ปค ์ค๋ ๋๋ ์งํ ์ฐฝ๊ณ ๋ก ๋ด๋ ค๊ฐ ๋ฌผ๋ฆฌ์ ์ธ ํ๋๋์คํฌ๋ฅผ ๋ค์ ธ์ ์ฌ์ง์ ๊ฐ์ ธ์ต๋๋ค. ์์ ์ด ๋๋๋ฉด ํน์ ์์ ๋ฐ์ ์นด์ดํฐ์ ์ฌ์ง์ ์ฌ๋ ค๋๊ณ ๋งค๋์ ์๊ฒ ์์ ์ด ๋๋ฌ๋ค๋ ํ์๋ฅผ ๋จ๊น๋๋ค. ๋งค๋์ ๋ ํ์ ๋๋ค๊ฐ ์ด๋ฅผ ๋ณด๊ณ ์นด์ดํฐ๋ก ์์ ์ฌ์ง์ ์ฑ๊ธด ๋ค, ์ฌ์ง์ ์๋์๊ฒ ๋ณด๋ด๊ธฐ ์ํด ๋ค์ ๋๋ผ์ด๋ธ์ค๋ฃจ์ ๋ฐฐ์ถ๊ตฌ ์์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋์ ธ ๋ฃ๊ณ OS์๊ฒ ์ ์ก์ ์ง์ํ๋ฉฐ ๋์ ๋งบ์ต๋๋ค. ์ค์ ๋คํธ์ํฌ ๋ฐ๊นฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๊ฒ์ ํต์ ์ฅ๋น์ OS๊ฐ ์์์ ์ฒ๋ฆฌํฉ๋๋ค.
์์ฝํ์๋ฉด, ๋ฉ์ธ ์ค๋ ๋๋ ์ฌ์ง ์๊ณ OS ์ปค๋๊ณผ ์ค๋ ๋ ํ ์์ชฝ์ผ๋ก ์์
์ ์คํ๋ก๋ฉํ์ฌ ๋์ง๊ณ ์๋ฃ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๋ ์ปจํธ๋กค ํ์ ์ญํ ์ ์ํํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ด๋ HTTP ํต์ ๊ฐ์ ๋คํธ์ํฌ ํต์ ์ OS ์ปค๋์ด ์ ๋ดํ๋ฏ๋ก ์ค๋ ๋ ํ์ ์ ํ ์๋ชจํ์ง ์์ผ๋ฉฐ, ์ด ๋๋ถ์ ์๋ง ๊ฐ์ ๋์ ์ ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค. ๋ฐ๋ฉด ํ์ผ ์
์ถ๋ ฅ์ด๋ ์ํธํ๋ libuv ์ค๋ ๋ ํ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ฅผ ์๋ชจํ์ฌ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์ด ์์
์ด ๋๋ฌด ๋ชฐ๋ฆฌ๋ฉด ์ค๋ ๋ ํ 4๊ฐ๊ฐ ๊ฝ ์ฐจ์ ๋ณ๋ชฉ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ํฉ์ ๋ฐ๋ผ ์ค๋ ๋ ํ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ํ๋์ด ํ์ํ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ Node.js์ ํ๊ฒฝ ๋ณ์์ธ UV_THREADPOOL_SIZE๋ฅผ ์ค์ ํ์ฌ ์ค๋ ๋ ํ์ ํฌ๊ธฐ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 4์ด์ง๋ง, ์๋ฒ์ ๋ฌผ๋ฆฌ์ ์ฝ์ด ์๋ ์์
ํน์ฑ์ ๋ง์ถฐ ์ต๋ 1024๊น์ง ๋๋ฆด ์ ์์ด ์ํธํ๋ ์์ถ ๊ฐ์ ๋ฌด๊ฑฐ์ด ์์
์ด ๋ง์ ๋ ์ ์ฉํฉ๋๋ค. ์ด์ฒ๋ผ ์ด์์ฒด์ ์์คํ
์ฝ๊ณผ ์ค๋ ๋ ํ์ ์๋ก ๋ค๋ฃจ๋ ์์ญ์ด ๋ช
ํํ ๋ค๋ฅด๋ฉฐ, ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ค์ฌ์ผ๋ก ์๋ฒฝํ๊ฒ ๋ถ์
ํ์ฌ ์ ๊ธฐ์ ์ผ๋ก ์๋ฒ๋ฅผ ์ด์ํ๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ค์ ์ค๋ฌด ์ํฉ ์์ ๋ฅผ ํตํด ์ด ๋ฉ์ปค๋์ฆ์ด ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ๋ง๋๋ 'ํ์๊ฐ์ ๊ธฐ๋ฅ'์ ๊ฐ๋ฐํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๊ณ ๊ฐ์ ๋ฒํผ์ ๋๋ฅด๋ฉด, ๋จผ์ ์ฌ์ฉ์์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ฒ์ ๋์ฐฉํ๋ ๊ณผ์ ์ ๋คํธ์ํฌ ํต์ ์ด๋ฏ๋ก OS ์ปค๋์ด ์ ์ ์ผ๋ก ๋ด๋นํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ๋์ฐฉํ๋ฉด OS ์ปค๋์ด ๋ฉ์ธ ์ค๋ ๋์๊ฒ ์๋ฆผ์ ์ฃผ๊ณ , ๋ฉ์ธ ์ค๋ ๋๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ํ์ธํฉ๋๋ค. ๊ทธ๋ค์, ๋ณด์์ ์ํด ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ํด์ฑ(Bcrypt ๋ฑ)ํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋๋ฐ, ์ด ์์ ์ CPU ์ฐ์ฐ์ ๋งค์ฐ ๋ง์ด ์๊ตฌํ๋ ๋ฌด๊ฑฐ์ด ์์ ์ ๋๋ค. ๋ง์ฝ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ด๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ฉด ๊ทธ๋์ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ ์์ ๋ฐ์ง ๋ชปํ๋ ๋ธ๋กํน ์ํ๊ฐ ๋๋ฏ๋ก, ๋ฉ์ธ ์ค๋ ๋๋ ์ค๋ ๋ ํ์ ์๋ ์์ปค ์ค๋ ๋์๊ฒ ๋น๋ฐ๋ฒํธ ์ํธํ๋ฅผ ์คํ๋ก๋ฉํ์ฌ ์์ํฉ๋๋ค.
์์ปค ์ค๋ ๋๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํธํ๋ฅผ ๋ง์น๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ฉด, ์ด์ ๋ฉ์ธ ์ค๋ ๋๋ ์ด ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB)์ ์ ์ฅํด์ผ ํฉ๋๋ค. ํฅ๋ฏธ๋กญ๊ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ DB ์๋ฒ์ ํต์ ํ๋ ๊ณผ์ ์ ๋ด๋ถ๋ง์ด๋ ์ธ๋ถ๋ง์ด๋ ๊ฒฐ๊ตญ ๋คํธ์ํฌ ํต์ ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฉ์ธ ์ค๋ ๋๋ ์ด๋ฒ์๋ ์ค๋ ๋ ํ์ ์ง์์ ๋ถ๋ฅด์ง ์๊ณ , ๋ค์ OS ์ปค๋์๊ฒ ๋ฐ์ดํฐ๋ฅผ DB๋ก ๋ณด๋ด๊ณ ๋ต๋ณ์ด ์ค๋ฉด ์๋ ค๋ฌ๋ผ๊ณ ์คํ๋ก๋ฉํฉ๋๋ค. ์ต์ข ์ ์ผ๋ก DB์์ ์ ์ฅ ์๋ฃ ์๋ต์ด ์ค๋ฉด OS ์ปค๋์ด ๋ฉ์ธ ์ค๋ ๋์๊ฒ ์๋ฆผ์ ์ฃผ๊ณ , ๋ฉ์ธ ์ค๋ ๋๋ ๋น๋ก์ ์ฌ์ฉ์์๊ฒ ๊ฐ์ ์๋ฃ ๋ฉ์์ง๋ฅผ ์ ์กํ๊ฒ ๋ฉ๋๋ค. ์ด์ฒ๋ผ ๋จ ํ๋์ ํ์๊ฐ์ API๋ฅผ ์ฒ๋ฆฌํ ๋๋, ์์ ์ ์ฑ๊ฒฉ์ด CPU ์ฐ์ฐ์ธ์ง ๋คํธ์ํฌ ํต์ ์ธ์ง์ ๋ฐ๋ผ ์ค๋ ๋ ํ๊ณผ OS ์ปค๋์ ์ค๊ฐ๋ฉฐ ์ ๊ธฐ์ ์ผ๋ก ํ๋ ฅํ๋ ๊ฒ์ด Node.js ์ค๋ฌด ์๋ฒ์ ํต์ฌ ๋์ ๋ฐฉ์์ ๋๋ค.
์ฐธ๊ณ ํด์ฃผ์ธ์!
0
์๋ ํ์ธ์, ์ธํ๋ฐ AI ์ธํด์ ๋๋ค. ๋ฐ์์ก๋.
Node.js์ ๊ด๋ จ๋ ๊ณ ์ฑ๋ฅ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๊ด๋ จํ์ฌ ์ค์ํ ์ฌํญ์ ์ง๋ฌธํด ์ฃผ์ จ๊ตฐ์. ๋ค์์ ์ด์์ฒด์ ์ ์ญํ ๊ณผ libuv ์ค๋ ๋ ํ์ ์ฐ๊ด์ฑ์ ๋ํ ์ค๋ช ์ ๋๋ค.
Node.js์์์ I/O ์ฒ๋ฆฌ
์ด์์ฒด์ ์ญํ :
- Node.js๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, I/O ์์
์์ฒด๋ฅผ ์ง์ ์ํํ์ง ์๊ณ ์ด์์ฒด์ ์๊ฒ ์์ํฉ๋๋ค.
- ์ด์์ฒด์ ๋
epoll(Linux)๋kqueue(macOS)์ ๊ฐ์ ๊ณ ์ฑ๋ฅ ์ด๋ฒคํธ ํต์ง ๋ฉ์ปค๋์ฆ์ ํตํด ํ์ผ ์ ์ถ๋ ฅ, ๋คํธ์ํฌ ์ ์ถ๋ ฅ ๋ฑ์ ์์ ์๋ฃ๋ฅผ Node.js ์ด๋ฒคํธ ๋ฃจํ์ ํต์งํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ ํตํด Node.js ๋ฉ์ธ ์ค๋ ๋๋ ๋ธ๋กํน ์์ด ๋ค๋ฅธ ์์ ์ ๊ณ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- Node.js๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, I/O ์์
์์ฒด๋ฅผ ์ง์ ์ํํ์ง ์๊ณ ์ด์์ฒด์ ์๊ฒ ์์ํฉ๋๋ค.
libuv ์ค๋ ๋ ํ:
- ์ผ๋ถ ์์
(์: ํ์ผ ์
์ถ๋ ฅ, DNS ์กฐํ ๋ฑ)์ ์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ๋น๋๊ธฐ I/O API๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , libuv์ ์ค๋ ๋ ํ์์ ์ง์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- libuv ์ค๋ ๋ ํ์ ๊ธฐ๋ณธ์ ์ผ๋ก 4๊ฐ์ ์์ปค ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ฌํ ์ค๋ ๋๋ค์ด ๋ธ๋กํน ์์
์ ์ํํฉ๋๋ค.
- ์ด๋ฐ ๋ฐฉ์์ผ๋ก CPU ์ง์ฝ์ ์ธ ์์
์ด๋ ์ค๋ ๊ฑธ๋ฆฌ๋ I/O ์์
์ด ๋ฉ์ธ ์ค๋ ๋์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- ์ผ๋ถ ์์
(์: ํ์ผ ์
์ถ๋ ฅ, DNS ์กฐํ ๋ฑ)์ ์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ๋น๋๊ธฐ I/O API๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , libuv์ ์ค๋ ๋ ํ์์ ์ง์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ ๊ธฐ์ ์ธ ๋์
- Node.js๋ ๋ฉ์ธ ์ด๋ฒคํธ ๋ฃจํ์์ ๋คํธ์ํฌ๋ ํ์ผ ์์คํ
๊ฐ์ I/O ์์
์์ฒญ์ ๋ฐ์ผ๋ฉด, ์์
์ ์ด์์ฒด์ ์ ์์ํ๊ฑฐ๋ libuv ์ค๋ ๋ ํ์๊ฒ ๋งก๊น๋๋ค.
- ์๋ฅผ ๋ค์ด ๋คํธ์ํฌ ์์
์ ๋๋ถ๋ถ ์ด์์ฒด์ ์ ๋น๋๊ธฐ API๋ฅผ ์ฌ์ฉํด ์ฒ๋ฆฌ๋์ง๋ง, ์ผ๋ถ ํ์ผ ์์คํ
์์
์ libuv์ ์ค๋ ๋ ํ์ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ด๋ ์ด์์ฒด์ ์ libuv๊ฐ ๊ฐ์์ ์ญํ ์ ์ํํ๋ฉฐ, Node.js๊ฐ ํจ์จ์ ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋๋ก ์ง์ํ๋ ๊ตฌ์กฐ์
๋๋ค.
์ถ๊ฐ ์๋ฃ์ ๊ด๋ จ ์ง๋ฌธ URL:
- Understanding the Node.js Event Loop, Timers, and process.nextTick()
Node.js๊ฐ ์ด๋ป๊ฒ ๋น๋๊ธฐ I/O๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๋์ง๋ฅผ ์ดํดํ๋ฉด ๋ณด๋ค ํจ์จ์ ์ธ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ ์ ์์ต๋๋ค. ์ ๋ด์ฉ์ด ๋์์ด ๋์ จ๊ธธ ๋ฐ๋๋๋ค. ์ด๋ ํ ์ถ๊ฐ์ ์ธ ์ง๋ฌธ๋ ์ธ์ ๋ ์ง ํ์ํฉ๋๋ค!
์ ๋ ์ง๋ฌธ์๋์ ์ดํด๋ฅผ ๋๊ณ ์ ์ง์๊ณต์ ์๋์ ๊ธฐ์กด ๋ต๋ณ์ ์ฐธ๊ณ ํ์ฌ ์ ์ฌํ ๋ต๋ณ ๋งํฌ๋ฅผ ์ถ์ฒํด๋๋ฆฌ๊ณ ์์ต๋๋ค.
ํ์ฌ ๋ฒ ํ ๊ธฐ๋ฅ์ผ๋ก ๋ต๋ณ์ด ๋ง์กฑ์ค๋ฝ์ง ์์ ์ ์๋ ์ ์ํด ๋ถํ๋๋ฆฝ๋๋ค. ๐
์ถ๊ฐ์ ์ผ๋ก ๊ถ๊ธํ ์ ์ด ์์ผ์๋ฉด, ์ด์ด์ ์ง๋ฌธํด ์ฃผ์ธ์. ๊ณง ์ง์๊ณต์ ์๊ป์ ๋ต๋ณํด ์ฃผ์ค ๊ฒ์
๋๋ค.
๋ฆฌ๋ ์ค๋ก ์งํํด๋ ๋ ๊น์?
0
13
2
์กด์ฌํ์ง ์๋ ์ผ๊ธฐ url์ ๋ ฅ ์ alert์ด ๋ ๋ฒ ๋ ์
0
16
1
useState ์ง์ ๊ตฌํ ๋ถ๋ถ์์ ์ง๋ฌธ์ด ์์ต๋๋ค.
1
20
1
FIFO ์ง๋ฌธ
0
17
2
ํ์ต์ ํ๊ณ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌ๋ฅผ ํด๋ ๊ด์ฐฎ์๊น์?
1
23
1
Design a Toast Notification System ๋ฏธ์ ๊ด๋ จ ์ง๋ฌธ๋๋ฆฝ๋๋ค.
0
33
1
๊ต์ฌ(3์)์ ๊ฐ์ ๋ด์ฉ ๋ฌธ์
0
28
2
๋ฐ์ดํฐ๋ฒ ์ด์ค 13๋ฒ ๋ฌธ์
0
42
2
์น์ 2๋ฒ ๋ถ๋ถ ๊ฐ์ ํ๋ฉด์ด ์ ๋ชป๋๊ฒ ๊ฐ์์ ๋ฌธ์ํฉ๋๋ค.
0
23
1
call stack ํํ์ด ์๋ชปํํ๋๊ฒ์ด ์๋๊ฐ์?
0
62
2
์ถ์ฒํด์ฃผ์ ์ฑ ์ ๋ํด ๋ฌธ์๋๋ฆฝ๋๋ค.
0
28
2
์ ์์ฑ ์ผ๋ก ๊ตฌ๋งค์ธ์ฆ ๊ฐ๋ฅํ ๊น์?
0
72
1
๊ฐ์์๋ฃ๊ฐ ๋๋ฝ๋์ด์
0
73
2
cache๊ด๋ จ ์ง๋ฌธ ๋๋ฆฝ๋๋ค
0
36
1
React ์ Virtual DOM ์ ์ด์ผ๊ธฐ ์์ ์คํ์ด ์๋ฉ๋๋ค.
0
34
1
ํ ์ฑ ์ด๋ป๊ฒ ๋ฐ์?
1
59
1
PPT ์๋ฃ ๊ณต์ ๋ฐ์ ์ ์์๊น์?
0
32
1
4์ฃผ์ฐจ ๋ฏธ์ ๊ฒ์ํ์ด ์๋ณด์ฌ์~
0
46
2
๊ฐ์ ์ผ์ ๋ฐ ์์ ์๋ฃ ๊ณต์ ๊ด๋ จ ๋ฌธ์๋๋ฆฝ๋๋ค!
0
34
1
6๋ฒ ์ง๋ฌธ
0
52
2
ํน์ ๋ค์ ๊ฐ์ ์ ์ ์์ ๋ ๊ฒ๋ค์ด ์์๊น์?
0
79
1
1๊ฐ ์ง๋ฌธ
0
70
2
ai๊ฐ ๋ง๋ ๊ฐ์์ธ๊ฐ์?
0
145
1
2๊ฐ nodejs 3๋จ๊ณ ์ค๋ช ์ง๋ฌธ
0
92
1

