Next.js 14에서 Fetch를 사용하는 이유와 그 한계, 그리고 커스텀 Fetch 함수를
구현하는 방법에 대한 포스팅입니다.
일반적으로 데이터 패칭을 할 때 Axios를 많이 사용합니다.
Axios는 응답에 대한 자동 파싱, 인터셉터를 제공하며 직관적으로 사용할 수 있기 때문에 많이 사용되며, 저 또한 많은 프로젝트에서 Axios를 활용해왔습니다.
하지만 Next.js는 표준 Fetch 함수를 사용하는 것을 권장하고 있습니다. Next.js 공식문서 참고
그 이유는 웹 표준인 Fetch가 Axios보다 더 가볍고, Next.js 서버에서 제공하는 캐시 관련 기능을 자연스럽게 활용할 수 있기 때문입니다. Axios를 사용할 경우 직접 캐싱에 관련한 설정을 해줘야 하는 불편함이 있습니다. 또한, 서버 사이드 렌더링(SSR) 과정에서 Fetch의 기본 기능을 활용하면 추가적인 설정 없이도 효율적인 데이터 패칭이 가능합니다.
현 상황에서 렌더링을 서버에서 수행하는 과정이 많아진 만큼, 굳이 Axios를 사용해야 할 이유가 줄어들었습니다.
하지만 Fetch는 이런 점이 아쉽습니다.
Fetch는 매번 코드를 작성할 때 보일러플레이트 코드가 존재합니다.
위와 같이 기본적인 Fetch 사용 시, 매번 base URL을 포함한 전체 주소를 적어야 하고, HTTP 메서드, 헤더 설정, JSON 직렬화 및 오류 처리 등 여러 가지 추가 작업이 필요합니다. 이러한 보일러플레이트 코드는 코드의 중복을 유발하고, 유지보수를 어렵게 만듭니다.
이런 부분을 해결하기 위해 커스텀 Fetch 함수를 만들었으며, 이를 공유하고자 합니다.
1. 1. 토큰 갱신 관리
2. 토큰 갱신
3. Fetch 요청 설정 및 실행
이러한 customFetch 함수는 다음과 같이 사용할 수 있습니다.
GET 요청 예시
POST, PUT, PATCH 요청 예시
DELETE 요청 예시
다음과 같이 사용할 때 useQuery, useMutation과 결합하면 더욱 더 강력하게 사용할 수 있습니다.
추가로 try, catch문을 활용하여 에러 핸들링에 대한 처리도 추가로 할 수 있습니다.
또한 RSC를 통한 SSR에서는 다음과 같이 사용할 수 있습니다.
이를 통해 fetch에서도 다양한 캐시 기능을 활용할 수 있으며 401 등의 에러를 처리할 수 있습니다.