1장 - Node.js 플랫폼
1. Node.js의 철학
- 경량 코어
최소한의 기능 세트를 가지고, 코어의 바깥부분에 사용자 전용 모듈 생태계를 두었다.
안정적 + 느리게 진화하는 것 대신 커뮤니티에게 폭 넓은 해결책을 실험할 수 있는 자유를 주어서 빠르게 성장했다.
- 경량 모듈
프로그램 코드를 구성하는 기본적인 수단.
각 패키지가 자신이 필요로 하는 버전의 종속성 패키지들을 갖도록 한다.
- 작은 외부 인터페이스
확장보다는 사용되기 위해서 만들어졌다. (모듈 내부 접근을 제한한다) -> 그럼 모듈을 확장하고 싶다면 어떻게 해야할까?
2. Node.js는 어떻게 작동하는가 - Reactor 패턴
- I/O는 느리다.
- 블로킹 I/O
I/O 요청 함수는 작업이 완료될 때까지 스레드의 실행을 차단한다. 이 문제를 해결하는 전통적인 방법은 개별 스레드 or 프로세스를 사용하는 것이다.
스레드는 시스템 리소스 측면에서 비용이 저렴하지 않다. 메모리를 소모하고 컨텍스트 전환을 유발하여 대부분의 시간 동안 사용하지 않는 장시간 실행 스레드를
- 논 블로킹 I/O
운영체제에서 논블로킹 모드라면 데이터 읽기 쓰기를 기다리지 않고 항상 즉시 반환된다. 호출 당시 결과가 없다면 그 순간에 사용 가능한 데이터가 없다는 것을 알린다.
기본적인 패턴은 루프 내에서 리소스를 폴링하는 것이다.
하지만 이것도 CPU 낭비를 일으킨다. 왜냐하면 사용할 수 없는 리소스를 자꾸만 확인하게 되기 때문이다.
그렇다면.. 해결책은?
- 이벤트 디멀티플렉싱
논 블로킹 리소스를 효율적인 방법으로 처리하기 위한 메커니즘. 동기 이벤트 디멀티플렉서 or 이벤트 통지 인터페이스.
멀티플렉싱: 전기통신 용어. 여러 신호들을 하나로 합성하여 매개체를 통해 쉽게 전달하는 것.
디멀티플렉싱: 신호가 원래의 구성요소로 다시 분할됨.
잘 이해가 안간다.
- 리액터 패턴
- libuv
서로 다른 운영체제에서 서로 다른 리소스 유형의 논 블로킹 동작을 표준화하기 위해 Node.js 코어 팀이 만든 C 라이브러리.
이 외에도 리액터 패턴을 구현하고 있어서, 이벤트 루프 생성, 이벤트 큐 관리, 비동기 I/O 작업의 실행 등의 API를 제공한다.
- 추가적인 구성
바인딩: libuv와 다른 기능을 랩핑하고 표출시키기 위한 바인딩 세트.
v8: JavaScript 엔진.
코어 JS API: Node.js API를 구현하고 있는 코어
3. Node.js 에서 동작하는 JavaScript의 의미
- DOM, window, document 없음.
- 운영체제에서 제공하는 서비스 접근 가능.
'JavaScript > Node.js' 카테고리의 다른 글
[책] 디자인 패턴 바이블 정리 - 3 (0) | 2021.07.04 |
---|---|
[책] 디자인 패턴 바이블 정리 - 2 (0) | 2021.07.03 |
process.EventEmitter()가 동작 하지 않는다. (0) | 2018.05.08 |