TIL

TIL : json-server 환경 구축하고 axios를 이용하여 요청하기

오버브레이크 2024. 2. 22. 11:57
 json-server 

 

나는   프론트엔드 개발자이고  , 백엔드 쪽  DB 와 서버는  아직 구축 안되었다고 가정하자. 프론트는  다 구축되었다. 

그럴 때  나는  프론트단에서  패키지 하나만 설치하면   임시  데이터를 제공하는  서버를 설치한다. 그것이 바로 이 녀석

이다.

 

https://www.npmjs.com/package/json-server

 

json-server

> [!IMPORTANT] > Viewing alpha v1 documentation – usable but expect breaking changes. For stable version, see [here](https://github.com/typicode/json-server/tree/v0). Latest version: 1.0.0-alpha.23, last published: a month ago. Start using json-server in

www.npmjs.com

 

(1)  패키지 설치  

npm i json-server  # i : install 명령어이다.

 


 

(2) json-server  환경 구축하기

 

db.json 파일을   리액트 프로젝트의  루트 디렉토리에 추가해주자. 그리고  나는  다음과  같이  구조를  작성했다.

 

루트 디렉토리(리액트 프로젝트 최상위 디렉토리 ) 에 이렇게 추가

db.json 파일

// db.json

{
  "products": [
    { "id": 0, "name": "상품1", "price": 2000, "count": 0 },
    { "id": 1, "name": "상품2", "price": 2100, "count": 0 },
    { "id": 2, "name": "상품3", "price": 2200, "count": 0 }
  ]
}

 

json-server도  가상의  백엔드 api 서버이기 때문에..... 다른 포트에서 서버를 열어야 합니다.

vscode 터미널 열고  다음과 같이 실행합시다.

 

제가 포스팅해놓은  이거 참고하시기 바랍니다. 

https://devpost.tistory.com/100

 

json-server: command not found ERROR

에러사진 구글링 전에 json-server 가 있나 없나 보려고 버전 확인 명령어 해봄 => 없습니다!!! 그래서 다음과 같이 설치해줌 => 무엇인가 추가가 되더라 다시 해보았더니 에러가 발생 함 그래서 찾아

devpost.tistory.com

에러가 해결되었다면

json-server --watch db.json --port 4000

 

 

이렇게  뜨면 성공입니다.

 


 

 

 json-server에서 데이터를  불러오려면 어떻게 해야 할까?

 

react에서  이렇게   db 서버로부터 데이터를 불러올 수 있게  만든 것이 axios 라이브러리  입니다.

 

그러면 왜 fetch도 있는데 왜  안쓰는 것일까?   둘의 차이점을 살펴보자

 

 

※  차이점

 

1.  데이터   가져오기 

 

      fetch는  json 형식으로 자동변환이 안되서 .json() 으로 변환을  해주어야 됨

      axios는  그럴필요없음 , 데이터를 자동변환해줌

 

 

 

axios & fetch  를 이용해  서버로부터 데이터 받아오기

 

 fetch 

 요청을 받아왔다면 , json 형식으로 반환해야됩니다,

function App() {

   const [sampleData ,setSampleData ] = useState([])

  
   const getData = async () => {
    
    // 서버 URL로 요청으로부터 받아온 응답을 res에 저장
    const res = await fetch("http://localhost:4000/products")
    
    // 응답을 json으로 변환
    const jsonData = await res.json();
   
    // set함수를 이용하여 데이터를 저장
     setSampleData(jsonData)

     return jsonData;
  }

  
   useEffect(()=>{
       getData();
   })

 

axios 

 

그럴필요없이 자동으로 반환됩니다.

// axios를 이용해서 데이터를 이 서버 url에 리소스를 요청했어 
// then : 그게 성공하면 sampleData에 solve가 들어가고
  axios.get("http://localhost:4000/products").then((solve)=>{
      setSampleData(solve.data)
     // catch : 실패하면... 에러가 발생한다. 
  }).catch((error)=>{
    console.log(error)
  });
  
  // fetch때처럼 json형식으로 변환없이 자동반환됩니다!!

 

요청 결과 ( 성공 , 실패 )

 

  리소스를 받아오는데 성공할시.... 

 

 

리소스를 받아오는데  실패할시에

 

 

 

 

 

2.  라이브러리 설치 

 

axios - 설치해야됨...

// axios를 설치해서 
npm install axios 

// import를 해와야합니다. 
import axios from "axios"

 

fetch -   내장 라이브러리 입니다.

별도의  설치가 필요 없습니다.


 

여기서 우리는  
json-server 라는 패키지를 알아보았고
json-server로부터 요청을 해주는 
라이브러리  axios ,
내장 라이브러리 fetch 
에 대해 알아보았습니다!!!!