자체적인 최소한의 기능을 갖춘 라우팅 및 미들웨어 웹 프레임워크이며, Express 애플리케이션은 기본적으로 일련의 미들웨어 함수 호출이다.
미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수다. 그 다음의 미들웨어 함수는 일반적으로 next라는 이름의 변수로 표시된다.
미들웨어는 요청과 응답 사이에서 데이터에 대해 다양한 기능을 하는 중간다리 함수이다.
app.use(), app.METHOD()(get, post, put, delete 등) 함수를 이용해 애플리케이션 미들웨어를 app 객체의 인스턴스에 바인드할 수 있다.
// 1. 요청을 수신할 때마다 실행
app.use(function (req, res, next) { ... }
// 2. /path에 대한 요청에 대해 실행
app.use("/path", function (req, res, next) { ... }
// 3. /path에 대한 get 요청에 대해 실행
app.get("/path", function (req, res, next) { ... }
애플리케이션과 동일하나 바인드되는 인스턴스가 app 객체 대신 router 객체가 된다.
우선은 이정도만 알아도 충분할 것 같다.
강의 실습에서의 예)
// app.js
// 애플리케이션 레벨 미들웨어
...
app.use(express.json());
app.use("/api", [goodsRouter, cartsRouter]);
...
// goods.js
// 라우터 레벨 미들웨어
...
router.get("/goods". (req, res) => { ... }
REST(REpresentational State Transfer)는 www(world-wide web)와 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.
일반적인 HTTP를 통한 송/수신은 REST API를 통해서 사용을 한다.
REST 아키텍처는 사람이 쉽게 이해할 수 있도록 자원을 정의하고 자원을 중심으로 표현을 구성하는 원칙을 제시한다.
우리가 만들 소프트웨어가 관리하는 모든 것을 자원으로 표시할 수 있다.
GET, POST 등으로 자원에 대한 CRUD 행위를 표현할 수 있다.
GET - 조회, POST - 생성.
Create: 생성(POST)
Read: 조회(GET)
Update: 수정(PUT / PATCH)
Delete: 삭제(DELETE)
자원을 어떻게 표현할 지에 대한 설명이다. 보통 JSON, XML 등의 형식을 이용해서 표현한다.
HTTP에서는 Content-type으로 표현한다.
router.get("/books", (req, res) => {
res.json({success: true, data: getAllBooks() });
});
/books라는 URI(자원)를 통해 책들의 전체 목록을 불러와서(행위) 응답(JSON 형식으로)해주는 역할을 하는 API이다.
미들웨어: 요청과 응답 사이에서 다양한 기능을 수행하는 중간다리 함수. 주요 기능은 코드의 실행, 요청 및 응답 객체의 처리, 다음 미들웨어 함수 호출.
REST: 웹 상에서 컴퓨터 간의 더욱 원활한 통신을 위한 표준을 제시하는 아키텍처 스타일. API를 구상할 때 REST의 원칙을 따르는 것이 RESTful API.