1. Node.js? 서버 만드는 거 아님?

최상민·2023년 3월 17일
0

Node.js 교과서

목록 보기
1/9

Node.js? express.js?

아무것도 모른 채 처음 웹 개발을 하면서 접했던 것이 express.js였다.

그땐 그냥 서버만드는 뭐 그런 언어인가보다.. 하고 무지성으로 검색해서 코드를 짰었다.

그러다 너무 답답해서 책을 사서 Node.js를 공부하게 되었다.

이 책으로 공부하는데 되게 자세하고 실습코드도 있어서 좋은거같다.

노드 공식 사이트의 노드 설명

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

이 문구를 보고 의문점이 생겼다.

  1. 런타임이 뭐지?
  2. 서버와 관련된 내용이 없네?

바로 구글링에 들어갔다.
(책에 다 있는 내용이었지만 손이 저절로 키보드로..)

런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻한다고 한다.

노드 = 자바스크립트 런타임 = 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있는 환경이다.

그래서 노드는 서버 이외에도 자바스크립트 애플리케이션을 실행할 수 있다.

그런데 왜 노드는 서버 애플리케이션을 실행하는 데 제일 많이 사용할까?

노드의 내부 구조를 보면 C와 C++로 구현된 V8libuv라는 라이브러리를 사용한다.

처음 브라우저 외의 환경에서 자바스크립트를 실행하기 위해 여러 시도를 하였으나, 실행 속도 문제로 인해 큰 호응을 얻지 못했지만 V8 엔진을 사용하여 속도 문제를 해결하고, 크롬을 출시하여 주목받기 시작했다고 한다.

libuv 라이브러리는 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현하고 있다.

이 모델이 무엇인지는 알아보자.

이벤트 기반?

이벤트 기반(event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
ex) 클릭, 네트워크 요청 등

호출 스택, 이벤트 루프, 백그라운드, 태스크 큐 얘네들을 통해서 코드를 관리하고 실행하는 과정을 이벤트 기반이라고 한다.

호출 스택 : 코드의 맨 위부터 한 줄씩 실행하면서 함수 호출 부분을 발견하면 호출한 함수를 넣는곳

이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당

백그라운드 : setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳

태스크 큐 : 이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백함수를 보낸다.

논블로킹 I/O?

I/O는 많이 들어봤을 단어인 입력(Input)/출력(Ouput)을 의미한다.
노드는 입출력 작업을 할 때 논블로킹 방식으로 처리하는데,
논블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다.

위 그림에서 볼 수 있듯이 블로킹 방식보다 논블로킹 방식이 같은 작업을 더 짧은 시간에 처리한다는 것을 알 수 있다.

다시 돌아가서 왜 노드는 서버에서 많이 사용되는지 알아보자.

서버에는 기본적으로 I/O 요청이 많이 발생하므로, 논블로킹 방식을 사용하는 노드를 서버로 사용하면 굉장히 좋다. 하지만 노드는 싱글 스레드이기 때문에 CPU 부하가 큰 작업에는 적합하지 않다. 그래서 실시간 채팅 어플, 주식 차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용한다고 한다.

노드 12 버전 이후부턴 멀티 스레드 작업을 할 수 있지만, 멀티 스레드 프로그래밍은 난이도가 싱글 스레드에 비해 높기 때문에 권장하지 않는다고 한다.

책에서 보기좋게 노드의 장단점을 표로 정리해 놓았다.


첫 블로그 게시물을 적으면서 느꼈는데, 책을 다시 읽어보면서 놓쳤던 부분들을 다시 볼 수 있고, 복습이되서 좋은거 같다. 앞으로 공부하는 모든 것을 포스팅하는 것을 목표로 하고, 공부하고 배운 것으로 개인 프로젝트 진행하며 진행 상태, 과정, 개선해야할 것 등 포스팅하고 완성하고 성장하는 것이 목표이다. 아자아자 ㅎㅇㅌ. 피드백 받습니다.

profile
기록으로 복습하자

0개의 댓글

관련 채용 정보