본문 바로가기
Development/데브코스(TIL, 회고록 등등...)

[데브코스 웹 풀스택 과정 TIL] 5주차 - Express.js, Postman 다뤄보기

by Polaris_ 2023. 12. 19.

Postman

API를 구성하고 테스트할 때 보통 GET 메서드 말고도 POST, DELETE 등의 다른 메서드를 사용해야 할 일이 생긴다. 그런데 여기서 한 가지 문제가 생기는데,

GET 메서드 외 나머지 메서드는 브라우저 주소창에서 주소를 입력하는 것으로는 테스트할 수 없다는 것이다.

나이브한 해결 방법은 테스트 코드를 짜서 테스트하는 방법이 있지만 매번 코드를 짜서 하기에는 난감한 노릇이다. 직관적이지도 않고 때로는 언제 버그가 터질지도 모르고 말이다.

그렇다면 우리에게 필요한 도구는 원하는 URL에 원하는 메서드를 날려줄 수 있는 도구인데, 이때 등장한 도구가 Postman 되시겠다. 

Postman은 정확하게는 API의 디자인, 빌드, 테스트, 관리를 효율적으로 반복 수행할 수 있는 도구이다.

여기에서 내려받을 수 있고, 설치를 마친 다음 계정이 없으면 회원가입을 하고 로그인 한 다음 쓸 수 있다.

Postman을 이용하여 메서드 테스트 해보기

테스트를 하기 앞서 GET과 POST의 차이점을 잠깐 보고 가자.

HTTP 메소드 특징 express.js 사용법
GET 정보를 URL속 query에 담아 전송 req.query
POST 정보를 request의 body에 담아 전송 req.body

이제 테스트를 해보자.

아래는 테스트에 사용한 코드다.

/* index.js */

const express = require('express');
const app = express();

app.use(express.json());  // Express에서 JSON 형태의 request를 처리하기 위한 미들웨어

app.post('/test', function (req, res) {
    res.send(req.body);  // request의 body에 들어있는 데이터 출력
})

app.listen(3000);  // localhost:3000

결과는 아래와 같다


리팩터링

리팩터링은 소프트웨어의 결과의 변형 없이 코드 내부를 수정(재조정) 하는 것으로, 가독성을 높이고 유지보수를 편하게 함에 그 의미가 있다.

그렇다면 리팩터링은 언제 해야 할까.

  • 에러가 반복하여 발견될 때
  • 새로운 기능 추가 시
  • 코드 리뷰 시

보통은 위와 같은 경우에 이루어지며 그 외의 이유로도 리팩터링을 할 수 있다.

단, 서비스 직전에는 절대로! 코드 수정을 해서는 안된다. 잘못 건드렸다가 의도치 않은 결과가 발생할 수도 있다.


HTTP 상태 코드

HTTP 상태 코드는 HTTP 요청에 대해 서버에서의 처리 결과를 나타내는 코드이다.

코드는 100 ~ 500번대로 정의되어 있다.

코드 의미 설명
1xx 정보 (Informational response) 클라이언트의 요청을 받았으며 프로세스를 계속 진행함
2xx 성공 (Successful) 클라이언트의 요청을 받았으며 정상적으로 처리되었음
3xx 리다이렉션 (Redirection) 요청 처리를 마치기 위해 추가 작업(ex. 다른 URI로 이동)이 필요
4xx 클라이언트 오류 (Client error) 요청 양식이 잘못되었거나 처리할 수 없음
5xx 서버 오류 (Server error) 서버에서 요청을 처리하는 데 실패함
Reference: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

자주 쓰이는 상태 코드는 다음과 같다.

  • 200: 요청 수행(ex. GET, POST,...) 성공
  • 201: 리소스 추가(등록) 성공
  • 400: 잘못된 요청(ex. 요청 구문 오류)
  • 404: 해당 URI의 리소스를 찾을 수 없음
  • 500: 서버 오류
  • 503: 서버가 점검이나 과부하로 인해 일시적으로 요청을 처리할 수 없음

Express에서 HTTP 상태 코드 전송

HTTP 상태는 방법은 두 가지 방법으로 가능하다.

  • res.sendStatus(statusCode)
    • HTTP 상태 코드를 지정하고 지정되어 있는 상태 메시지를 response로 반환
    • 알 수 없는 상태 코드인 경우에는 코드 번호만 response로 반환
res.sendStatus(404);  // 404 Not found
  • res.status(statusCode)
    • 응답의 HTTP 상태를 지정
res.status(404).send('Not Found!');
res.status(404).json({msg: 'Not found'});

Express에서 라우팅

라우팅이란? : 클라이언트에서 요청이 왔을 때 적절한 경로로 안내해 주는 것

Express에서 express.Router() 미들웨어를 사용하여 모듈화가 가능하다.

사용법은 const router = express.Router()으로 생성한 라우터 객체를 기존의 const app = express() 객체와 동일한 방식으로 사용하면 된다.

아래는 간단한 예시이다.

/* index.js */

const express = require('express');
const app = express();

const router = require('./router');  //router.js
app.use(express.json());   //Express에서 JSON 형태의 request를 처리하기 위한 미들웨어
app.use('/test', router);  //router.js에서 export한 router 객체 import

app.listen(3000);     // localhost:3000
/* router.js */

const express = require('express');
const router = express.Router();  // Express의 Router 객체 생성

router.route('/')
    .get((req, res) => {
        res.send({msg: 'got GET request!'});
    })
    .post((req, res) => {
        res.send({msg: 'got POST request!'});
    })
    .put((req, res) => {
        res.send({msg: 'got PUT request!'});
    })
    .delete((req, res) => {
        res.send({msg: 'got DELETE request!'});
    });

module.exports = router;  // router 객체 export