원문 링크 - http://www.catonmat.net/blog/nodejs-modules-express/

본 문서는 저자의 허락을 얻어 해당 포스팅을 번역한 것입니다.

1회 연재 - dnode (RPC 라이브러리)

2회 연재 - optimist (옵션 파서)

3회 연재 - lazy (lazy 리스트 처리)

4회 연재 - request (HTTP 스트림 처리)

5회 연재 - hashish (해시 처리)

6회 연재 - read (쉬운 표준 입력 처리)

7회 연재 - ntwitter (트위터 API)

8회 연재 - socket.io (웹소켓 통신)

9회 연재 - redis (redis 클라이언트 라이브러리)

오늘 소개할 모듈은 express다. 이것은 connect 모듈 기반 위에서 작성된 서버 사이드 웹 개발 프레임워크로 굉장히 작고 빠르다. express는 TJ Holowaychuk에 의해 작성됐다 TJ는 지금까지 85개의 node.js 모듈을 작성했고, 그가 작성한 많은 모듈들이 이 연재에서 다뤄질 것이다.

다음을 살펴보자.

var express = require('express');

var app = express.createServer();

app.get('/', function(req, res){
    res.send('Hello World');
});

app.listen(3000);

위 코드는 3000번 포트를 수신 대기하는 웹 서버를 생성하고, / 경로로 http 요청이 왔을 때 Hello World 문자열을 http 응답으로 처리하는 예제이다.

express는 매우 강력한 라우팅 시스템을 가지고 있다. 다음을 보자.

app.get('/user/:id', function(req, res){
    res.send('user ' + req.params.id);
});

위 코드는 /user/foo 같은 형식의 경로로 요청이 들어왔을 때 실행되며, 자동으로 req.params.idfoo 값이 설정된다. 여러분은 라우팅을 처리하기 위해 정규표현식을 사용할 수도 있다.

POST 요청을 처리하려면, bodyParser 미들웨어를 사용해야 한다. 이를 위해서는  app.use(express.bodyParser()) 을 코드에 삽입하면 된다. BodyParser는 기본적으로 application/x-www-form-urlencoded과  application/json 타입을 가진 HTTP 요청의 body를 파싱해서 req.body에 저장한다. 다음 예를 보면,

app.use(express.bodyParser());

app.get('/', function(req, res){
    console.log(req.body.foo);
    res.send('ok');
});

위 코드는 body에 포함된 변수를 콘솔에 출력하고, ok를 응답으로 보낸다

express는 다음과 같이 여러가지 미들웨어들을 사용할 수 있다.

app.use(express.logger(...));
app.use(express.cookieParser(...));
app.use(express.session(...));
app.use(express.static(...));
app.use(express.errorHandler(...));

logger 미들웨어는 수신된 HTTP 요청들의 로그를 다루고, cookieParser는 쿠키를 처리한다. session은 HTTP 세션을, static은 이미지나 css, 스크립트 같은 정적 컨텐츠를 처리하고, errorHandler는 예외 및 에러를 처리한다.

미들웨어에 대해서 더 많은 것을 공부하려면 express documentation 사이트를 방문해라.

express는 또한 다양한 템플릿 엔진과도 결합할 수 있다. 예를 들어 내가 선호하는 jade 템플릿 엔진(이것 또한 TJ가 개발했다.)도 지원한다. 다음은 express에서 jade 템플릿이 어떻게 렌더링 되는 지를 보여주는 코드이다.

app.get('/', function(req, res){
    res.render('index.jade', { title: 'My Site' });
});

템플릿 파일명은 <name>.<engine> 형태를 따른다. 여기서 <engine>은 해당 템플릿을 처리하기 위해 필요한 모듈명이다. 예를 들어 layout.ejs 템플릿은 express의 view 시스템에게 require('ejs')을 하라고 전달한다. 이때 로딩중인 템플릿 처리 모듈은 express에서 동작하기 위해 Function를 리턴하는  exports.compile(str, options) 메서드를 익스포트 해야한다

[역자주 - express 특징 부분은 좀더 정확한 의미를 전달하기 위해서 번역하지 않았다.]

Express features:

  • Robust routing.
  • Redirection helpers.
  • Dynamic view helpers.
  • Content negotiation.
  • Focus on high performance.
  • View rendering and partials support.
  • Environment based configuration.
  • Session based flash notifications.
  • High test coverage.
  • Executable for generating applications quickly.
  • Application level view options.

As well as:

  • Session support.
  • Cache API.
  • Mime helpers.
  • ETag support.
  • Persistent flash notifications.
  • Cookie support.
  • JSON-RPC.
  • Logging.

다음 스크린캐스트는 express 개발자 TJ가 설명하는 express 가이드다.

express 소스 트리에 examples 디렉토리에서 더 많은 예제를 살펴볼 수 있다. express는 또한 잘 정리된 documentation을 제공한다.

다음과 같이 npm을 통해 express를 설치할 수 있다.

npm install express

Express의 GitHub 사이트: https://github.com/visionmedia/express.

Enjoy!

If you love these articles, subscribe to my blog for more, follow me on Twitter to find about my adventures, and watch me produce code on GitHub!