Node.js 디자인 패턴 바이블 - 1. Node.js 플랫폼

김민재·2023년 11월 16일
0

Node

목록 보기
2/2
post-custom-banner

*🔐Study Keyword :

keyword thema

  • Node.js 철학
  • Reactor 패턴 - Node.js 비동기 이벤트 주도 아키텍처 핵심 메커니즘
  • 브라우저와 다르게 서버에서 동작하는 JavaScript 의미

- 1.1 Node.js 철학

모든 프로그래밍 플랫폼 자신들만 철학, 커뮤니티에서 따르게 되는 일련 원칙과 지침, 플랫폼 진화와 애플리케이션 개발 및 디자인에 영향을 주는 이데올로기를 지님

  • 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 간결함과 실용주의

  • 완벽하고 모든 기능 갖춘 소프트웨어와 반대로 단순하게 설계하는 것이 좋은 실천

  • 구현 위해 적은 노력, 가벼워 빨리 보급 가능, 유지보수 쉽고 빠른 이해 가능

  • 이러한 요인 커뮤니티 기여 용이하게 하고 소프트웨어 자체 성장 향상 도움

  • 해당 원칙 채택되는 것 큰 영향 준 것이 실용적인 자바스크립트 언어, 복잡한 클래스 계층 대체 위한 간단한 클래스나 함수, 클로저 사용의 예

- 1.2 Node.js 어떻게 작동

  • 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 구성 요소

- 1.3 Node.js에서 자바스크립트

  • 노드에서 사용하는 자바스크립트는 브라우저 사용하는 자바스크립트와 다소 다름
    - DOM, window, document 없음

    • 운영체제 기본적으로 제공하는 서비스 접근 가능
  • WHAT IS❓ 1.3.1 최신 자바스크립트 실행

  • WHAT IS❓ 1.3.3 모듈 시스템

--

  1. Node.js 철학: Node.js는 'non-blocking', 'event-driven'을 기반으로 한 아키텍처를 갖고 있습니다. 이는 I/O 작업이 블로킹(blocking) 되지 않도록 하여 애플리케이션의 효율성과 성능을 향상시키는데 중점을 두고 있습니다. 이를 위해 Node.js는 'event loop'와 'callback' 함수를 사용하여 비동기적으로 작동합니다.
  2. Reactor 패턴: 이는 Node.js의 비동기 이벤트 주도 아키텍처의 핵심 메커니즘이며, 애플리케이션의 성능을 향상시키는 주요 구성 요소입니다. 이 패턴에서, 이벤트는 "reactor"에 의해 감지되고 적절한 "handler"로 전달됩니다. Node.js에서는 이벤트 루프가 reactor의 역할을 하며, callback 함수가 handler의 역할을 합니다.
  3. 서버에서 동작하는 JavaScript: 웹 브라우저에서 동작하는 JavaScript와 달리, Node.js는 서버에서 동작하는 JavaScript입니다. 이는 Node.js가 파일 시스템에 액세스하고, 네트워크를 통해 데이터를 전송하고, HTTP 또는 TCP 서버를 생성할 수 있다는 것을 의미합니다.
profile
자기 신뢰의 힘을 믿고 실천하는 개발자가 되고자합니다.
post-custom-banner

0개의 댓글