http 모듈만 사용해서 웹서버를 구성할 때는 많은 것들을 직접만들어야 합니다. 하지만 직접 만들어야 하는 코드가 많을 경우에 시간과 노력이 많이 소모되기 때문에 기 작성되어 있는 프레임워크를 사용하는 방법이 더 현명합니다.
Express.JS는 Node.JS 상에서 동작하는 웹 개발 프레임워크입니다. 이외에도 많은 웹프레임워크가 존재하지만 현재까지 가장 많이 사용하는것이 바로 Express.JS 입니다.
익스프레스는 미들웨어(Middleware)구조 덕분에 가볍고 유연하게 웹을 구성할 수 있는 장점이 있습니다. 자바스크립트 코드로 작성된 다양한 기능의 미들웨어는 개발자가 필요한 것만 선택하여 익스프레스와 결합해 사용할 수 있습니다.
1. Express.JS 설치하기
익스프레스는 npm 명령어를 통하여 설치할 수 있습니다.
$npm install express -g
Express 서버 테스트 예제
var express = require('express'),http = require('http');
var app = express();
app.set('port',process.env.PORT || 3000);
http.createServer(app).listen(app.get('port'),function(){
console.log('익스프레스 서버를 시작했습니다. :' + app.get('port'));
});
set()은 express객체에 정의된 함수를 호출합니다. 마지막 부분은 http모듈에 정의된 createServer()메소드를 호출하는데, 파라미터로 express 객체를 전달합니다. 그리고 createServer 메소드를 호출하여 만든 객체에 들어있는 listen()메소드를 호출하면 웹 서버가 시작됩니다.
2. Express.JS 미들웨어와 라우터
express()메소드를 담고있는 객체의 주요 메소드
Method | Description |
---|---|
set(name, value) | 서버 설정을 위한 속성을 지정합니다. |
get(name) | 서버 설정을 위해 지정한 속성을 꺼내 옵니다. |
use([path],function,[function]) | 미들웨어 함수를 사용합니다. |
get([path],function) | 특정 패스로 요청된 정보를 처리합니다. |
미들웨어란?
미들웨어는 웹 요청과 응답에 관한 정보를 사용해 필요한 처리를 진행할 수 있도록 만든 하나의 독립된 함수로써 Express.JS의 핵심 구조입니다. use()메소드로 설정하며 함수형태로 구현이 가능합니다. 요청 객체 req와 응답객체 res를 이용해 로직을 구현하고 역할 수행을 마친 뒤 next()함수 호출로 다음 미들웨어를 호출하거나 라우팅 로직을 수행합니다.
미들웨어 응답객체 메소드
Method | Description |
---|---|
send([body]) | 클라이언트에 응답 데이터를 보냅니다. |
status(code) | HTTP 상태 코드를 반환합니다. |
sendStatus(statusCode) | HTTP 상태코드를 반환합니다. 상태메세지와 함께 전송됩니다. |
redirect([status],path) | 웹 페이지 경로를 강제로 이동시킵니다. |
render(view,[locals],[callback]) | 뷰 엔진을 사용해 문서를 만든 후 전송합니다. |
라우팅이란?
클라이언트의 요청을 위한 URL 스키마를 Route라고합니다. GET / 을 예로 들자면 글라이언트가 GET 메소드를 이용해 / URL에 해당 하는 서버자원을 요청한다는 의미로 해석합니다. 만약 POST 메소드를 사용한다면 서버에 자원을 생성하는 요청입니다. 이렇게 URL 스키마는 서버와 클라이언트간의 통신 인터페이스를 제공해 주는 역할을 합니다.
3. Express.JS에서의 헤더와 파라미터
요청파라미터는 query string이라고 하며 클라이언트로 부터 전달받은 파라미터는 req객체의 query객체에 넣어두게 됩니다. 클라이언트가 요청할 때 전달되는 헤더값들은 header()메소드로 확인할 수 있습니다.
아래의 코드는 전달받은 파라미터와 User-Agent 값을 출력하는 코드입니다. http://localhost:7777/?name=taeil 로 접속하였을 경우에는 파라미터 값으로 taeil을 출력할 것입니다.
...
app.use(function(req,res,next){
console.log('첫 번째 미들웨어에서 요청을 처리함.');
var userAgent = req.header('User-Agent');
var paramName = req.query.name;
res.writeHead('200',{'Content-Type':'text/html;charset=utf-8'});
res.write('<div><p>User-Agent :' + userAgent + '</p></div>'');
res.write('<div><p>Param name :' + paramName + '</p></div>');
res.end();
});
...
4. 요청 라우팅하기
요청 url을 일일이 확인해야 하는 번거로운 문제는 라우터 미들웨어를 통하여 해결할 수 있습니다. 라우터 미들웨어는 익스프레스에 포함되어 있습니다. 이 라우터를 사용하면 사용자가 요청한 기능이 무엇인지 패스를 기준으로 구별하기 때문에 아주 중요합니다. 라우터 미들웨어를 사용하려면 다음과 같이 익스프레스 객체에서 라우터 객체를 참조해서 사용합니다.
//라우터 객체 참조
var router = express.Router();
//라우팅 함수 등록
router.route('/process/login').get(...);
router.route('/process/login').post(...);
...
//라우터 객체를 app 객체에 등록
app.use('/',router);
라우터 미들웨어 메소드
Method | Description |
---|---|
get(callback) | GET방식으로 특정패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다. |
post(callback) | POST방식으로 특정패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다. |
put(callback) | PUT방식으로 특정패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다. |
delete(callback) | DELETE방식으로 특정패스 요청이 발생했을 때 사용할 콜백 함수를 지정합니다. |
all(callback) | 모든 요청 방식을 처리합니다. |