[NODE 강의] Node.js 란?

2021. 2. 16. 01:10Dev/Node

반응형

Node.js 라는 것을 들어본지는 벌써 몇 년 전이다.

하지만 Node.js에 대해 공부해본 적이 없었기 때문에 막연하게나마 '자바스크립트로 데이터베이스에 접근해서 서버쪽 로직을 짤 수 있다' 정도로만 알고 있었다.

이제 Node.js에 대해 공부하기로 했으니, Node.js가 대체 무엇인지 알아볼 필요가 생겼다.

 

node.js 공식 사이트(nodejs.org/ko/)에 가보면,

'Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.'라고 정의가 돼 있다.

이게 대체 무슨 말인지 이해가 되지 않았다.

 

Node.js에 대한 오해

다른 개발자들과 대화하다가 '너가 지금 개발하는 서비스는 서버가 뭐야?' 라는 물음에 '노드제이에스요.' 라는 답변을 들어서, 나는 처음에는 Node.js가 아파치 같은 웹서버 중의 하나인 줄 알았다. Node.js라는 것을 실행해서 웹서버를 올리고, 그 웹서버에다가 자바스크립트로 데이터베이스에 바로 접근해서 데이터를 조회할 수 있도록 코딩이 된 소스코드 파일을 업로드해서 서비스를 실행하는 웹서버로 이해해왔던 것이다.

 

Node.js는 웹서버가 아니다. 

웹애플리케이션을 개발하면, 자바스크립트를 사용하게 되는데 자바스크립트는 애초에 HTML 파일의 동적인 조작을 위해서 탄생했다.

HTML파일은 브라우저에서 실행이 되고, 자바스크립트도 각 웹브라우저들에 탑재된 내장 엔진을 이용하여 해석하고 실행한다.

따라서, 자바스크립트를 사용하거나 작동하기 위해서는 웹브라우저가 반드시 필요했다.

 

웹브라우저 자바스크립트 엔진
Internet Explorer Chakra
FireFox Spider monkey
Safari Squirrel Fish
Chrome V8
Opera Karakan

크롬의 자바스크립트 엔진인 'V8'은 크롬이 설치될 때 같이 설치되는데, 성능이 워낙 뛰어나서 별도로 출시하게 된다. 

이 V8에 좀 더 많은 기능이 합쳐진 것이 Node.js이다. 따라서, Node.js는 크롬의 자바스크립트 엔진인 V8로 이루어져 있다.

이 Node.js를 출시한 이유가 2008년 9월 구글에서 크롬 웹브라우저를 발표하고, 2009년에 '라이언 달(Ryan Dahl)이라는 개발자가 대규모 애플리케이션을 개발하고자 Node.js를 처음 개발했으며, 현재 지속적인 버전 업데이트가 이루어지고 있다.

 

그래서, 

Node.js는 Chrome의 V8엔진을 이용하여 웹브라우저가 아닌 다른 환경에서 javascript를 실행할 수 있도록 도와주는 런타임 환경이라고 이해하면 될 것 같다.

Node.js를 설치하면 웹브라우저가 아닌 터미널 환경의 명령 프롬프트 창 같은 곳에서도 'console.log()' 같은 자바스크립트를 사용할 수 있게 된다.

 

따라서,

Node.js를 설치한다고 해서 웹서버가 실행되는 것은 아니고, Node.js에 포함된 라이브러리 및 http모듈을 이용하여 서버를 생성해야 한다. (Node.js는 자체적으로 내장된 HTTP서버를 이용한다.)

그렇기 때문에, '너가 지금 개발하는 서비스는 서버가 뭐야?' 라는 물음에 '노드제이에스요.'라고 답변하기 보다,

'노드제이에스를 이용하여 HTTP 서버를 생성했고, 노드제이에스를 이용하여 백엔드 로직이 구현돼 있습니다.' 라고 답변하는 것이 좀 더 이해하기 쉬울 것 같다.  

 

Node.js의 주요 특징

1. 자바스크립트 언어 사용

- 자바스크립트를 사용할 줄 아는 개발자들에게는 러닝커브가 낮다. 또한, 자바스크립트로 백엔드 로직까지 개발할 수 있다는 엄청난 장점으로 점유율이 높아지고 있다. 

2. 빠른 속도

- 구글에서 개발한 자바스크립트 엔진을 사용하기 때문에 빠른 속도를 자랑한다.

3. 이벤트 기반 비동기 방식 (Non-Blocking) 

- Node.js에서는 모든 API가 비동기 방식이므로, 호출 후 응답을 기다지리 않고 다른 API를 호출한다. 이전에 호출했던 API의 응답이 오면 이벤트 루프가 확인하여 처리한다.

4. 단일 쓰레드

- 복잡한 비동기 I/O 응용 프로그램을 싱글 스레드 JavaScript로 작성하여 결과물의 실행 속도와 개발 편의성 측면에서 좋다는 것이 Node.js의 근간을 이루는 개념이며, CPU의 높은 연산력을 요구하는 프로그램을 Node.js로 짜면 영 좋지 않은 성능이 나온다. (나무위키 발췌)

 

Node.js가 어울리는 애플리케이션

- SPA 구조의 웹애플리케이션

- 데이터 스트리밍 서비스

- 입출력이 잦은 서비스

 

Node.js는 프레임워크가 아니다.

강의를 들으면서 Node.js에 대해 이것저것 검색해본 결과, 나무위키에 Node.js가 프레임워크냐라는 질문에 대한 설명을 보았다. 결과만 놓고 얘기하자면 Node.js는 프레임워크가 아니다. Node.js에 대해 공부를 시작하는 사람들은 나무위키를 한 번 정독하는 것이 좋을 것 같다.

namu.wiki/w/Node.js?from=Nodejs#s-3.1

 

Node.js - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

반응형