본문 바로가기
JavaScript/Node

[Node] Node.js?

by kwh_coding 2024. 7. 17.

Node.js란?

- Node.js는 서버 사이드 및 네트워크 애플리케이션을 구축하기 위해 설계된 오픈 소스, 크로스 플랫폼 JavaScript 런타임 환경이다. Node.js는 V8 JavaScript 엔진을 사용하여 JavaScript를 매우 빠르게 실행하며, 비동기 이벤트 기반 아키텍처를 채택하여 높은 성능과 확장성을 제공한다. 

 

Node.js의 주요 특징 및 구성 요소

  1. 비동기 이벤트 기반 아키텍처
    • 이벤트 루프: Node.js의 핵심은 이벤트 루프이다. 비동기 작업을 관리하고, 작업이 완료되었을 때 콜백을 실행하는 역할을 한다. 이 구조 덕분에 Node.js는 블로킹 없이 많은 클라이언트 요청을 동시에 처리할 수 있다.
    • 콜백: Node.js에서 비동기 작업이 완료되면 호출되는 함수이다. 예를 들어, 파일을 읽는 작업이 끝났을 때 실행되는 함수를 지정할 수 있다.
    • 프라미스 async/await: 콜백의 복잡성을 줄이기 위해 ES6에서 도입된 프라미스와, 이후 async/await 구문을 사용할 수 있다. (아주 편리함 ㅋㅋ.)
  2. V8 JavaScript 엔진
    • Google Chrome에서 사용되는 V8 엔진을 기반으로 한다. 이는 JavaScript 코드를 매우 빠르게 실행할 수 있게 해준다.
  3. 모듈 시스템 (CommonJS)
    • Node.js는 모듈 시스템을 사용하여 코드를 모듈화할 수 있다. 각 파일은 독립적인 모듈로 동작하며, require를 사용하여 다른 모듈을 불러올 수 있다.
  4. 내장 모듈
    • fs: 파일 시스템에 접근할 수 있는 모듈이다. 파일 읽기, 쓰기, 삭제 등의 작업을 할 수 있다.
    • http: HTTP 서버와 클라이언트를 생성할 수 있는 모듈이다. 웹 서버를 만들 때 주로 사용된다.
    • path: 파일 및 디렉토리 경로 작업을 위한 유틸리티 모듈이다.
    • events: 이벤트를 처리할 수 있는 모듈이다. 이벤트 발행 및 구독 기능을 제공한다.
    • stream: 스트림을 처리할 수 있는 모듈이다. 대용량 데이터를 처리할 때 유용하다.

Node.js의 작동 방식

Node.js는 단일 스레드에서 동작하지만, 내부적으로는 많은 비동기 작업을 처리한다.

  • 이벤트 루프: Node.js의 핵심 구성 요소로, 비동기 작업을 관리한다. 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 처리한다.
  • 워커 스레드: Node.js 10버전 이후 도입된 기능으로, CPU 집약적인 작업을 별도의 스레드에서 실행하여 메인 이벤트 루프의 블로킹을 피할 수 있다.

Node.js의 주요 장점

  1. 높은 성능
    • V8 엔진과 비동기 이벤트 루프 덕분에 높은 처리 성능을 제공한다.
  2. 확장성
    • 비동기 방식으로 많은 클라이언트 요청을 동시에 처리할 수 있어 확장성이 뛰어나다.
  3. JavaScript 사용
    • 서버와 클라이언트 모두에서 동일한 언어(JavaScript)를 사용할 수 있다.
  4. 활발한 생태계
    • npm(Node Package Manager)를 통해 수많은 오픈 소스 패키지를 쉽게 사용할 수 있다.

Node.js의 주요 단점

  1. 단일 스레드
    • Node.js는 단일 스레드에서 동작하기 때문에, CPU 집약적인 작업을 처리할 때 성능 저하가 발생할 수 있다. 이것은 워커 스레드를 통해 일부 해결되었다.
  2. 콜백 지옥
    • 비동기 작업이 많아지면 콜백이 중첩되어 코드가 복잡해질 수 있다. 하지만 프라미스와 async/await를 통해 완화할 수 있다.
  3. 비전통적인 구조
    • 이벤트 기반 비동기 프로그래밍 모델은 전통적인 블로킹 방식에 익숙한 개발자들에게는 학습 곡선이 있을 수 있다.

'JavaScript > Node' 카테고리의 다른 글

[Node] Socket.io 활용 WebRTC  (0) 2024.08.24
[Node] 암호화(feat. bcrypt)  (0) 2024.07.25
[Node] session  (3) 2024.07.24