[Node.js] Node.js 시작하기

노드를 시작한 이유


도커와 쿠버네티스를 공부하게 되면서 서버에 대한 관심이 커졌다. 쿠버네티스를 시작하고 클러스터를 구성했을 때 예제 파드를 돌려보면서 내가 직접 서버에서 운용되는 프로그램을 코딩하고 디자인할 수는 없을까 해서 Node.js(노드제이에스)를 시작하게 되었다.

Node.js logo.svg노드(노드제이에스를 노드로 줄여 부른다)는 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구이다. 서버를 만드는 개발 도구는 많은데 왜 하필 노드를 사용할까.

노드는 2009년 라이언 달이 만들었다. 그 당시에는 웹 서버에 파일을 업로드할 때, 업로드가 완료되기 전까지 웹 서버에서 데이터를 조회하는 등의 작업을 할 수 없었다. 이 문제를 해결하기 위해 새로운 방식의 서버 개발 도구를 만들기 시작했는데 이것이 노드이다.

개발환경을 구축하기 전에 노드의 큰 특징 3가지를 알아보자.

비동기 입출력 방식

하나의 요청 처리가 끝날 때까지 기다리지 않고 다른 요청을 동시에 처리할 수 있는 비동기 입출력(Non-Blocking IO) 방식을 적용했다. 반대되는 개념인 동기 입출력은 프로그램에서 파일 시스템에 파일 읽기를 요청할 때 그동안 프로그램은 다른 작업을 진행하지 않고 대기하게 된다. 프로그램이 파일의 내용을 읽어와 그 내용을 화면에 보여준 다음에야 다른 작업을 진행할 수 있다. 결국 속도가 느려지게 된다.


비동기 방식은 이 문제를 해결했다. 프로그램에서 해당 파이르이 내용을 처리할 수 있는 시점이 되면 콜백 함수(Callback Function)이 호출된다. 따라서 파일 읽기 작업이 끝날 때까지 대기하지 않아도 파일을 다 읽은 시점에 통보를 받고 파일의 내용을 화면에 보여주는 작업을 진행할 수 있다.

이벤트 기반 입출력 방식

자바스크립트는 코드를 한 줄씩 해석하면서 실행하는 인터프리터 방식을 사용해서 속도가 느려 문제가 되곤 했다. 이런 문제는 크롬 V8 자바스크립트 엔진이 나오면서 해결되었다. V8 엔진은 자바스크립트 코드를 네이티브 코드로 바꾼 후 실행할 수 있는데, 노드는 이 V8엔진을 이용해 자바스크립트 코드를 빠르게 실행할 수 있다.

노드 아키텍처 이미지 검색결과

노드로 프로그램을 만들어 실행하면 크롬 V8엔진 위에서 실행된다. V8 엔진에는 필요한 기능을 병렬로 실행하는 스레드 풀, 이벤트 루프 등의 기본 기능이 있다. 그 위에 네트워킹 기능을 담당하는 소켓(Socket), http 라이브러리 등이 있다.  그 위에는 표준 라이브러리가 구현되어 있다. 개발자들이 만든 노드 프로그램은 그 라이브러리 위에서 동작하게 된다.

노드 프로그램이 동작하는 아키텍처에서 가장 중요한 부분중의 하나가 이벤트를 받아 처리하는 기능이다. 노드는 서버에서 운용하는 프로그램을 만드는 것이 주 임무이기 때문에 소켓, HTTP 프로토콜을 사용해서 데이터를 송수신하는 기능을 포함하고 있다.

모듈, 패키지

소스 파일 하나에 실행하려는 기능이 모두 들어있다면 코드의 양이 많고 복잡해진다. 따라서 확장자가 js (자바스크립트 파일)인 별도의 파일로 코드를 분리해서 관리하고 필요할 때 불러서 사용한다. 노드는 CommonJS 표준 스펙을 따른다.

노드 모듈 방식 이미지 검색결과

먼저 메인이 되는 자바스크립트 파일의 일부를 떼어 별도의 파일로 만드는데 이것이 모듈(Module)이다. 코드의 일부를 떼어 module1.js라는 파일로 저장한다면 이것이 모듈이다. 이 파일의 코드를 사용하고 싶다면 require() 함수로 모듈을 호출하면 된다. 이렇게 불러들인 파일은 자바스크립트 객체로 인식되고, 그 객체를 참조하여 파일에 넣어 둔 기능을 사용할 수 있다.

이렇게 여러 프로그램에서 공통적으로 사용하는 기능을 모듈로 분리하고, 여러개의 모듈을 합쳐서 패키지(Package)로 만들어 두면 다른 프로그래머들도 npm 프로그램으로 손쉽게 패키지를 설치, 사용할 수 있다.



Node.js 개발환경 만들기

자바스크립트 기반의 노드는 자바스크립트 개발 도구라면 아무거나 사용해도 된다. 이클립스, 에디트플러스, 브라켓이 있는데 웹 개발에 많이 이용하는 브라켓을 설치해보자. 브라켓은 어도비사에서 만든 오픈소스 텍스트 편집기이다.

http://brackets.io 에서 브라켓 최신 버전을 설치하자.

브라켓 설치를 완료했다면 크롬 브라우저가 없다면 설치하자. 브라켓 개발 도구에서 미리보기 기능을 사용하기 위함이다.

브라켓을 실행하면 왼쪽에 파일 목록, 중앙에는 html 문서가 있다. 개발자들이 보통 어두운 바탕을 선호하므로 테마부터 바꿔보자.


상단 메뉴에서 [보기 - 테마] 메뉴를 누르고 현재 테마를 Brackets Dark로 변경하면 된다. 글자 크기도 변경할 수 있다.

브라켓에서 특정 폴더를 열면 그 폴더가 프로젝트 폴더가 된다. 폴더(프로젝트)를 만든 후  자바스크립트 파일 (test.js)를 만들어보자.

test.js
console.log('Hello Zini');
cs

1. 'console' was used before it was defined.
2. ERROR: Unexpected console statement.[no-console]
3. ERROR: 'console' is not defined.[no-undef]

test.js 파일을 저장(Ctrl+S)하면 위 세개와 같은 오류가 뜰 것이다. 넘어가도 되지만 거슬린다. 구글링해보니 브라켓에서 너무 엄격한 구문 오류 검사를 하기 때문에 불필요한 오류까지 출력하는 것이라고 한다. 따라서 오류 검사가 좀 더 가벼운 JSHint로 전환하자.

상단 메뉴에서 [디버그 - 환경 설정 파일 열기]를 누르면 brackets.json 파일이 열릴 것이다. 괄호 안에서 마지막에 콤마(,)를 꼭 붙이고 다음 내용을 추가하자.

"language":{
 "javascript":{
 "linting.prefer": ["JSHint"],
 "linting.usePreferredOnly":true
 }
}
cs

추가하고 brackets.json 파일을 저장하고 브라켓을 재실행하자. 이제 test.js를 저장해도 오류가 표시되지 않는다.

웹 문서 미리보기

브라켓의 웹 문서는 크롬 브라우저를 연결하여 실시간으로 미리보기가 가능하다. test.html파일을 만들고 저장한다. 화면 오른쪽에 세로 방향으로 배치된 아이콘 중에서 번개 모양 아이콘을 클릭하면 실시간 미리보기 기능을 실행할 수 있다.


노드 설치하기

https://nodejs.org/en 에 접속하여 Current 버전을 설치한다. (LTS 버전은 서버 환경을 지원하는 버전이라서 안정적이지만 최신 기능을 사용할 때는 Current 버전을 설치하는 게 낫다)

이제 cmd를 켜서 node -v 명령을 입력하면 노드 버전이 출력되고, npm -v 명령으로 npm 버전이 출력된다.

노드 개발 환경이 만들어졌다. 다음 글부터는 노드 프로젝트를 만들어 보면서 본격적인 노드 프로그래밍을 시작해 보겠다.

댓글 없음:

Powered by Blogger.