What is the Nodejs?
백 엔드 개발자를 꿈꾸는 취준생이라면 한번쯤 들어봤을 nodejs.
이를 증명하기라도 하듯 채용공고 사이트에 접속하여 검색창에 "nodejs 개발자" 라고 입력하면 nodejs 개발과 관련된 수 많은 채용정보를 접할 수 있다.
(채용 공고 사이트 원티드에 nodejs를 검색하면 나오는 화면)
나 또한 Java와 Javascript, Python과 같은 언어 툴에 대해서는 어느정도 알고 있었지만 자주 들어본 nodejs에 대해서는 정작 문외한이었기에 Nodejs에 대해 공부해보고 싶은 마음이 들었다.
인프런 강의 매니아(?)인 나에게 nodejs에 관해 학습할 수 있는 좋은 무료강의가 있었기에 학습하면서 정리한 내용을 바탕으로 블로그 포스팅을 진행했다.
강의는 '생활코딩'으로 유명하신 egoing님의 강의로 "[nodejs 강좌] Node.js 를 이용해 웹애플리케이션 만들기" 강의를 바탕으로 학습하였다. 이 강의는 기초 배경지식부터 실습 웹 애플리케이션 만들기까지 일련의 단계적인 학습을 통해 입문자도 Nodejs에 더욱 친숙하게 다가갈 수 있게 구성되어 있어서 좋았다. 열심히 강의를 듣고 nodejs 완전 정복을 할 수 있도록 공부하고 또 공부할 것이다.
서두가 길었다. 그렇다면 nodejs는 대체 뭘까?
Nodejs를 알기 위해서는 먼저 Javascript에 대해서 알고 있어야한다. 1995년, 넷스케이프 회사 직원이었던 Brendan Eich에 의해 자바스크립트가 탄생한 이래로 웹은 기존 정적인 체계에서 벗어나 동적이고 프로그래밍적인 요소들을 갖추게 된다. 즉, html 기반 위에서 사용자와 데이터를 주고 받는 상호작용 등 복합적인 제어를 할 수 있게 됨으로써 웹은 하나의 application 수준으로 발전하게 되었다.
자바스크립트는 원래는 web 수준 안에서만 동작할 수 있었다. 그러나 예전에는 web의 중요성이 부각되지 않았기 때문에 자바스크립트 또한 홀대받게 되었다.
그러다 2004년 Google사는 GMAIL 서비스를 런칭하게 되었는데, GMAIL은 HTML
, CSS
, Javascript
와 같이 순수 웹 기술로만 만들어진 서비스임에도 불구하고 기능적인 측면에서 확장성과 활용도가 높았기 때문에 이를 처음 알게된 전세계 개발자들은 javascript에 대해서 재조명하게 된다. 이 뿐만이 아니라 뒤이어 개발된 Google Map 또한, 같은 이유로 개발자들에게 새로운 패러다임을 제시하게 되었다. (역시 God google)
여튼, 이제 개발자들은 순수한 웹 기술로 만들어졌을 때의 장점. 즉, 자바스크립트를 사용했을때의 이점을 주목하게 되었다. 만들기만 하면 어떤 플랫폼에서도 동작할 수 있다는 것이 그것이었고, 이를 진작에 파악하고 있던 Google사는 2008년 chrome이라는 웹 브라우저를 개발하면서 브라우저 성능을 높이기 위해 자바스크립트 엔진(V8) 을 자체 개발하게 되었고 이를 오픈소스로 공개하게 되면서 전세계가 이를 사용하여 웹을 개발하게 되었다.
그러면서 Javascript는 web이 아닌 곳에서도 활용될 수 있는 무궁무진한 잠재성을 가진 언어로 탈바꿈하게 되고 이는 오늘날까지 이어지고 있다.
그리고 마침내 2009년 Ryan Dahl에 의해 V8 엔진으로 빌드된 event-driven 개발 방식, non-blocking IO 입출력 방식을 탑재한 Node.js가 탄생하였다. 이로 인해 자바 스크립트가 웹 뿐만 아니라 서버 쪽으로 확장하여 동작하게 되는 계기가 마련되었다.
Nodejs는 하나의 컴퓨터 언어가 아닌 런타임 기술이다. 런타임이란 프로그램을 실행하는 환경을 말한다. 이로 인해 자바스크립트를 브라우저 외의 다른 환경에서도 사용할 수 있게 된다.
쉬운 이해를 위해 강의에서 비유적 표현이 등장했는데 자바 스크립트 언어를 사용한다는 것은 마치 우리가 '한국어를 사용한다' 라는 것과 같은 의미를 가진다. 그리고 이 한국어를 통해 병원, 법원, 학교 등 어딘가에서 언어를 통해 그에 알맞은 일들을 수행할 수 있게 된다.
즉, 자바 스크립트(한국어)를 통해 웹을 제어하거나(병원), 서버의 nodejs를 통해 서버에서 동작하는 웹 어플리케이션(법원)을 만들 수도 있다는 것이다.
Javascipt를 사용하는 법을 알면 Web brower와 Nodejs를 제어할 수 있게 된다. 하지만 이를 반대로 생각해서 Js를 알고 있다고 하더라도 web과 nodejs에 각각 어떠한 기능을 가지고 있는지를 모른다면 이러한 런타임들을 컨트롤할 수 없음을 의미한다. 결국 nodejs와 web은 서로 다른 영역에서 동작하지만 서로 협력관계에 있다. 이들을 조합해서 웹 어플리케이션을 만들어낼 수 있기 때문이다. 그렇다면 Nodejs를 사용할 때의 이점은 무엇일까?