논블로킹(Non-blocking) I/O
- 자바스크립트는 기본적으로 한번에 하나의 작업을 처리하는 언어
- 논블로킹 방법을 통해 I/O 작업의 경우 자바스크립트도 동시에 처리 가능
• I/O는 입력(Input)과 출력(Output)을 의미
‣ 파일 읽기 / 파일 쓰기
‣ 네트워크를 통해 데이터베이스에 데이터 전송 / 조회
- 블로킹(Blocking)
• 동기식 I/O
• 호출된 함수가 작업을 마칠 때까지 대기하는 방식
• 함수를 호출하면 해당 함수가 완전히 종료될 때까지 다른 작업을 수행하지 못함
논블로킹(Non-blocking)
• 비동기식 I/O
• 호출된 함수가 작업 중에도 다른 작업을 바로 진행할 수 있도록 하는 방식
• 함수를 호출하면 해당 함수가 실행되는 중에도 다른 작업을 동시에 진행
• Node.js는 I/O 작업에 논블로킹 방식 사용
✓ 싱글 스레드(Single Thread)
- 하나의 스레드를 사용 방식(vs 멀티 스레드)
- 장점
• 자원 관리에 적은 비용 소모
• 자원이 부족한 환경에서도 구동 가능
- 단점
• 멀티 스레드 방식에 비해 성능 면에서 불리
- 단점 극복 방법
• 논블로킹 I/O
• 이벤트 루프(Event Loop)
이벤트 루프(Event Loop)
- 싱글 스레드를 사용한다는 것은 하나의 콜 스택(시스템 스택)을 사용한다는 것
• 콜 스택(시스템 스택)은 함수 호출과 복귀에 따른 수행 순서를 관리
• 후입선출 구조로 가장 나중에 호출된 함수가 가장 먼저 실행을 완료하고 복귀
- 싱글 스레드의 약점을 보완하고 효율적으로 작업을 처리할 수 있게 고안
- 틱(tick)
• 이벤트 루프가 콜 스택과 콜백 큐의 상태를
체크해 콜 스택이 빈 상태가 되면 콜백 큐의
첫 번째 콜백 함수를 콜 스택으로 이동시키는
작업
- 이벤트 루프의 틱 동작을 통해 비동기 함수들이
수행되는 동안 콜 스택 함수들이 동시에 수행되
는 다중 작업 효과를 구현
✓ 클러스터링 지원
- 멀티 스레드의 효과를 구현
- CPU 코어 하나당 싱글 스레드로 동작하기 때문에 CPU 코어를 추가하는 방식
- 요청을 분산시키고 병렬로 처리 가능하기에 멀티 스레드 언어와 동일한 효과 제공
✓ Node.js 기반으로 개발된 자바스크립트 패키지 관리자
- Node.js에서만이 아닌 브라우저에서도 사용 가능
- 전 세계 개발자들이 개발한 약 100만 개 이상의 모듈이 등록
- 자바스크립트가 전 세계 개발자들에게 사랑 받는 언어가 되게한 결정적인 역할을 함
- 개발자는 npm을 통해 다양한 패키지 또는 모듈을 설치해 사용할 수 있음
✓ Node.js 설치 여부 확인하기
- 콘솔 창에서 아래 명령어 실행
• node --version
• npm --version
댓글