ExpressJS 4.0 무엇이 달라졌나?

ExpressJS 4.0 무엇이 달라졌나?

최근 웹개발환경에서 가장 Hot한 토픽을 꼽으라면 열에 아홉은 NodeJS를 꼽을 것 같습니다. 라이언 달이 v8 자바스크립트 엔진을 포팅해 태어난 NodeJS는 무엇보다 언어로써 자바스크립트를 채용해 개발 진입 장벽이 매우 낮으며, Non-blocking I/O와 이벤트 루프를 통해 높은 처리성능을 가지고 있어 더욱 각광받고 있습니다. 그리고 ExpressJS는 NodeJS에서 가장 인기 있는 웹프레임워크 프로젝트입니다. NodeJS를 가지고 웹서비스를 제작한다고 할때 이 프레임워크를 빼고서는 거의 이야기를 할 수 없을 정도입니다.

이 좋은 웹프레임워크 ExpressJS, 네 저도 참 좋아하는데요, 그래서 Kollus 서비스에서도 NodeJS와 ExpressJS를 사용하고 있습니다. 물론 NodeJS라는 환경의 특성상 heavy-duty한 작업의 처리에는 한계가 있어서, NodeJS가 가장 잘 할 수 있는 부분인 ‘작고 빠른 요청의 처리’에만 제한적으로 사용하고 있습니다.

이 포스트에서는 올 해 메이저 버전을 업데이트한 ExpressJS를 가지고, 이전 버전과 크게 무엇이 달라졌는지를 살펴보도록 하겠습니다.

번들 미들웨어의 삭제

ExpressJS 4.0에서는 기존에 ExpressJS가 기본적으로 탑재하고 있던 미들웨어들이 모두(몇가지를 빼고) 빠지고 모두 독립적인 레포지트리를 통해 릴리즈 되도록 변경되었습니다. 따라서 ExpressJS의 메이저 업데이트와 관계 없이 미들웨어들의 독립적인 관리가 가능해졌습니다.

다음은 변경된 미들웨어들의 패키지명입니다. ExpressJS에서는 반드시 다음의 미들웨어를 사용하기 위해서는 미들웨어 패키지들을 소스 디렉토리에 설치하고 임포트(require) 하는 과정이 필요합니다. 잊지마세요!

ExpressJS 3.0 ExpressJS 4.0
bodyParser body-parser
compress compression
cookieSession cookie-session
logger morgan
cookieParser cookie-parser
session express-session
favicon static-favicon
response-time response-time
error-handler errorhandler
method-override method-override
timeout connect-timeout
vhost vhost
csrf csurf

app.configure()의 삭제

app.configure는 더 이상 동작하지 않습니다. 대신에 환경변수를 통해 각 스테이지별로 설정값을 변경할 수 있습니다.

다음은 그 예제입니다.

// 기존 방법
app.configure('development', function() {
     	// 여기에 설정 내용을 작성
});

// 새로운 방법
var env = process.env.NODE_ENV || 'development';
if('development' == env) {
     	// 여기에 설정 내용을 작성
}

라우팅

app.router()의 삭제

app.router도 삭제됩니다. (메이저 업데이트의 위엄!) 대신에 app.use()나 app.VERB() (VERB엔 HTTP method를 넣어주는거 아시죠? app.get, app.post 등등…) 을 이용하면 됩니다.

app.route() 추가

app.route가 추가되었습니다. app.router보다 훨씬 더 다이내믹하게 요청을 라우팅할 수 있게 되었습니다.

ExpressJS 3.0에서 이랬던 코드가

app.get('/dogs', function(req, res, next) {
     // 비지니스 로직 코드
});

app.post('/dogs', function(req, res, next) {
     // 비지니스 로직 코드
});

ExpressJS 4.0에선 이렇게 바뀝니다.

app.route('/dogs')
     .get(function(req, res, next) {
          // 비지니스 로직 코드
     })
     .post(function(req, res, next) {
          // 비지니스 로직 코드
     });

중복을 줄이면서 훨씬 더 명시적인 코드가 되었습니다.

라우터(Router)

라우터는 ExpressJS의 공개 API입니다. 라우터를 통해 얻어진 라우팅 인스턴스는 .use, .get, .param, .route 등에서 사용할 수 있는 라우팅 API를 제공합니다.

다음은 그 예 입니다.

var dogs = express.Router();

dogs.get('/', function(req, res, next) {
          // 비지니스 로직 코드
});

dogs.post('/', function(req, res, next) {
          // 비지니스 로직 코드
});

app.use('/dogs', dogs);

더 이상 Connect 3.0을 사용하지 않습니다.

ExpressJS 4.0은 HTTP 프레임워크로 더 이상 Connect 3.0을 사용하지 않습니다. 이제 시동시에 connect.multipart() will be removed in connect 3.0 경고가 보이지 않습니다! (만세!)

결론

위 내용들은 ExpressJS 3.0에서 4.0으로 업데이트 되면서 가장 크게 변한 것들 중에 하나입니다. 물론 언급하지 않은 변경사항이 많이 있습니다만, 위 내용을 바탕으로 주의깊게 코드를 살펴본다면 3.0에서 4.0으로의 마이그레이션이 어렵지만은 않을 겁니다.

감사합니다!

Posted by 이주헌 @ 카테노이드 연구소

참고 사이트

http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.