확장성 있는 네트워크 애플리케이션 개발에 사용되는 소프트웨어 플랫폼으로
자바스크립트를 사용하여 작성한다.
1. 스레드 기반 동기방식 (Blocking I/O)
하나의 스레드가 request 받으면 모든 처리가 완료 될때까지 대기 후 처리가 끝나면 다시 응답을 보냄.
기존 업무 처리가 완료되기 전에 또다른 request 발생하면 새로운 스레드가 처리함.
request가 동시에 발생하여 많아지면 서버 과부화가 나타난다.
2. 단일스레드 이벤트 루프 기반 비동기방식 (Non-Blocking I/O)
모든 API가 비동기 방식이기에 호출 후 응답을 기다리지 않고 다른 API를 호출한다.
이전에 호출했던 API의 응답이 도착하면 이벤트 루프를 사용하여 처리한다.
여러 이벤트가 동시에 발생 시, 어떤 순서로 callback 함수를 호출할지를 판단하고
이벤트가 종료될때까지 작업을 반복하기에 루프라고 부른다.
장점
1. 단일 스레드의 논 블로킹 이벤트 기반 비동기 방식을 사용하기에 높은 처리 성능을 가짐.
2. 내장 HTTP 서버 라이브러리를 포함하고 있어서 별도의 소프트웨어 없이 동작하는 것이 가능.
3. 자바스크립트를 사용하기에 프론트엔드 와 백엔드 모두 개발환경에 좋다.
4. NPM 을 기반으로 패키지를 제공하기에 효율성이 좋음
단점
1. 비동기 기반 처리 방식이기에 로직이 복잡할 경우에는 callback의 늪에 빠질 수 있다.
2. 단일 스레드를 사용하기에 오래 걸리는 웹 서비스에서는 성능이 저하됨.
3. 코드를 수행해야지만 에러가 있는지 확인가능.
4. 세션 공유시 부가적인 인프라가 필요.