티스토리 뷰

학습/용어집

Nods.js

대싕:) 2025. 1. 19. 23:48

Node.js는 서버 측 애플리케이션 개발을 위해 설계된 JavaScript 런타임 환경입니다. 이를 통해 JavaScript를 클라이언트뿐만 아니라 서버에서도 사용할 수 있습니다. Node.js는 Google의 V8 JavaScript 엔진 위에서 동작하며, 빠르고 효율적인 비동기 프로그래밍을 지원합니다.

 

1. 비동기 I/O와 이벤트 기반 아키텍처

  • 비동기 I/O(Asynchronous I/O)
    • 파일 읽기/쓰기, 데이터베이스 쿼리, 네트워크 요청 등의 작업을 비동기로 처리하여, 실행이 블로킹되지 않습니다.
    • 콜백 함수나 Promiseasync/await를 사용해 비동기 작업을 제어합니다. (비동기가 기본, 동기화가 필요한 경우 사용하는 방법입니다)
  • 이벤트 기반(Event-Driven)
    • 모든 요청은 이벤트 루프(Event Loop)를 통해 처리됩니다.
    • 이벤트 기반 설계로 고성능을 유지하면서도 확장 가능.

2. 단일 스레드 환경

  • Single-Threaded
    • Node.js는 단일 스레드에서 실행되지만, 내부적으로 이벤트 루프와 libuv 라이브러리를 활용해 멀티스레드 작업(파일 시스템, 네트워크 요청 등)을 처리합니다.
  • 장점
    • 컨텍스트 전환이 적어 성능이 높음. (스레드 전환이 필요없음. 모든 작업이 하나의 스레드에서 처리됨)
    • 동시에 많은 요청을 효율적으로 처리 가능.
  • 단점
    • CPU 집약적인 작업(복잡한 계산 등)에는 적합하지 않음.
    • 이런 작업은 워커 스레드(Worker Threads)나 클러스터링(Clustering)으로 해결.

3. V8 엔진 기반

  • Google의 V8 JavaScript 엔진을 기반으로 작동합니다.
    • JavaScript를 고속으로 실행하며, C++로 작성되어 빠른 성능을 제공합니다.
    • Just-In-Time (JIT) 컴파일러를 사용JavaScript 코드를 네이티브 머신 코드로 변환.

 

4. 크로스 플랫폼

  • 다양한 운영 체제(Windows, macOS, Linux)에서 실행 가능.
  • JavaScript를 사용하는 클라이언트와 서버 간에 코드 공유 가능.

 

5. 풍부한 모듈과 NPM 생태계

  • Node Package Manager (NPM)
    • 세계에서 가장 큰 오픈 소스 패키지 레지스트리.
    • 다양한 라이브러리와 도구를 쉽게 설치 및 관리 가능.
    • 예: Express.js (웹 프레임워크), Lodash (유틸리티 라이브러리)

 

6. 비동기 스트림 처리

  • *스트림(Stream)을 활용해 데이터를 조각으로 처리. (*작은 조각(chunk)로 처리하는  Node.js의 기본 인터페이스)  
    • 파일 읽기/쓰기, HTTP 요청/응답, 네트워크 소켓 등.
  • 스트림 기반 처리로 대규모 데이터를 효율적으로 처리 가능.

 

7. 확장성과 경량성

  • 확장성(Scalability)
    • 비동기 I/O이벤트 루프 덕분에 수천 개의 동시 연결을 처리 가능.
    • 클러스터링(Clustering)을 통해 멀티코어 프로세서 활용 가능.
  • 경량성(Lightweight)
    • 필요한 기능만 추가하는 모듈 기반 설계.

 

8. JSON과의 높은 호환성

  • JavaScript 객체를 JSON으로 쉽게 변환 가능.
  • REST API와 같은 데이터 교환 형식에 매우 적합.

 

9. 커뮤니티와 생태계

  • 대규모 커뮤니티와 활발한 오픈 소스 기여.
  • 최신 트렌드와 요구사항을 반영한 다양한 라이브러리 제공.

 

10. 주요 사용 사례

  • 실시간 애플리케이션: 채팅 애플리케이션, 실시간 알림.
  • API 서버: RESTful API 및 GraphQL 서버.
  • 스트리밍 애플리케이션: 음악, 동영상 스트리밍 서비스.
  • 마이크로서비스: 독립적이고 경량화된 서비스 구축.
  • IoT 애플리케이션: 센서 및 장치 간 실시간 통신.

 

Node.js의 장점

  1. 빠른 실행 속도 (V8 엔진 기반).
  2. 비동기 처리로 높은 성능.
  3. NPM으로 다양한 라이브러리와 도구 사용 가능.
  4. 클라이언트-서버 모두 JavaScript로 개발 가능.
  5. 이벤트 기반 설계로 실시간 애플리케이션에 적합.

 

Node.js의 단점

  1. CPU 집약적인 작업에서 성능 저하.
  2. 단일 스레드 모델의 특성상 잘못 작성된 코드가 전체 애플리케이션에 영향을 미칠 수 있음.
  3. 콜백 지옥(Callback Hell) 가능성(비동기 코드를 적절히 관리하지 않으면).
  4. 안정성이 낮은 오픈 소스 패키지에 의존할 위험.

'학습 > 용어집' 카테고리의 다른 글

데이터베이스  (0) 2025.01.22
프런트엔드 프레임워크(Front-end Framework)  (0) 2025.01.21
libuv 라이브러리(Node.js)  (0) 2025.01.19
클라우드 컴퓨팅(Cloud Computing)  (1) 2025.01.16
DevOps  (0) 2025.01.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함