Express 를 설명하기 전에 Node 에 대해 간단히 알아보고 넘어가겠다.
Express 는 Node 를 위한 웹 프레임워크이기 때문이다.
▶ Node 란 무엇일까 ?
모질라 공식문서에서 Node는 개발자가 모든 종류의 서버사이드 도구들과 어플리케이션을 JavaScript 로 만들 수 있도록 해주는 런타임 환경이이라고 정의되어있다. 언어도 아니고, 프레임워크도 아니고, 라이브러리도 아니고, 런타임.
▶ 런타임 환경은 무엇일까 ?
런타임은 프로그래밍 언어가 구동되는 환경으로,
어떤 프로그램이 동작하는 장소이다.
이렇게 프로그램이 동작하기 위해선 빌드하기 위한 도구들이 필요하고
따라서 런타임에는 JavaScript 엔진과 Web API 가 필수적이다 ( JavaScript 엔진 = JavaScript 를 해석할 수 있는 엔진 )
JavaScript 의 런타임은 대표적으로 웹 브라우저가 있다.
▶ JavaScript는 이미 웹 브라우저 라는 런타임을 갖고 있는데 왜 Node 라는 새로운 런타임이 생겨난걸까 ?
최초의 JavaScript 는 웹페이지(HTML)를 조작하기 위해서 만들어졌다.
이후 2005년 Google Maps 의 등장으로 웹 애플리케이션 언어로서 JavaScript 의 기능이 확인되었고,
JS를 통해 웹 애플리케이션을 구축하려는 시도와 활용이 많아지면서 JavaScript 엔진에 대한 요구가 상승했다.
많은 브라우저가 자바스크립트 엔진 개발 경쟁을 벌이는 과정에서 V8 엔진의 성능이 향상했다.
JS 엔진이 강력해지자 웹 브라우저 내에서 말고도 JS를 실행할 수 있는 환경이 요구되었고,
브라우저 없이 자바스크립트 문법을 실행할 수 있는 Node.js 런타임이 생겨난것이다.
이렇듯 브라우저와 Node.js 는 JavaScript 의 런타임 환경이라는 동일 조건을 가지고 있으나,
탄생 배경이 다르기 때문에 둘의 존재 목적이 다르다.
브라우저 : HTML, CSS, JS 를 실행하여 웹페이지를 화면에 띄우는 것이 목적
Node.js : JS 를 브라우저 외의 환경에서도 사용하기 위한 것이 목적
▶ Express 란 무엇일까 ?
Express 는 Node.js 웹서버에 올라가는 프레임워크이다.
Express 를 통해 Node.js 서버를 쉽게 구성할 수 있다.
▶ 왜 ? 어떻게 ? Express 를 통해 Node.js 서버를 쉽게 구성할 수 있는것인가 ?
Express 로 쉽게 서버를 구성할 수 있는 요인으로 가벼운 Express, 미들웨어, 라우팅 을 꼽는다.
▷ 미들웨어
미들웨어란 요청과 응답 중간에서 목적에 맞게 처리를 하는 함수라고 할 수 있다.
- 미들웨어 함수는 요청(req) 객체, 응답(res) 객체 그리고 다음 미들웨어를 실행하는 next 함수로 이뤄져있다.
- 미들웨어 함수는 요청과 응답의 과정 도중 그 다음의 미들웨어 함수를 실행시킬 수 있다.
- 미들웨어는 HTTP 요청 순차적으로 시작되기 때문에 순서가 중요하다.
- 미들웨어 함수가 요청-응답을 사이클을 종료하지 않는 경우 next() 를 호출해 그 다음 미들웨어 함수에 제어를 전달해야 한다. 그렇지 않으면 해당 요청은 정지된 채로 방치된다.
간단한 미들웨어를 만들고 작동시켜보겠다.
app.use((req,res) => {
console.log("middleware test");
});
서버에 접속하면 콘솔에 로그가 찍히는 미들웨어를 만든다.
그 다음 localhost : 4000 에 접속을 하면 콘솔에 로그만 찍히고 페이지 접속이 되지않는다.
이는 next() 함수로 다음 미들웨어 함수를 실행시키지 않아서 다음 메서드로 넘어가지 못했기 때문이다.
요청-응답 중간에서 실행된다는 미들웨어의 특징으로 인해 아무것도 반환하지 못하고 무한정 서버의 응답을 기다리게 되는것이다.
next() 를 추가하고 다시 실행시켜보자
app.use((req,res,next) => {
req.user ={
name : "SIAN",
};
next();
});
app.get('/', function (req, res) {
console.log(req.user);
res.sendFile(__dirname+"/sian-middleware.html")
});
로그가 찍히고 페이지가 로드되었다.
이렇게 미들웨어를 통해 요청을 처리하기 전에 해야하는 작업을 수행할 수 있다.
▷ 라우팅
라우팅은 네트워크 안에서 통신되는 데이터를 보낼 경로를 결정하는 프로세스이다.
프로젝트의 규모가 커질수록 라우터를 분리시키는 과정이 필요하다.
Express 의 Router() 을 사용하면 여러개의 js 파일에서 라우팅이 가능하다.
라우터를 분리시키고 Route() 함수를 이용해 라우팅을 해보자
router 폴더를 만들고 라우팅을 할 js 파일을 생성한다
생성한 파일에 코드를 작성 하고 export 해준다.
작성된 라우터 미들웨어는 사용자로부터 요청받은 req 객체를 처리한 후 res 를 리턴하는 방식으로 동작한다.
test.js
const express = require('express');
const router = express.Router();
router.get('/route', (req, res) => {
res.send("라우팅")
});
module.exports = router;
app.js
const express = require('express');
const testRoute = require('./router/test');
app.use(testRoute);
app.listen(4000, ()=> {
console.log('Listening on port 4000');
});
라우터(testRoute) 를 use() 안에 넣어 미들웨어화했다.
서버를 실행시키면 의도한대로 라우팅 되는 것을 확인할 수 있다.
Express 가 무엇인지, 그리고 왜 사용하는지에 대해서 알아봤다.
https://wikibook.co.kr/article/what-is-expressjs/
https://developer.mozilla.org/ko/docs/Learn/Server-side/Express_Nodejs/Introduction
'Express' 카테고리의 다른 글
[Express] Express REST API (0) | 2022.12.09 |
---|