unopinionated 에 대한 좋은 표현이 잘 떠오르지를 않는다. 자기 주장을 내세우지 않는 이런 뜻이라고 봐야하는데.. 이게 뭔가 의존성이 적다는 건지.. 어떤 제약사항이 적다는 건지 뭔지 표현은 안되지만.. 작고 빠른 웹 프레임워크를 말한다고 하는 express.js 에 대해서 배우기를 시작하게 되었다. 먼저 Java 나 ASP.NET 를 알고 사용한지가 꽤 오래 되었으니 비교를 한번 해보자면 개인적인 소감은 이랬던것 같다. 미묘한 차이이긴 하지만 일단 설치가 매우 간단하다는 점..? 물론 Java 나 ASP.NET 도 어렵지는 않지만.. ^^ 아직 Express.js 와 비교하기엔 다소 어려운 단계인 것 같다.
먼저 Getting started 를 수행해보면 정말 어렵지 않게 Hello World 를 만날 수 있다. 아마 ASP.NET 이나 Java 였다면 Web.xml 을 살살 만져주고 있지 않았을까 싶다. 그 후에 Controller 클래스를 만들고 ViewResolver 를 세팅해주고 하지 않았을까 싶다. 물론 조금은 다른 개념일 수도 있으나.. 어떻게 구조를 가져갈 것인가 어떤 패키지 구성을 해볼까에 고민을 하고 있었을 것 같다. 하지만 expressjs 에서의 접근은 얼마나 빠르게 실행환경이 갖춰지느냐에 촛점을 맞추다 보니 접근이 조금 달랐다.
Expressjs 는 기존 Node 와 크게 다르지 않았다. Hello World 를 띄우는 웹서버를 띄우는 것 조차도 유사했다.
이건 node.js 공홈에 올라와있는 소스
var http = require('http') http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}) res.end('Hello World\n') }).listen(1337, '127.0.0.1') console.log('Server running at http://127.0.0.1:1337/')
이건 Express.js 공홈에 올라와있는 소스
var express = require('express') var app = express() app.get('/', function (req, res) { res.send('Hello World!') }) var server = app.listen(3000, function () { var host = server.address().address var port = server.address().port console.log('Example app listening at http://%s:%s', host, port) })
어짜피 결과는 HTML PlainText 로 Hello World! 가 찍히는 것.. 결과는 같은데 소스를 보면 express 라는 모듈을 사용하는 것과 http 모듈을 사용하는 것의 차이를 볼 수 있다. 그리고 가장 큰 차이? 라면.. express 에서는 routing 을 해주고 있고.. HTTP METHOD 에 대해서도 고려를 해주고 있다는 점.. 이런 차이가 있다고 할 수 있다. 이는 웹 프레임워크가 해야할 가장 중요한 일이기도 하니 expressjs 가 그를 잘 지원하고 있다고 보면 되겠다.
사실 원하던 것은.. node.js 를 nginx 나 apache 와 같은 웹 서버에 띄우는 방법을 고민 중인데.. 이는 더 진행해 봐야 겠다.
일단은 Expressjs 에 대한 맛보기 정도로 하고 더 이어서 배워 봐야겠다.