노드란?
- Node.js는 크롬 자바스크립트 엔진으로 빌드된 "자바스크립트 런타임"이다.
* 런타임 : 특정언어로 만든 프로그램들을 실행할 수 있는 "환경"
- Node.js는 이벤트 기반, non-blocking I/O, single-thread 모델을 사용
- Node.js의 패키지 생태계인 npm (Node package manager)이 존재한다.
Event-driven
- 이벤트가 발생하면 이벤트리스너에 등록한 콜백함수가 호출. 이벤트가 다 처리되면 다음 이벤트를 대기
- event-loop : 이벤트 발생 시 호출되는 콜백함수들을 관리, 콜백함수들의 실행 순서 결정. 노드가 종룔될 때까지 이벤트 처리를 위한 작업을 반복하므로 이벤트루프라고 불림
- task-queue : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간. 이벤트루프가 정한 순서대로 큐에서 대기
- background : 타이머, I/O 작업 콜백, 이벤트리스너들이 대기하는 곳
Non-blocking I/O
노드는 입출력과 같이 오래걸리는 작업을 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 작업이 다시 태스크 큐를 거쳐 호출 스택으로 올라오는 방식의 논블로킹 방식으로 처리
파일 시스템, 네트워크 요청과 같은 I/O 작업은 논블로킹으로 동작
Single-thread
- 노드는 내부적으로는 스레드를 여러개 가지고 있지만 사용자가 제어할 수 있는 스레드는 하나 뿐이므로 싱글 스레드라고 부른다.
- 즉, 이벤트루프만 싱글스레드라서 요청과 응답 처리가 싱글스레드일뿐, 백그라운드에서 동작하는 워커(io처리)들은 멀티쓰레드이다.
- 싱글 스레드 이벤트 루프의 장점
- 점점 더 많은 동시에 발생하는 클라이언트의 요청을 처리하는 것이 쉽다.
- 동시에 발생하는 클라이언트의 요청이 증가할 때, 이벤트 루프를 이용하기 때문에 많은 스레드를 이용하지 않는다.
- 멀티 스레드 방식보다 스레드를 덜 이용하기 때문에 메모리 또는 자원 소모가 작다.
'Web > backend' 카테고리의 다른 글
AWS django 배포 (0) | 2020.10.24 |
---|---|
Django - select_related() & prefetch_related() (0) | 2020.10.24 |
인증(Authentication) & 인가(Authorization) (0) | 2020.10.24 |
Django polls 앱 (0) | 2020.10.24 |
HTTP, RESTful API (0) | 2020.10.24 |