웹 개발에서 프론트엔드 및 벡엔드 개발자가 협업하여 일을 하게 됩니다.
프론트엔드에서는 서버 데이터가 오면 그 데이터를 활용하여 화면에 출력하게 됩니다.
개발이 진행되면서 프론트와 벡엔드의 개발 속도 차이가 발생할 수 있으며
벡엔드에서 서버 API 개발이 진행되는 동안 프론트엔드에선 대기하는 상황도 발생할 수 있습니다.
이런 대기하는 상황을 해결하기 위한 방안으로 가상의 웹 서버인 json-server를 사용할 수 있습니다.
json-server는 실제에 가까운 서버를 사용할 수 있게 되어 미리 코드를 구현할 수 있게 됩니다.
프로젝트 폴더를 생성합니다. 그리고 폴더안에 json-server를 설치할 폴더도 생성합니다.
visual studio code를 실행하고 Open Folder 버튼을 눌러 프로젝트 폴더를 불러옵니다.
상단 메뉴 Terminal에서 new Terminal을 클릭합니다.
클릭하면 에디터 아래에 Terminal창이 열립니다. 설치폴더로 이동하기 위해 cd json-server를 입력하고 엔터키를 누릅니다.
- 윈도우 사용자
npm install -g json-server
- 맥 사용자
sudo npm install -g json-server
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
],
"profile": { "name": "typicode" }
}
json-server --watch db.json
\{^_^}/ hi!
Loading db.json
Done
Resources
http://localhost:3000/posts // 접근가능한 리소스 주소
http://localhost:3000/comments // 접근가능한 리소스 주소
http://localhost:3000/profile // 접근가능한 리소스 주소
Home
http://localhost:3000
Type s + enter at any time to create a snapshot of the database
Watching...
위에서 json-server를 설치하여 구동까지 완료되었습니다.
아래부터는 json-server를 구동한 상태에서 데이터 조회, 생성, 수정, 삭제를 알아보고자 합니다.
fetch api를 이용하면 필요할 때 서버에 요청을 보내고 정보를 받아오는 일을 할 수 있습니다.
첫 번째 파라미터 : 접근할 URL
두 번째 파라미터 : 옵션
fetch('http://localhost:3000/posts')
.then((response) => response.json())
.then((data) => console.log(data));
fetch('http://localhost:3000/posts')
데이터를 정상적으로 받아오면 then()안의 함수가 실행됩니다.
.then((response) => response.json())
fetch는 promise를 포함하고 있어 서버로 받은 응답을 response파라미터로 받습니다. response 안에는 응답코드, 응답메시지 등의 정보를 담고 있습니다.
response.json()은 받아온 json 데이터를 사용할 수 있도록 객체 형태로 변환합니다.
(JSON.parse()와 동일한 기능입니다)
.then((json) => console.log(json));
json 데이터를 마지막 then()에서 출력합니다.
function postData() {
const data = { title: "javaScript", author: "Mike" };
fetch("http://localhost:3000/posts", {
method: "POST",
body: JSON.stringify(data),
headers: headers = {
"content-type": "application/json;charset=UTF-8"
},
}).then((response) => response.json()).then((json) => console.log(json))
}
생성할 데이터를 미리 변수에 담아 놓습니다. (const data = { title: "javaScript", author: "Mike" };)
첫 번째 파라미터에 주소가 입력되고,
데이터를 생성하기 위해 두 번째 파라미터로 옵션을 입력해야 합니다.
데이터를 생성하기 위해서는 method에 POST를 입력합니다.
body에는 보낼 데이터를 입력합니다.
데이터를 전송하려면 JSON.stringify(data)를 이용해 문자열로 변환 후 전송합니다.
생성할 데이터 타입이 json이므로 headers에는 content-type이 application/json이 되고 인코딩 방식은 전 세계 언어를 지원하는 charset=UTF-8을 사용합니다.
실제로 코드 실행 시 1번 인덱스에 데이터가 생성된 것을 확인할 수 있습니다.
function putData() {
const data = { title: "fetch api", author: "john" };
fetch("http://localhost:3000/posts/2", {
method: "PUT",
body: JSON.stringify(data),
headers: headers = {
"content-type": "application/json;charset=UTF-8"
}
}).then(response => response.json()).then(json => console.log(json))
}
수정할 데이터를 미리 변수에 담아 놓습니다. (const data = { title: "fetch api", author: "john" };)
fetch("http://localhost:3000/posts/2" 수정할 id 값을 주소 마지막에 입력합니다.
데이터를 수정하기 위해서 method에 PUT를 입력합니다.
실제로 코드 실행 시 id값이 2인 title 값과 author 값이 변경된 것을 확인할 수 있습니다.
function deleteData() {
fetch("http://localhost:3000/posts/2", {
method: "DELETE"
}).then(response => response.json()).then(json => console.log(json))
}
fetch("http://localhost:3000/posts/2" 삭제할 id 값을 주소 마지막에 입력합니다.
데이터를 삭제하기 위해서 method에 DELETE를 입력합니다.
실제로 코드 실행 시 id값이 2인 데이터가 삭제된 모습을 확인할 수 있습니다.
여기까지 json-server를 설치하고 fetch api를 이용해 간단한 데이터 조작까지 알아보았습니다.
실제 서버 api 주소가 없더라도 가상 서버인 json-server를 이용해 미리 코드를 구현하고 실제 api 주소를 전달받으면 주소만 교체하여 일을 효율적으로 처리할 수 있게 됩니다.
여기까지 저의 글을 읽어주셔서 감사합니다.
- tistory의 접속오류로 velog에 올린 글입니다.
실제 블로그를 운영하고 있는 곳은 tistory이므로 위의 내용은 아래 주소에 동일한 주제로 작성되어있습니다.
https://express.tistory.com/m/7
- 현재 22년 10월 17일 20시 52분, 모든 tistory 글이 모바일글로만 확인할 수 있도록 되어 있습니다.