일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Klaytn
- solidity
- 이더리움
- 정보처리기사실기요약
- ERC-721
- 블록체인
- 클레이튼
- node.js
- ERC721
- 정보처리기사실기
- React
- 페이지클론
- web3.js
- ETH
- Non-Blocking
- github
- 카카오페이지클론
- 노마드코더
- 2021정보처리기사실기
- it5분잡학사전
- 콜백함수this
- 정보처리기사
- 노개북
- npm
- 비트코인
- git
- 카카오홈페이지클론
- it5
- 솔리디티
- blockchain
- Today
- Total
Be lazy, Be crazy
[Node.js] Node.js와 Non-blocking 본문
📍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
'Node.js' 카테고리의 다른 글
Google Sheet를 nodeJS로 연결하기 [googleapis] (1) | 2022.09.21 |
---|---|
node.js HTTP Server 템플릿 제작(basic)(1) (0) | 2022.03.27 |
discord.js를 이용해서 봇 만들기 [node.js discord 봇 제작] (1) | 2022.03.19 |
sync vs async? blocking vs non-blocking? (0) | 2021.12.10 |