Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

Express.js & MongoDB 기반 REST api 구현하기 - 1편 본문

💻 백엔드/Node.js

Express.js & MongoDB 기반 REST api 구현하기 - 1편

Chamming2 2020. 12. 30. 02:30
[먼저 REST api에 대한 간단한 영상을 추천드립니다.]

 

오늘은 익스프레스(Express.js)와 NoSQL의 선두주자 MongoDB를 활용해 REST api를 구현해보도록 하겠습니다.

먼저 REST api를 간단히 설명하자면, 과거에는 클라이언트로 요청을 보낼 때 수행할 동작별로 다른 URL에 요청을 보내야만 했습니다.

 

1. 요청별로 다른 엔드포인트를 관리하는 방식

이렇게 동작별로 다른 URL에 요청을 보내는 방식은 개발 문서의 복잡화와 개발자들간 소통을 방해하는 원인이 되었습니다.

 

따라서 동작별로 다른 URL(앞으로는 엔드포인트라 칭하겠다.)를 만드는 대신, 엔드포인트는 하나만 두고 요청 HTTP 메서드에 따라 다른 동작을 수행하도록 한 것이 바로 REST api의 주요 개념입니다.

2. 요청 메서드에 따라 다른 동작을 수행하는 방식

이는 현재까지도 굉장히 유효한 api 설계 패턴으로, 등장한지 거의 20년이 되어가는 개념이지만 여전히 업계 표준(?) 의 자리를 굳건히 지키고 있습니다.

 

이제 익스프레스를 활용해 계정 정보를 관리하는 REST api 서버를 직접 구현해보도록 하겠습니다.

npm i express 로 익스프레스를 설치한 후 아래와 같이 서버 부분의 코드를 작성합니다.

// server.js
const express = require("express");
const app = express();

const accountRouter = require("./routes");
app.use("/account", accountRouter);

app.listen(5000, () => {
  console.log("server started at 5000");
});
// routes.js
const express = require("express");
const router = express.Router();

// GET 요청 시 처리할 로직
router.get("/", (req, res) => {
  res.send("GET 요청을 수신했습니다.");
});

// POST 요청 시 처리할 로직
router.post("/", (req, res) => {
  res.send("POST 요청을 수신했습니다.");
})

// PATCH 요청 시 처리할 로직
router.patch("/:id", (req, res) => {
  res.send("PATCH 요청을 수신했습니다.");
})

// DELETE 요청 시 처리할 로직
router.delete("/:id", (req, res) => {
  res.send("DELETE 요청을 수신했습니다.");
})

module.exports = router;

메서드별 다른 역할을 어쩌고 저쩌고~ 했지만 익스프레스에 이미 구현이 되어있어 실제 구현은 어렵지 않다고 느낄 것입니다.

익스프레스로 REST api를 구현하는 방법을 크게 정리하자면 다음과 같은데요, 결국 핵심은 HTTP 메서드에 따른 라우터를 만드는 것입니다.

  1. 라우터를 파일로 분리하고, express.Router() 미들웨어를 사용해 라우팅 객체를 초기화한다.
  2. 라우팅 객체 (위 코드에서는 router)에 사용하고자 하는 HTTP 메서드를 바인드하고 엔드포인트와 콜백을 인자로 넘긴다.
  3. 완성된 라우터를 모듈로 서버에 넘겨준 다음 서버에서는 app.use()를 활용해 라우터를 활용한다.

(server.jsapp.use() 부분 코드가 잘 이해되지 않을 수도 있는데, 여기서는 첫 번째 인자 '/account' (= 서버를 연 주소 localhost:5000/account) 로 요청이 들어올때마다 두 번째 인자로 받은 라우터 미들웨어에 요청을 넘긴다고 생각하면 됩니다!)

 

다음은 HTTP 메서드에 따라 데이터베이스에서 값을 읽고 삭제하는 CRUD 동작을 구현해보도록 하겠습니다.

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆