지난번 sitepoint.comIntroduction to Node.js Streams(http://sitepoint.com/introduction-to-streams/)번역 했었다. Node.js의 stream에 대해서 살펴보다 번역을 하게된 것인데, 자세히 보니 Node.js 카테고리에 8개의 article이 더 있었다. article 별로 내용이 그리 길지 않은 것 같아서 시간이 되는대로 처음부터 하나씩 번역을 해보기로 했다.

원문 sitepoint.comAn Introduction to Node.js(http://sitepoint.com/an-introduction-to-node-js/)

오역 주의 오역을 발견하시면 꼭 알려주세요~ :-)

An Introduction to Node.js

JavaScript는 오랬동안 클라이언트측 웹 개발을 위한 사실상 표준이었다. 대부분의 클라이언트 코드가 JavaScript로 작성되는 반면 서버측 개발은 PHP, Java 그리고 여러가지 다른 기술들과의 매시업으로 이루어진다. 만약 하나의 언어가 어디서나 사용된다면 웹 개발자의 인생은 훨씬 편해질 것이다. 브라우저에서는 JavaScript가 지배적이기 때문에 서버에서 사용하는 것도 그럴 듯해 보인다.

서버측 JavaScript라는 발상은 새로운 것은 아니다. 처음에는 1994년에 Netscape에서 JavaScript를 서버 영역에 소개했다. 그 이후 JavaScript를 서버측 언어로 대중화 시키기 위한 몇몇의 프로젝트가 시도됐지만 실패하고 말았다. 실제 서버 영역에서 기반을 확보하기에는 성능상의 문제로 JavaScript의 사용을 금기시했다.

지난 수년간 JavaScript는 성능이 크게 향상되었다. 브라우저와의 연관성으로 인해 구글과 같은 대형 벤더에서 JavaScript를 가능한 빠르게 만들기 위해 많은 시간과 비용을 투자했다. Joyent의 Ryan Dahl(라이언 달)은 2009년에 Node.js 프레임워크를 만들 당시 서버상에서도 훌륭하게 사용될만한 성능을 새롭게 찾아 모든 것을 집약시켰다. 그는 구글의 V8 JavaScript 엔진을 기반으로 Node.js를 만들었다. V8은 구글 크롬에게 아주 훌륭한 JavaScript 성능을 가져다 주어 지구상에서 가장 대중적인 브라우저로 만들어 준 바로 그 엔진이다.

The Node.js Execution Model

아파치와 같은 많은 서버들은 여러 동시 접속을 처리하기 위해 스레드 풀을 유지 관리한다. 새로운 연결이 설정될 때는 그것을 처리하기 위해 별도의 스레드에게 위임한다. 어떤 요청이 처리되어 서비스되면 그 스레드는 향후 다른 요청에 재사용하기 위해 스레드 풀로 다시 반환된다. 이러한 방법의 문제점은 확장성이 부족하다는 것이다. 예를 들면, 많은 웹 애플리케이션들이 연결이 끊기지 않고 무한정 접속되어 있는 AJAX 연결을 만들어서 사용 가능한 모든 스레드들을 소비하게 된다.

Node.js는 요청을 처리하기 위해 완전히 다른 방법으로 접근하고 있다. Node.js 실행 모델은 이벤트 중심(event-driven)이고 확장성을 극대화하기 위해 비동기(asynchronous) 프로그래밍을 강조하고 있다. 또한, 싱글스레드(single-threaded)라는 가장 큰 약점을 감추기 위해 넌블러킹(non-blocking) I/O를 활용한다. 개발자들은 “하나의 블러킹 I/O를 호출하는 것이 잠재적으로 전체 서버를 멈추게 할 수 있다”는 제한사항을 항상 알고 있어야 한다. Node.js 환경에서는 많은 함수들이 콜백 함수(I/O 이벤트가 완료되면 실행되는 함수)를 사용한다. 일부 개발자들의 경우 처음에는 이런 코딩 스타일을 어색해 하지만 사실은 웹페이지상에서 이벤트를 처리하는 것과 다를게 없다.

Getting Started with Node.js

Node.js를 사용하는 것은 무료이며, 프로젝트 홈페이지(공식 웹사이트)에서 다운로드할 수 있다. Windows, Mac, Linux 그리고 SunOS를 위한 바이너리 버전과 소스 코드 모두 사용 가능하다. 다운로드하고 설치하면 바로 Node.js 애플리케이션 개발을 시작할 수 있다.

아래에 보이는 것은 “Hello World”를 출력하는 가장 간단한 Node.js 프로그램이다. 이 예제는 터미널 창에 메시지를 보여주기 위해 내장 객체인 console 객체를 사용한다. “hello.js”라는 새로운 파일을 만들고 아래의 코드를 복사해 보자.

console.log("Hello World!");

이 예제를 실행시키려면 터미널 창에 다음의 명령어를 실행한다.

$ node hello.js

Node.js가 제대로 구성되어 있다면 터미널 창에 “Hello World!”가 출력될 것이다. 다들 알겠지만 이 예제는 Node.js가 할 수 있는 것들 중 극히 일부일 뿐이다. 다음주에는 Node.js에 대해서 더 자세히 살펴볼 것이다.


About Author

Juhoi Kim
blog: http://juhoi.github.io
twitter: @ByJuhoi
github: juhoi

모든 것은 나의 선택에 달려있다.