keyword thema
- Node.js 철학
- Reactor 패턴 - Node.js 비동기 이벤트 주도 아키텍처 핵심 메커니즘
- 브라우저와 다르게 서버에서 동작하는 JavaScript 의미
모든 프로그래밍 플랫폼 자신들만 철학, 커뮤니티에서 따르게 되는 일련 원칙과 지침, 플랫폼 진화와 애플리케이션 개발 및 디자인에 영향을 주는 이데올로기를 지님
WHAT IS❓ 1.1.1 경량 코어
- Node.js 코어 몇 가지 원칙들 기반으로 기초 구성
기능 세트를 가지고 코어 바깥 부분에 유저랜드 혹은 유저스페이스라 불리는 사용자 전용 모듈 생태계를 두는 것
WHAT IS❓ 1.1.2 경량 모듈
- Node.js 프로그램 코드 구성하는 기본 수단으로 모듈 개념 사용
애플리케이션 재사용 가능한 라이브러리 만들기 위한 구성 요소
코드 양뿐 아니라 범위 측면에서 작은 모듈 디자인하는 것이 통용되는 원칙
작은 모듈의 장점
이해와 사용이 쉬움
테스트 및 유지보수 쉬움
사이즈 작아 브라우저에 사용하기 완벽
WHAT IS❓ 1.1.3 작은 외부 인터페이스
Node.js 모듈 장점은 작은 사이즈, 범위, 최소한 기능 노출
Node.js 모듈 정의 일반적 패턴, 단일 진입점 제공 위해 단 하나의 함수나 클래스 노출
Node.js 모듈 특징 중 하나는 확장보단 사용되기 위해 만들어졌다는 것인데 유스케이스 줄이고 구현 단순화, 유지관리 용이하고 가용성 높이는 장점 가짐
따라서 내부 외부에 노출시키지 않기 위해 클래스 보단 함수 노출을 선호
WHAT IS❓ 1.1.4 간결함과 실용주의
완벽하고 모든 기능 갖춘 소프트웨어와 반대로 단순하게 설계하는 것이 좋은 실천
구현 위해 적은 노력, 가벼워 빨리 보급 가능, 유지보수 쉽고 빠른 이해 가능
이러한 요인 커뮤니티 기여 용이하게 하고 소프트웨어 자체 성장 향상 도움
해당 원칙 채택되는 것 큰 영향 준 것이 실용적인 자바스크립트 언어, 복잡한 클래스 계층 대체 위한 간단한 클래스나 함수, 클로저 사용의 예
Node.js 내부적 어떻게 동작하는지 이해 및 비동기의 핵심인 리액터 패턴 소개
단일 스레드 아키텍처와 논 블로킹 I/O 주요 개념
WHAT IS❓ 1.2.1 I/O는 느리다
I/O 컴퓨터 기본적 동작들 중 가장 느린데, I/O 속도와 빈도는 기술적 측면에만 의존하지 않으며 디스크나 네트워크 보다 느릴 수 있음
WHAT IS❓ 1.2.2 블로킹 I/O
전통적 블로킹 I/O 프로그래밍 I/O 요쳥하는 함수 호출은 작업 완료될 때까지 스레드 실행 차단
스레드 시스템 리소스 측면에서 비용이 저렴하지 않아 메모리 소모 및 컨텍스트 전환 유발하여 대부분 시간 동안 사용하지 않는 장시간 실행 스레드를 가져 메모리와 CPU 사이클 낭비
WHAT IS❓ 1.2.3 논 블로킹 I/O
해당 운영모드에선 시스템 호출은 데이터가 읽혀지거나 쓰여지기를 기다리지 않고 항상 즉시 반환
논 블로킹 I/O 다루는 가장 기본적 패턴은 실제 데이터 반환될 때까지 루프 내 리소스 적극적을 폴링하는 것, 이것을 바쁜 대기라 함
WHAT IS❓ 1.2.4 이벤트 디멀티플렉싱
바쁜 대기는 논 블로킹 리소스 처리위한 이상적 기법 아님
효율적으로 처리하기 위한 동기 이벤트 디멀티프렉터(이벤트 통지 인터페이스) 메커니즘 제공
멀리플렉싱, 여러 신호 하나로 합성해 제한된 수용 범위 내 매개체 통해 쉽게 전달하는 방법 나타냄
디멀티 플렉싱, 신호 원래 구성요소로 다시 분할되는 작업
동기 이벤트 디멀티플렉서, 여러 리소스 관찰하고 이 리소스 중 읽기 또는 쓰기 연산 실행 완료시 새로운 이벤트 반환
이점은 동기 이벤트 디멀티플렉서가 처리 위한 새로운 이벤트가 있을 때까지 블로킹된다는 것
해당 패턴 이용 시 바쁜 대기 기술 이용하지 않고 여러 I/O 작업 단일 스레드 내 다룰 수 있어 여러 리소스를 단일 스레드를 사용하여 다룸
단일 스레드 사용이 동시적 다중 I/O 사용 작업에 나쁜 영향 미치치 않고 작업은 시간에 다라 분산되어 전체 유휴시간 최소화하는데 이점
하나 스레드만 가지는 건 프로그래머가 동시성에 접근하는 방식에 이로운 영향 미침
경쟁 상태 발생 문제, 다중 스레드 동기화 문제 없는게 더 간단한 동시성 전략 사용하게 해줄 수 있는지 볼 수 있음
WHAT IS❓ 1.2.5 리액터 패턴
리액터 패턴 이면 주된 아이디어 각 I/O 작업에 연관된 핸들러 갖는 것, 이는 콜백함수에 해당
콜백함수는 이벤트 생성되고 이벤트 루프의해 처리되는 직시 호출
WHAT IS❓ 1.2.6 Libuv, Node.js I/O 엔진
각 운영체제는 이벤트 디멀티플렉서 위한 자체 인터페이스 가짐,
Node.js 주요 운영체제 호환하게 해주며 서로 다른 리소스 유형 논 블로킹 동작 표준화를 위해 libuv 불리는 C 라이브러리 생성
libuv는 기본 시스템 호출 추상화하는 것 외에 리액터 패턴 구현, 이벤트 루프 생성, 이벤트 큐 관리, 비동기 I/O 작업 실행 및 다른 유형 작업 큐에 담기위한 API 제공
WHAT IS❓ 1.2.7 Node.js 위한 구성
리액터 패턴과 libuv, Node.js 기본 구성 요소
전체 플랫폼 구축 위해선 3개 구성 더 필요,
libub와 다른 저수준 기능 랩핑하고 표출 시키기 위한 바인딩 세트
V8, 크롬 브러우저 위해 구글 개발한 자바스크립트 엔진
고수준 Node.js API 구현하고 있는 코어 자바스크립트 라이브러리
이것들이 Node.js 구성 요소
노드에서 사용하는 자바스크립트는 브라우저 사용하는 자바스크립트와 다소 다름
- DOM, window, document 없음
WHAT IS❓ 1.3.1 최신 자바스크립트 실행
WHAT IS❓ 1.3.3 모듈 시스템
--