백엔드와의 연결을 할 때, 가장 많이 쓰이는 Fetch와 Axios를 알아보려고 한다.
Fetch API는 JavaScript에서 HTTP 요청을 보내기 위한 내장함수이며, Promise 기반이다.
fetch() 함수는 get 요청이 디폴트이다.
fetch(url, options) // 기본구조
fetch('api 주소') // get 요청
.then((response) => response.json()) //우리가 필요한 json형식이 아니기 때문에 .json()을 사용
.then((data) => console.log(data)) //자바스크립트 객체형식
.catch((error) => console.error(error)) // 요청에 실패했을 때 error 출력
get 형식은 요청전문을 받지 않아 옵션 인자가 필요없다.
fetch('api 주소', {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Hello",
}),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error(error))
위의 예시는 post 형식이며, get 형식을 제외하고서는 위의 예시같이 method에 타입을 명시해줘야한다.
body에는 post에 보내는 데이터, header에는 json 형식의 사용을 알려주고 json으로 바꿔준다.
Axios는 브라우저와 node.js를 위한 JavaScript 라이브러리로, HTTP 요청을 실행한다. Axios 또한 Promise 기반이다.
npm install axios
yarn add axios
pnpm add axios
등을 이용해서 라이브러리를 설치해야함
import axios from 'axios';
사용하는 페이지에서도 import 해줘야 사용가능하다
axios.get('url')
.then((response) => console.log(response.data))
.catch(error => console.error(error));
get 요청방식이며, axios.get처럼 점표기법을 사용하면 된다.
axios.post('url,{
email,
password,});
내가 프로젝트를 진행하면서 유용하게 사용했던 Axios의 장점들이 있어서 정리할겸 남겨보려고 한다.
const instance = axios.create({
baseURL: "http://12.34.56.78/api",
timeout: 1000,
headers: {}
});
이런 식으로 custom 속성을 가진 instance를 만들 수 있다.
이게 어떻게 도움이 되냐면 만약 login작업을 할 때의 api 요청 주소가 "http://12.34.56.78/api/login"이라면,
instance.post('/login,{
email,
password,});
이런식으로 단축해서 사용할 수 있다.
api 요청에서 쿼리스트링을 사용할 때, Axios는 params를 이용해서 쉽게 전달할 수 있다.
내가 프로젝트를 진행할 때, 백엔드에서 ".../keywords/result/?keyword1=one&keyword2=two" 형식으로 요청을 해서 밑의 코드처럼 params를 이용해서 쿼리스트링을 넘겨줬다.
const res = await instance.get("/keywords/result/", {
params:{
keyword1: keywords.one,
keyword2: keywords.two,
}
});
setLoading(false);
return res.data;
}
그래서 어떤거 써야하는데? 라고 하면 각자 장단점이 존재한다고 한다.
fetch는 내장함수이기 때문에 axios와 다르게 별도의 라이브러리를 설치하지 않아도 된다.
반면에 axios는 여러 기능도 포함이 되어있고, 호환되는 브라우저도 많다고 한다.
팀의 결정에 따라 유동적으로 사용할 수도 있고, 선호도와 목적성에 따라 결정하는게 옳다고 생각된다. 다만 개인적으로 axios를 사용하는게 조금 더 편했던 것 같다.
아직 백엔드와의 연결을 경험해본 적이 없어 이해하긴 어렵지만 곧 진행될 프로젝트 트랙에서 유용하게 사용할 수 있을 것 같아요 !! 나중에 직접 구현하게 된다면 상민님의 블로그를 꼭 참고하겠습니다 🫡