Next.js에서 제공하는 App Router는 기본적으로 Fetch API를 확장해서 제공합니다.
<aside>
서버 컴포넌트의 자동 캐싱 제어
cache 옵션을 통해 Next.js Data Cache와 상호작용 설정태그 기반 캐시 관리
next.tags 옵션으로 캐시에 태그 지정revalidateTag로 필요할 때 즉시 재검증 수행재검증 관리
next.revalidate 옵션으로 효율적인 캐시 수명 제어
</aside>Axios와 같은 Fetch API 외 라이브러리로 데이터를 가져올 경우, 위 기능들을 직접 구현해야 합니다. 반면 Fetch API를 사용하면 기능적 통합, 서버 컴포넌트 호환성, 빌드 타임 최적화 등의 이점이 있습니다. 따라서 App Router 환경에서는 Fetch API를 기본으로 사용하고 필요한 Axios의 편의 기능을 추가 구현하는 것이 더 효율적이라고 판단했습니다.
Trablock 프로젝트에서 사용할 백엔드 API를 효율적으로 구현하기 위해 다음과 같은 기능와 조건을 가진 라이브러리가 필요했습니다.
<aside>
여러 라이브러리를 검토한 결과 후보로 ofetch와 return-fetch가 있었습니다.
<aside>
자체적으로 제공하는 기능은 ofetch가 더 다양하지만 프로젝트에서 요구하는 기능이 많지 않고, 또한 필요한 기능을 직접 추가하고자 했기 때문에 위 근거를 통해 return-fetch를 선택했습니다.
프로젝트 API를 구축하며 추가하고자 한 기능이 5가지 있습니다.
<aside>
요청 시 body 타입에 따른 Content-Type 자동 지정
요청 시 json 형식 body 자동 처리
응답 시 Content-Type에 따라 body 자동 처리
각 Methods 래핑
Fetch API Response 타입 제네릭 지원