본문 바로가기

Programming

[JSON-Server] 코딩없이 Mock Restful API 서버 만들기

반응형

개요


안녕하세요 남산돈가스입니다.

오늘은 json-server라는 npm모듈을 소개해드리려고 합니다.

화면연동 시 서버 API가 없는 상태에서 미리 mock데이터로 연동이 필요하다던지 등 샘플용 API가 필요할 때 mock 프로젝트를 생성해서 만들기는 정말 귀찮은 노릇이죠.
json-server는 이런 귀찮은 문제를 정말 간단하게 해결해 주는 모듈입니다.

간단하게 정리하면 json-server는 npm을 이용해 설치하여 cli로 제공되며, 리턴 데이터로 활용할 json파일만 있으면 간단히 서버가 호스팅됩니다.
예제를 보면서 설명드리겠습니다.

내용


1. 설치

설치는 npm 명령을 통해 설치하며 전역으로 사용할 수 있도록 -g 옵션으로 설치합니다.

$ npm install -g json-server

2. Mock JSON 작성

개요에서 말씀드린 것처럼 리턴 데이터로 활용할 json파일을 작성해보겠습니다.

{
  "posts": [
    {
      "id": 1,
      "title": "반가워요",
      "author": "남산돈가스",
      "content": "안녕하세요 남산돈가스입니다."
    },
    {
      "id": 2,
      "title": "Hello",
      "author": "명동섞어찌개",
      "content": "안녕하세요 명동섞어찌개입니다."
    },
    {
      "id": 3,
      "title": "Good Morning!",
      "author": "남산돈가스",
      "content": "좋은 아침이에요~~"
    }
  ],
  "users": [
    {
      "id": 1,
      "name": "남산돈가스",
      "gender": "male"
    },
    {
      "id": 2,
      "name": "명동섞어찌개",
      "gender": "female"
    }
  ]
}

간단히 설명을 드리면 1Depth에 있는 'posts'와 'users'는 Rest API에서 프로토콜://호스트/{자원} 라면 '자원'에 해당합니다.
그러므로, 'posts'라는 키를 가진 값은 Object Array형태이며 Object는 'id', 'title', 'author', 'content'라는 키를 가진 게시글에 대한 내용을 가진 Object 라는 것을 알 수 있습니다.

json-server 실행

이제 이 json과 json-server 명령을 통해 서버를 실행해보겠습니다.

$ json-server --watch mock.json

  \{^_^}/ hi!

  Loading mock.json
  Done

  Resources
  http://localhost:3000/posts
  http://localhost:3000/users

  Home
  http://localhost:3000

  Type s + enter at any time to create a snapshot of the database
  Watching...

위와 같이 json-server 실행할json파일.json을 실행하면 3000포트를 가진 서버가 실행됩니다. --watch 옵션은 이제 이 서버 요청에 대한 내용을 계속해서 모니터링해주기 위한 옵션입니다.
추가적으로 Resources영역에 위 json에서 등록한 리소스임을 확인하실 수 있습니다. 서버 실행 시 호출이 가능한 주소를 Resources에 나타나고 있습니다.

요청해보기

GET http://localhost:3000/users : 회원 전체 조회

➜  ~ curl -XGET http://localhost:3000/users
[
  {
    "id": 1,
    "name": "남산돈가스",
    "gender": "male"
  },
  {
    "id": 2,
    "name": "명동섞어찌개",
    "gender": "female"
  }
]

GET http://localhost:3000/users/2 : 회원 중 id가 2번인 회원 조회

➜  ~ curl -XGET http://localhost:3000/users/2
{
  "id": 2,
  "name": "명동섞어찌개",
  "gender": "female"
}

POST http://localhost:3000/users : 회원 신규 등록

➜  ~ curl -XPOST http://localhost:3000/users -d '{ "name": "남산도서관", "gender" : "male" }' -H "Content-Type: application/json"
{
  "name": "남산도서관",
  "gender": "male",
  "id": 3
}
## 등록 후 다시 전체 조회로 확인
➜  ~ curl -XGET http://localhost:3000/users
[
  {
    "id": 1,
    "name": "남산돈가스",
    "gender": "male"
  },
  {
    "id": 2,
    "name": "명동섞어찌개",
    "gender": "female"
  },
  {
    "name": "남산도서관",
    "gender": "male",
    "id": 3
  }
]

PUT http://localhost:3000/users/3 : id가 3번인 회원의 정보를 수정

➜  ~ curl -XPUT http://localhost:3000/users/3 -d '{ "name" : "남산케이블카", "gender": "female" }' -H "Content-Type: application/json"
{
  "name": "남산케이블카",
  "gender": "female",
  "id": 3
}                                                                                                                
## 수정한 결과를 확인하기 위해 전체 조회
➜  ~ curl -XGET http://localhost:3000/users
[
  {
    "id": 1,
    "name": "남산돈가스",
    "gender": "male"
  },
  {
    "id": 2,
    "name": "명동섞어찌개",
    "gender": "female"
  },
  {
    "name": "남산케이블카",
    "gender": "female",
    "id": 3
  }
]

DELETE http://localhost:3000/users/3 : id가 3번인 회원정보를 삭제

➜  ~ curl -XDELETE http://localhost:3000/users/3
{}                                                               
## 삭제 된 결과를 확인하기 위해 전체 조회
➜  ~ curl -XGET http://localhost:3000/users
[
  {
    "id": 1,
    "name": "남산돈가스",
    "gender": "male"
  },
  {
    "id": 2,
    "name": "명동섞어찌개",
    "gender": "female"
  }
]

결론

단순히 json 파일만 작성했을 뿐인데, RESTful한 Mock API서버가 만들어졌습니다. 거기에 조회뿐만 아니라 생성, 수정, 삭제 기능까지 가능하니 훌륭한 Mock 도구가 될 것 같습니다.

json-server의 github 페이지에 가보시면 제가 설명드린 기본적인 내용 이외에 훨씬 더 다양한 기능을 제공하니 참고하시기 바랍니다.

감사합니다.

'Programming' 카테고리의 다른 글

[Javascript] video.js 사용법  (0) 2020.08.13
Mac에 RabbitMQ 설치 및 실행하기  (1) 2020.07.31
Kong API Gateway #2 - Konga & API 등록/요청  (0) 2020.05.21
Kong API Gateway #1 - 개념 & 설치  (1) 2020.05.21
Git 명령어 정리  (0) 2020.04.22