inflearn logo
๊ฐ•์˜

Course

Instructor

"The Era of AI Clicks" Breaking Through with Principles: Node.js and CS Part 1 - V8 and Core Deconstruction

[Lecture Notes] Session 3: Understanding Asynchronous Non-blocking Architecture through the Restaurant Waiter Analogy

3๊ฐ• ์งˆ๋ฌธ

Resolved

80

runeunsong5373

2 asked

0

๐Ÿ’ก[CS ์‹ค๋ฌด Point: OS ๊ณ„์ธต์˜ ์—ญ๋Ÿ‰ ํ™œ์šฉ (epoll / kqueue)] ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•ด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์ •๋ง๋กœ ํ˜ผ์ž ์ผํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํŒŒ์ผ ์ฝ๊ธฐ๋‚˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๊ฐ™์€ ๋ฌด๊ฑฐ์šด ์ž‘์—…์€ Node.js๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ์šด์˜์ฒด์ œ ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ์ด๋ฒคํŠธ ํ†ต์ง€ API(Linux์˜ epoll, macOS์˜ kqueue ๋“ฑ ์‹œ์Šคํ…œ ์ฝœ)๋ฅผ ํ†ตํ•ด ์šด์˜์ฒด์ œ์—๊ฒŒ ์ฒ ์ €ํ•˜๊ฒŒ ์œ„์ž„(Offloading)ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Node.js์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๊ตํ†ต์ •๋ฆฌ๋งŒ ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ๋ฟ, ์‹ค์ œ ๋ฌด๊ฑฐ์šด ์ง์€ OS ์ปค๋„์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋‚˜๋ฅด๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์•ˆ๋…•ํ•˜์„ธ์š”, ์œ„ ์„ค๋ช…์—์„œ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ์— ์œ„์ž„ํ•˜๋Š” ์ž‘์—…๊ณผ libuv ์Šค๋ ˆ๋“œ ํ’€์˜ ์›Œ์ปค ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ์—ฐ๊ด€์ด ์žˆ๊ณ  ์–ด๋–ป๊ฒŒ ์œ ๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

javascript node.js ์ปดํ“จํ„ฐ-๊ตฌ์กฐ frontend backend

Answer 2

1

nhcodingstudio

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฐ•์€์†ก๋‹˜, ์งˆ๋ฌธ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ์กฐ๋งํ•˜๋ฉฐ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๋‹ˆ์–ด ๋ ˆ๋ฒจ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•ด ๊ผญ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•  ์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ง์”€๋“œ๋ฆฌ๋ฉด, ๋งŽ์€ ๋ถ„๋“ค์ด ๋ชจ๋“  ๋น„๋™๊ธฐ ์ž‘์—…์ด ์Šค๋ ˆ๋“œ ํ’€(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 ์‹ค๋ฌด ์„œ๋ฒ„์˜ ํ•ต์‹ฌ ๋™์ž‘ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

1

runeunsong5373

๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณต์Šต์„ ํ•ด์•ผ๊ฒ ๋„ค์š”.

0

communityai8509

์•ˆ๋…•ํ•˜์„ธ์š”, ์ธํ”„๋Ÿฐ AI ์ธํ„ด์ž…๋‹ˆ๋‹ค. ๋ฐ•์€์†ก๋‹˜.

Node.js์™€ ๊ด€๋ จ๋œ ๊ณ ์„ฑ๋Šฅ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จํ•˜์—ฌ ์ค‘์š”ํ•œ ์‚ฌํ•ญ์„ ์งˆ๋ฌธํ•ด ์ฃผ์…จ๊ตฐ์š”. ๋‹ค์Œ์€ ์šด์˜์ฒด์ œ์˜ ์—ญํ• ๊ณผ libuv ์Šค๋ ˆ๋“œ ํ’€์˜ ์—ฐ๊ด€์„ฑ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

Node.js์—์„œ์˜ I/O ์ฒ˜๋ฆฌ

  1. ์šด์˜์ฒด์ œ ์—ญํ• :

    • Node.js๋Š” ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, I/O ์ž‘์—… ์ž์ฒด๋ฅผ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์šด์˜์ฒด์ œ์—๊ฒŒ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.
    • ์šด์˜์ฒด์ œ๋Š” epoll(Linux)๋‚˜ kqueue(macOS)์™€ ๊ฐ™์€ ๊ณ ์„ฑ๋Šฅ ์ด๋ฒคํŠธ ํ†ต์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํŒŒ์ผ ์ž…์ถœ๋ ฅ, ๋„คํŠธ์›Œํฌ ์ž…์ถœ๋ ฅ ๋“ฑ์˜ ์ž‘์—… ์™„๋ฃŒ๋ฅผ Node.js ์ด๋ฒคํŠธ ๋ฃจํ”„์— ํ†ต์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด Node.js ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๋ธ”๋กœํ‚น ์—†์ด ๋‹ค๋ฅธ ์ž‘์—…์„ ๊ณ„์† ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. libuv ์Šค๋ ˆ๋“œ ํ’€:

    • ์ผ๋ถ€ ์ž‘์—…(์˜ˆ: ํŒŒ์ผ ์ž…์ถœ๋ ฅ, DNS ์กฐํšŒ ๋“ฑ)์€ ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋น„๋™๊ธฐ I/O API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , libuv์˜ ์Šค๋ ˆ๋“œ ํ’€์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
    • libuv ์Šค๋ ˆ๋“œ ํ’€์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 4๊ฐœ์˜ ์›Œ์ปค ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์Šค๋ ˆ๋“œ๋“ค์ด ๋ธ”๋กœํ‚น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ CPU ์ง‘์•ฝ์ ์ธ ์ž‘์—…์ด๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” I/O ์ž‘์—…์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์œ ๊ธฐ์ ์ธ ๋™์ž‘

  • 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