Next.js API 로직 공통화: fetch 기반 인터셉터와 훅 개선 사례
🤖 AI 추천
Next.js 프로젝트에서 API 통신 로직의 중복을 제거하고, 인증 토큰 관리 및 에러 처리를 효율적으로 개선하고자 하는 프론트엔드 개발자에게 이 콘텐츠를 추천합니다. 특히, fetch API를 사용하며 axios의 인터셉터와 유사한 기능을 구현하려는 개발자에게 유용한 인사이트를 제공할 것입니다.
🔖 주요 키워드

핵심 기술
Next.js 프로젝트에서 fetch API를 기반으로 API 로직을 공통화하고, 서버/클라이언트 환경 분기, 인증 토큰 관리, 에러 처리 로직을 개선하여 코드 중복을 제거하고 유지보수성을 높인 사례를 다룹니다.
기술적 세부사항
- API URL 공통화: 서버 컴포넌트, 클라이언트 컴포넌트, 테스트 환경(MSW) 등 다양한 환경에 따라
baseUrl
을 동적으로 설정하는buildURL
함수를 구현했습니다.process.env.NEXT_PUBLIC_API_MOCKING
및typeof window === 'undefined'
를 사용하여 환경별 분기 처리.addQueryParams
함수를 통해 쿼리 파라미터 추가.
- HTTP 헤더 관리:
buildHeaders
함수를 통해Content-Type
, 사용자 정의 헤더,Authorization
헤더를 자동으로 생성 및 병합했습니다.getCurrentToken()
함수로 클라이언트/서버 환경에 맞는 토큰 획득.
- 인증 토큰 갱신 (Interceptor 로직):
accessToken
만료 시refreshToken
기반으로 토큰을 갱신하고 이전 요청을 재실행하는refreshAccessToken
함수를 구현했습니다.Promise
를 공유하여 동시 요청 시 중복 갱신 방지.authContextRef
를 통해 인증 상태 동기화.
- 응답 및 에러 처리:
handleResponse
함수로 API 응답을 파싱하고, HTTP 상태 코드 및 응답 데이터에 따라 일관된ApiError
객체를 생성하여 반환합니다.response.json()
을 통한 데이터 파싱 및data
필드 추출.
- 커스텀 훅 및 서비스 로직 개선: API 호출 로직을 추상화하여
useAuth
context에 대한 의존성을 제거하고, 서비스 코드의 간결성을 높였습니다.useCreateRecords
훅에서accessToken
주입 로직 제거.- 서비스 코드 라인 수 평균 26줄에서 7줄로 감소.
개발 임팩트
- API 로직의 중복 제거 및 코드 가독성 향상.
- 인증 토큰 관리의 효율성 증대 및 보안 강화.
- 일관된 에러 처리 방식으로 디버깅 및 유지보수 용이성 개선.
- 테스트 코드 작성 용이성 증대.
- 서비스 코드의 간결화로 개발 생산성 향상.
톤앤매너
Next.js 프로젝트에서 fetch API를 효과적으로 활용하여 API 통신 계층을 추상화하고 개선하는 방법에 대한 전문적인 분석과 실무적인 해결책을 제시하는 톤앤매너를 유지합니다.
📚 관련 자료
TanStack Query
콘텐츠에서 언급된 TanStack Query (React Query)는 서버 상태 관리를 위한 강력한 라이브러리로, fetch API를 감싸거나 직접 사용하여 API 호출을 관리하는 데 핵심적인 역할을 합니다. 이 라이브러리의 활용은 콘텐츠의 API 로직 추상화 및 최적화와 직접적으로 연관됩니다.
관련도: 95%
Next.js
콘텐츠의 기반이 되는 프레임워크로, 서버 컴포넌트와 클라이언트 컴포넌트 간의 API 호출 로직 분기 및 관리가 주요 주제입니다. Next.js의 기능 이해는 해당 글의 맥락을 파악하는 데 필수적입니다.
관련도: 90%
axios
콘텐츠에서 fetch API를 사용하여 axios의 인터셉터 기능을 구현하는 과정을 다루고 있습니다. axios는 이러한 인터셉터 기능을 제공하는 대표적인 HTTP 클라이언트 라이브러리이므로, 비교 대상으로 언급되며 fetch 기반 구현의 필요성을 설명하는 데 관련이 깊습니다.
관련도: 70%