티스토리 뷰

JavaScript/Node.js

[Node.js]Node.js

Vagabund.Gni 2023. 6. 10. 10:08
728x90
반응형

목차

     

    Node.js

     

     

    Node.js는 오픈 소스 JavaScript 엔진인 크롬 V8에 비동기 이벤트 처리 라이브러리인 libuv를 결합한 플랫폼이다.

     

    2009년 라이언 달에 의해 고안되었으며, 이벤트 기반 비동기 자바스크립트 런타임이기 때문에 확장성과 성능이 뛰어나며

     

    프론트엔드의 필수 언어인 JS로 서버까지 구성할 수 있다는 장점까지 더해 빠르게 점유율을 높여가고 있다.

     

    내가 지금 이 글을 적고 있는 이유도 회사의 다른 서비스가 Node.js로 개발되었고 개발될 예정이기 때문이다.

     

    굳이 정확하게 분류하자면 강조했듯이 서버사이드 자바스크립트 런타임, 즉 JS 코드를 서버에서 실행하는 환경을 가리키며

     

    Node.js 자체로는 엄밀히 말해 프레임워크가 아니라고 한다.

     

    계속해서 특징과 장단점에 대해 짧게 정리하자.

     

    Features

     

    Asynchronous / Event Driven

     

    Node.js의 가장 큰 특징은 비동기 I/O처리 및 이벤트 주도 모델을 통한 높은 성능이다.

     

    비동기 처리와 이벤트 주도 모델에 의한 고성능은 지겹도록 들어왔지만 어쨌거나 그렇다.

     

    덕분에 확장성이 좋으며, 서버의 자원을 최대한 활용할 수 있다.

     

    Single Thread / Non-Blocking

     

    묘하게도 Node.js는 단일스레드를 사용한다. 또한 이는 제약이 아니라 사양이라고 설명하는데,

     

    복잡한 비동기 I/O 응용 프로그램을 싱글 스레드 JavaScript로 작성하여

     

    실행 속도와 개발 편의성 측면에서 뛰어난 결과물을 내놓는 것이 Node.js의 근간을 이루는 개념이기 때문이라고 한다.

     

    따라서 프로세서의 높은 연산능력을 요구하는 프로그램은 Node.js와 궁합이 좋지 않은데, 이에 대해 라이언 달은

     

    순수하게 연산력이 중요한 요소는 C로 짜서 붙이라는 상식적인(...) 발언을 했다고 한다.

     

    어쨌거나 Node.js는 I/O 작업을 기다리는 동안에도 블로킹되지 않아 다른 요청을 처리할 수 있다.

     

    Scalability

     

    Node.js는 npm(Node Package Manager)이라는 패키지 관리 시스템이 포함되어 있다.

     

    이 npm은 자바의 gradle, 파이썬의 pip와 비슷한 역할을 하며 수많은 개발자가 만든

     

    다양한 패키지(혹은 라이브러리, 모듈)의 설치와 실행을 쉽게 만들어준다.

     

    이를 이용해 코드를 모듈로 구성하면 코드의 재사용성과 유지보수성을 높일 수 있다.

     

    Rapid Depelopment / Ecosystem

     

    프론트엔드에서 사용하는 자바스크립트로 서버 사이드 앱을 개발할 수 있기 때문에 개발 속도는 물론이고

     

    코드와 개발의 일관성, 재사용성을 유지하기가 편하다.

     

    또한 빠르게 점유율을 높이고 있기 때문에 개발자 커뮤니티가 큰 편이며, 다양한 라이브러리와 프레임워크가

     

    존재하고 또 개발되고 있다. 이와 같은 풍부한 리소스와 레퍼런스는 개발의 난이도를 낮춘다.

     

    Pros and Cons

     

    장점에 대해서는 위에 거의 다 정리가 되었으므로 여기서는 목록만 짚고 넘어간다.

     

    • 장점

      • 높은 성능
      • 확장성
      • 빠른 개발
      • 큰 개발자 커뮤니티와 생태계
    • 단점

      • 단일 스레드
      • 콜백 지옥
        비동기 콜백 패턴을 사용하는 경우 콜백 지옥(Callback Hell)이라 불리는 가독성 문제가 발생할 수 있다.
        이를 해결하기 위해 promise, async/await와 같은 도구를 사용해야 하며 구조 설계에 특히 신경 써야 한다.
      • 모듈 다양성
        큰 생태계와 높은 다양성은 종종 선택지와 의존성 문제를 야기한다.
      • 장기 실행 작업 관리
        Node.js는 장기 실행 작업을 위한 내장 도구와 기능이 부족하다. 물론 기본적으로 Garbage Collection 기능이 포함되어 있긴 하지만, 장시간 실행 시 함수의 실행이나 메모리 누수에 대한 추가적인 관리가 필요하다.
    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    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
    글 보관함