노드 시작하기

Doum Kim·2020년 5월 26일
0

Node.js

목록 보기
1/1
post-thumbnail

Node.js 교과서 (길벗)을 참고로 공부하며 정리하는 글입니다.

Node.js 시작하기

서버

노드는 서버 애플리케이션을 실행하는데 있어서 가장 많이 사용된다.

여기서 서버란 ?
간단히 말해 네트워크를 통해 클라이언트에 정보, 서비스를 제공하는 컴퓨터 또는 프로그램을 말한다.
서버가 항상 요청에 응답만 하는 것은 아니다. 서버 역시 다른 서버에 요청을 할 수 있고 그때는 그 서버가 클라이언트 측 역할을 한다.

서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램 또는 장치를 의미한다.
-위키백과

노드는 Js 애플리케이션이 서버로서 기능하기 위한 도구를 제공하여 서버 역할을 수행할 수 있다.

Js 런타임

노드는 Js 런타임이다. 그럼 런타임이 무엇인가? 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻한다.

런타임 환경(영어: runtime environment)은 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다. - 위키백과

노드는 V8 자바스크립트 엔진과 더불어 libuv라는 라이브러리를 사용하며 libuv 라이브러리는 노드의 특성인 이벤트 기반,
논 블로킹 I/O 모델을 구현하고 있다.
이런 특징으로 스스로 가볍고, 효율적이라고 표현하고 있다.

이벤트 기반

이벤트(ex: 클릭, 네트워크 요청 등 ..) 가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.
이벤트 루프 개념 기반으로 동작한다. 여기서 이벤트 루프에 대해서 간단하게 설명하자면 다음과 같다.

  • 이벤트 루프 : 이벤트 발생시 호출 할 콜백 함수들을 관리
  • 태스크 큐 : 이벤트 발생 후 호출되어야할 콜백 함수들이 대기하는 공간
  • 백그라운드 : 콜백 또는 이벤트 리스너가 대기하는 공간

콜스택이 비워지면 이벤트 루프가 태스크 큐에 있는 작업을 콜 스택에 올려준다.
자세한 설명은 저번에 포스팅한 [자바스크립트 비동기 처리] 글을 참조하면 된다.(https://velog.io/@kdo0129/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC)

논 블로킹 I/O

논 블로킹은 이벤트 루프를 활용하여 이전 작업이 완료될 때까지 멈추지 않고 작업을 수행함을 뜻한다.
I/O 작업을 할 때 노드는 논블로킹 방식으로 동작한다.

싱글 스레드

싱글 스레드를 알아보기 전에 스레드와 프로세스를 비교해보자.

  • 프로세스 : 운영체제에서 할당하는 작업의 단위 ex) 노드, 브라우저 등... ,
    프로세스간의 메모리 등의 자원 공유가 불가능하다.

  • 스레드 : 프로세스 내에서 실행되는 흐름의 단위, 스레드들은 부모 프로세스의 자원을 공유한다.
    즉, 같은 메모리 접근이 가능하다.

쉽게 표현을 해보자면 스레드는 컴퓨터 작업을 처리할 수 있는 일꾼이다.
노드는 이러한 일꾼들을 여러명 사용하는 멀티 스레딩과 비슷한 기능을 할 수 있다. 엄밀히 말하면 멀티 프로세싱에 가깝다.
노드 프로세스는 여러개의 스레드를 가지지만 제어가 가능한 스레드가 하나뿐이라 싱글 스레드라 칭한다.

서버로서의 노드

아래의 표를 보면서 서버로서의 노드의 장점과 단점을 살펴보자.

장점단점
멀티 스레드 방식에 비해 컴퓨터 작원을 적게 사용CPU 코어를 하나만 사용한다.
I/O 작업이 많은 서버로 적합하다.CPU 작업이 많은 서버로는 부적합하다.
멀티 스레드보다 상대적으로 접근이 쉽다.싱글 스레드이기 때문에 에러 하나에 전체가 멈추는 상황이 발생한다.
웹 서버가 내장되어 있다.서버 규모가 커졌을 때 서버 관리에 어려움이 있다.
자바스크립트를 사용해 친숙함이 있다.어중간한 성능
JSON 형식과 호환하기 쉽다.

노드는 개수는 많지만 크기가 작은 데이터를 실시간으로 주고 받는 데 매우 적합하다.
네트워크, 데이터 베이스, 디스크 작업 등의 I/O에 특화되어 있기 때문이다.
실시간 채팅 , JSON 데이터를 제공하는 API 서버가 노드를 많이 사용한다.

반대로 이미지, 비디오 처리 등의 CPU를 많이 사용하는 작업을 위한 서버로는 좋지 않다.
요즘에는 AWS Lambda , Google Cloud Functions 등의 서비스에서 작업을 처리하는 것을 지원한다.

0개의 댓글