Express

[Express] Express 개요

sian han 2022. 12. 7. 16:30

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