Node.js 환경 구성 - Part.0 Node.js 개념

arovil·2024년 1월 12일
0

Node.js 환경 구성

목록 보기
1/6
post-thumbnail

※ 다크모드로 읽으시는 것을 추천드립니다.

Node.js란?

Node.js는 Chrome V8 Javascript 엔진으로 빌드 된 자바스크립트 런타임입니다.

즉, Node.js를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있습니다.

  • Node.js는 자바스크립트를 서버에서도 사용할 수 있도록 만든 프로그램입니다.
  • Node.js는 V8이라는 Javascript 엔진 위에서 작동하는 자바스크립트 런타임입니다.
  • Node.js는 웹 서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌습니다.

사용되는 언어는 자바스크립트이며, Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있는 것이 특징입니다.

또한, 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등 별도 소프트웨어 없이 작동이 가능합니다.

Node.js 특징

  • Node.js는 싱글 스레드의 Non-blocking I/O 이벤트 기반 비동기 방식으로 작동합니다.
  • 애플리케이션 자체에서는 단일 (싱글) 스레드로 실행되지만 Background에서 스레드 풀을 구성해서 작업을 수행합니다.

Node.js 장점

  • 이벤트 기반 비동기 방식이므로 비교적 서버에 무리가 적습니다.
  • NPM (Node Package Manager)을 통한 다양한 모듈 (패키지)가 제공됩니다.
    NPM을 이용해 필요한 라이브러리와 패키지를 설치할 수 있기 때문에 효율성이 좋습니다.
  • 구글에서 개발하는 Javascript 엔진을 사용합니다.
    구글은 V8 엔진의 성능을 지속적으로 업그레이드하고 있습니다.
  • C++로 개발된 V8 Javascript 엔진이기 때문에 확장성이 좋습니다.

Node.js 단점

  • 이벤트 기반 비동기 방식이라서 서버단 로직이 복잡할 경우 콜백함수의 늪에 빠질 수 있습니다.
    예를 들어, 요청 한 번에 대해 DB를 조회하고 그 결과 값에 따라 다른 로직을 처리해야 하는 로직이 다수일 경우 콜백함수 늪 (Callback Hell)에 빠질 수 있습니다.
  • 단일 스레드이기 때문에 하나의 작업 자체가 많이 걸리는 웹 서비스에는 어울리지 않으며, 게시판 형태와 같이 가벼운 I/O가 많은 웹 서비스에 어울립니다.
  • 코드가 실행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 종료되기 때문에 테스트가 중요합니다.
    반드시 모든 케이스에 대해 소스코드를 검증해야 합니다.

Callback Hell (콜백 지옥)

  • 비동기 프로그래밍 시 발생하는 문제로, 함수의 매개 변수가 넘겨지는 콜백 함수가 반복되어 코드의 들여쓰기 수준이 감당하기 힘들 정도로 깊어지는 현상을 말합니다.
# Callback Hell 예시
step1(function (value1) {
    step2(function (value2) {
        step3(function (value3) {
            step4(function (value4) {
                step5(function (value5) {
                    step6(function (value6) {
                        // Do something with value6
                    });
                });
            });
        });
    });
});
  • step1에서 어떤 처리 이후 그 결과 값을 인자로 전달된 익명 함수의 매개 변수로 넘겨줍니다.
    그 후 step2에서 또 어떠한 처리를 하고 다음 익명 함수가 실행됩니다.
    이렇게 반복되다 보면 코드가 피라미드 모양으로 작성됩니다.
  • 주로 이벤트 처리나 서버 통신과 같은 비동기적인 작업을 수행하기 위해 이런 형태가 자주 등장하며, 이와 같은 코드는 가독성이 떨어지고 수정하기 어려워집니다.

Node.js가 어울리는 웹 서비스

  • 간단한 로직
  • 대용량 (동시에 여러 요청을 처리)
  • 빠른 응답 시간 요구
  • 빠른 개발 요구
  • 비동기 방식에 어울리는 서비스 (네트워크 스트리밍 서비스, 채팅 서비스 등)

Node.js가 어울리지 않는 웹 서비스

  • 단일 처리가 오래 걸리는 경우
    • 싱글 스레드이기 때문
  • 서버 체크 로직이 많은 경우
    • 비동기 방식이기 때문에 Callback Hell에 빠지지 않기 위해
  • 업무 복잡도/난이도가 높은 경우
    • 에러가 나면 서버가 종료되기 때문에 코드 품질이 중요

Reference

https://hanamon.kr/nodejs-개념-이해하기/

https://seoyeonkk.tistory.com/entry/Nodejs-의-특징-및-장단점

https://velog.io/@seul06/JavaScript-콜백-지옥

profile
개발 중에 알게된 내용을 공유합니다 (나도 기억할겸)

0개의 댓글