본문 바로가기

백엔드

[Node.js] 2. Express 프레임워크로 REST API 서버 구축

개요

저번 문서에서 REST API가 무엇인지 대략 파악하였다. 이제부터는 Express 프레임워크를 이용하여 REST API를 실제 구축할 예정이다.

 

설치 및 버젼

  1. node.js: v12.16.2
  2. npm: 6.14.4
  3. postman 설치: 개발한 API의 테스트를 쉽게 할 수 있는 어플리케이션

 

기본 세팅

npm init
npm install express

npm init이후 Express 프레임워크를 사용하기 위해 설치준다.

 

 

기본 코드

const express = require("express")
const bodyParser = require("body-parser")

const server = express();

server.use(bodyParser.json())

const users = [
    {
        id:"asdfasdf",
        name:"Dave",
        age:17
    },
    {
        id:"fasffa",
        name:"Gong",
        age:17  
    }
]


//서버가 잘 동작하는지 확인하기 위함
server.listen(3000, ()=>{
    console.log("the server is running")
})

익스프레스 서버를 생성해주고 서버가 잘 동작하는지 확인한다. 이번 문서에서는 간단하게 테스하기 위해 index.js 파일 내에 모델을 생성해주었다. 이후 문서에서는 MySQL이나 MongoDB를 활용할 예정이다.

 

 

HTTP Method: GET

//get 메소드로 api/user가 올 경우 users를 응답
server.get("/api/user",(req,res)=>{
    res.json(users);
})

//id로 특정 유저 반환. 주의점: express에서는 맨위에서부터 순차적으로 검사. 큰 목록부터 위에서
//:id는 request의 params(매개변수들) 중 id로 접근 가능
server.get("/api/user/:id",(req,res)=>{
    const user = users.find((u)=>{ //users 중에 params.id랑 같은걸 찾음
        return u.id === req.params.id;
    })
    if(user){
        res.json(user)
    }else{
        res.status(404).json({errorMessage:"There is no user."});
    }
})

GET은 자원을 조회하기 위한 메서드이다. '/api/user'가 올 경우 users 전체를 반환하고 '/api/user/:id'가 올 경우 전달받은 id에 해당하는 유저를 반환한다. 코드를 살벼보면 server.~에서 ~에는 get/post/put/delete로 치환 가능하다. 그리고 좌측 파라미터로 표현을 넘겨주고 우측에는 request와 response가 존재한다. 유저가 바디에 id와 같은 파라미터를 전달해 주었따면 params에서 그 값을 획득할 수 있다.

 

HTTP Method: POST

server.post("/api/user",(req,res)=>{
    users.push(req.body);
    res.json(users);
})

POST는 자원을 생성하기 위한 메서드이다. 유저는 바디에 json 타입으로 자원을 넘겨주고 서버에서는 이를 users 리스트에 추가한다.

 

HTTP Method: PUT

server.put("/api/user/:id",(req,res)=>{
    let index = users.findIndex(u=>u.id===req.params.id)
    if(index===-1){
        res.json({errorMesage:"Error"});
    }else{
        users[index] = {...users[index],...req.body};
        res.json(users[index]);
    }
})

PUT는 자원을 수정하기 위한 메서드이다. 유저는 바디에 수정하고 싶은 내용을 작성하여 넘겨주고 매개변수로는 id를 넘겨준다. 그러면 서버는 해당 id에 해당하는 user에 대해 수정 작업을 진행한다.

 

HTTP Method: DELETE

server.delete("/api/user/:id",(req,res)=>{
    let index = users.findIndex(u=>u.id===req.params.id)
    if(index===-1){
        res.json({errorMesage:"Error"});
    }else{
        let foundUser = users.splice(index,1); //인덱스로 부터 한칸을 제거
        res.json(foundUser[0]);
    }
});

DELETE는 자원을 삭제하기 위한 메서드이다. 유저는 파라미터로 삭제하고 싶은 유저의 id를 넘기면 서버는 해당 유저의 삭제를 진행한다.


postman 사용 예시 - "asdfasdf" ID를 갖는 유저의 이름을 "Kang"으로 변경하기

 

0. 서버 시작

node server

 

1. 메서드 타입 선택 및 request 입력

좌측에서 HTTP 메서드를 선택하고 우측에 원하는 요청을 입력한다.

 

2. 전달된 데이터의 타입 설정

위의 PUT의 경우 body에 수정하고 싶은 내용을 작성하게 되므로 헤더에 Content-Type을 json으로 선택한다.

 

 

3. Body에 수정할 내용 입력

이름을 Kang으로 수정해준다.

 

4. 결과 확인

SEND 버튼을 클릭하면 위와 같이 결과가 출력된다.

 


리뷰

이전에 간단한 APM을 이용하여 HTTP 서버를 구축한 경험이 있어서 그런지 이해하는데 어렵지 않았다. 그리고 node express가 굉장히 간결하고 좋다고 느꼈다. 이번 문서는 "hello world" 느낌이었고, 다음 문서부터 본격적으로 시작한다.