Medium - The definitive Node.js handbook

원문 - Flavio Copes

Trend 파악을 Medium 기고문 요약 포스팅 - Node.js 핸드북 완전판;

Image credits: Unsplash

Introduction to Node.js

이 핸드북은 서버쪽에서 자바스크립트를 사용하는 환경인 Node.js 시작 가이드입니다.

Overview

Node.js는 서버에서 실행되는 런타임 자바스크립트 환경입니다. Node.js는 오픈소스이고 크로스 플랫폼이며 2009년에 발표된 이래로 큰 인기를 얻었고 이제는 웹 개발의 흐름에서 매우 중요한 역할을 맡고 있습니다. 깃헙의 별이 인기의 척도라면 5만8천개 이상의 별을 가지고 있으니 매우 인기가 많은 것이죠.

Node.js는 브라우저의 외부에서 구글 크롬의 핵심인 V8 자바스크립트 엔진을 실행합니다. Node.js는 크롬 자바스크립트를 빠르게 만든 엔지니어들의 작업의 결과물로 V8 엔진의 엄청난 성능과 JIT 컴파일의 장점이 있습니다. 이 때문에 Node.js에서 실행되는 자바스크립트 코드는 매우 뛰어나게 됩니다.

Node.js 앱은 매 리퀘스트 마다 새로운 쓰레드를 만들지 않고 단일 프로세스로 실행됩니다. 노드는 내부의 표준 라이브러리 내에 비동기 I/O 기본형 집합을 제공하여 자바스크립트가 블록킹 되는 것을 막고 일반적으로 Node.js 라이브러리에 코드들은 논블로킹 패러다임으로 작성되어 블로킹 동작이 예외인 경우에 해당됩니다.

Node.js로 네트워크에서 읽어들이거나 파일시스템, 데이터베이스 접근과 같이 I/O작업이 필요할 때 쓰레드를 블록하는 대신 응답이 올때 다시 작업을 재개하는 방식으로 수행됩니다. 이 때문에 CPU 사이클의 낭비를 막죠.

이 때문에 Node.js는 단일 서버로서 수천개의 동시연결을 처리할 수 있으며 많은 주요 버그의 원인이 되는 멀티쓰레드를 관리할 필요가 없습니다.

Node.js는 자바스크립트로 작성되기 때문에 프론트엔드 개발자들이 완전히 다른 언어를 배워야 될 필요 없이 서버쪽의 코드를 실행할 수 있다는 특별한 장점이 있습니다.

Node.js에서 ECMAScript 표준은 문제없이 사용될 수 있으며 모든 사용자들이 그들의 브라우저를 업데이트하길 기다릴 필요가 없습니다. 여러분의 Node.js 버전을 바꿈으로써 ES 버전을 결정할 수 있으며 Node를 플래그와 함께 사용해서 특정 실험 피쳐들을 사용할 수 있습니다.

It has a huge number of libraries

간단한 구조말고도 노드 패키지 매니저(npm)은 Node.js 생태계를 키우는데 한몫했습니다. 이제 npm 등록 호스트에 거의 50만개의 오픈 소스 패키지를 무료로 사용할 수 있습니다.

A sample Node.js application

Node.js의 가장 일반적인 헬로월드 예제는 웹서버 입니다.

const http = require('http')
const hostname = '127.0.0.1'
const port = 3000
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('Hello World\n')
})
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`)
})

이 코드를 실행하려면 server.js로 저장하시고 터미널에서 node server.js를 타이핑 하세요 코드의 첫부분은 Node.js에 http 모듈을 포함하는 것입니다.

Node.js는 네트워킹에 대한 최고의 지원을 포함하여 멋진 표준 라이브러리가 있습니다.

createServer() 메소드는 새로운 HTTP 서버를 만들어 리턴합니다.

서버는 특정 포트와 hostname을 기다리도록 설정됩니다. 서버가 준비되면 콜백 함수가 호출되며 우리에게 서버가 동작 중이라고 알려주게 됩니다.

새로운 리퀘스트를 받을 때 마다 request 이벤트가 호출되고 두 개의 오브젝트를 전달합니다. request와 response 오브젝트 입니다.

이 두가지 객체는 HTTP 호출을 처리하기 위한 필수적인 요소입니다.

처음 객체는 요청의 자세한 정보를 제공합니다. 이 간단한 예제에서는 사용하지 않지만 리퀘스트 헤더와 데이터에 접근할 수 있습니다. 두번째는 콜러에게 데이터를 반환하기 위해 사용됩니다.

이 예제에서는 다음과 같이 쓰였습니다.

res.statusCode = 200

우리는 statusCode 프로퍼티를 200으로 설정했고 성공적인 응답을 암시합니다. Content-Type헤더는 다음과 같이 설정했습니다.

res.setHeader('Content-Type', 'text/plain')

그리고 응답을 종료하면서 end()에 컨텐츠를 매개변수로 추가합니다.

res.end('Hello World\n')

Summary

  • Node.js의 간략한 역사와 헬로 월드 예제
  • Node.js는 많은 라이브러리와 매우 방대한 커뮤니티, 그리고 단일 서버로 다중의 커넥션을 동시에 처리할 수 있기 때문에 멀티 쓰레드 관리에 신경쓰지 않아도 된다. -> 버그가 많이 발생하는 부분이 줄었다
  • I/O 작업과 같이 기존에 블로킹이 필요했던 부분을 논블로킹으로 처리하며 해당 작업이 끝난 경우 다시 시작된다.

© 2019. All rights reserved.

Powered by Hydejack v8.1.1