Be lazy, Be crazy

[Node.js] Node.js와 Non-blocking 본문

Node.js

[Node.js] Node.js와 Non-blocking

LAZY SIA 2021. 12. 10. 15:32
728x90
반응형

📍Node.js 란?

- Node.js를 한마디로 정의하면 '자바스크립트 런타임'이라고 할 수 있습니다.

(*런타임 : 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태)

- 쉽게 말하면 그냥 자바스크립트 실행창, 실행환경이라고 할 수 있겠습니다.

 

- 자바스크립트를 해석하는 것은 브라우저 담당입니다.크롬은 V8, 모질라는 SpiderMonkey, 인터넷 익스플로러는 Chakra 등 브라우저마다 해석엔진이 존재합니다. 그 중 크롬의 V8 엔진은 자바스크립트 해석만 시키기엔 엔진이 너무 사기캐라 V8 자체로 출시가 되고, 이게 바로 Node.js 입니다.

- Node.js는 자바스크립트를 브라우저 말고도 로컬 PC 등 다른 환경에서도 실행할 수 있게 합니다.

 

- Node.js 덕분에 자바스크립트를 프로그래밍 언어처럼 사용하기 시작했습니다

(서버짜기도 쉽고, 'Non-blocking I/O' 때문에 서버만들 때 Node.js를 사용합니다.)

📍Non-blocking 이란?

- Non-blocking, 말그대로 block(막다)하지 않는 특징을 의미합니다.

 

- 서버는 요청 받으면 요청 내용을 보내주는 프로그램이죠? 보통의 서버는 순차적으로 요청을 처리하며, 요청 처리될 때 까지 멈추는 특징이 있습니다. 이것을 blocking이라고 하고 아무리 작업이 단순해도 이전 작업이 길어지면 오래 걸린다는 단점이 있습니다.

- Node.js 서버는 모든 요청을 일단 받은 후, 처리속도가 빠른 것부터 결과를 뱉습니다. 오래 걸리는 것은 제껴두고 빨리되는 것부터 처리합니다. 멈춤이 없습니다.

 

- 한마디로, Non-blocking이란 다른 주체의 작업에 관련없이 자신의 작업을 하는 것을 의미하며, 호출된 함수가 바로 호출한 함수에게 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있도록 하는 방식입니다.

(그렇다면 blocking은 호출된 함수가 자신의 작업을 모두 완료할 때까지 호출한 함수에게 제어권을 넘겨주지 않고 가지는 방식을 의미하겠죠?)

 

- 요청이 매우 많은 특징을 가진 SNS나 채팅 서비스의 경우 Non-blocking 특성이 매우 매우 중요합니다. 실시간으로 보여지길 바라는 SNS에서는 요청이 많아지거나 오래걸리는 요청이 있다고 무한정 대기하게 해선 안되겠죠? 그렇기 때문에 Node.js 서버 같이 Non-blocking 특징을 가진 서버를 이용하면 좋습니다.

(참고: 일반 서버도 서버 스케일링/멀티 쓰레딩 등으로 요청을 빠르게 처리할 수 있도록 할 수 있긴 합니다!)

 

- Node.js 코드는 매우 짧고 쉬워서 빠르게 개발이 가능합니다. 빠르게 개발이 가능하다는 건, 빠른 프로토타입을 만들수 있어야 하는 린스타트업에서 아주 좋겠죠?

 

 

 

 

⬇️ Non-blocking에 대하여 더 알고 싶다면? 

 

sync vs async? blocking vs non-blocking?

📍동기와 비동기 - '호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐'가 관심사 동기(Synchronous) - 호출되는 함수의 작업 완료 여부를 누가 신경 쓰냐? -> 호출한 함수가! - 호출되는 함수의 작업

lazy-crew.tistory.com

 

반응형
Comments