- Published on
fetch가 Next.js에서 선호되는 이유 그리고 차이점 등 서술 해보기
- Authors
- Name
- Hyo814
fetch
가 Next.js에서 선호되는 이유
1. a. 기본 내장 API
- fetch는 브라우저와 Node.js 환경에서 기본적으로 제공되는 API입니다. Next.js는 브라우저와 서버(SSR) 모두에서 작동하기 때문에, 추가적인 패키지 설치 없이 바로 사용 가능한
fetch
를 선호합니다.
b. SSR 환경과 호환성
- Next.js는 서버 측에서 데이터를 가져오는 기능(예:
getServerSideProps
,getStaticProps
)을 지원합니다.fetch
는 브라우저와 서버 환경 모두에서 동일한 방식으로 작동하기 때문에 Next.js의 SSR/SSG와 잘 통합됩니다.
c. 번들 크기 감소
axios
를 사용하면 프로젝트 번들 크기가 커질 수 있습니다.fetch
는 내장 API이기 때문에 번들 크기에 영향을 주지 않아 더 가벼운 애플리케이션을 만들 수 있습니다.
d. 표준화된 API
fetch
는 JavaScript의 표준 API로, 최신 브라우저와 Node.js 환경에서 기본적으로 지원됩니다. 표준을 따르는 것은 장기적인 유지보수성과 호환성 측면에서 유리합니다.
fetch
와 axios
의 주요 차이점
2. a. 기본 제공 여부
fetch
: 브라우저 및 Node.js에 내장된 API.axios
: 외부 라이브러리로 설치(npm install axios
) 필요.
b. 데이터 처리 방식
- fetch:
fetch
는 응답을 JSON으로 자동 변환하지 않습니다. 응답 데이터를 처리하려면.json()
메서드를 호출해야 합니다.const response = await fetch('/api/data') const data = await response.json()
- axios:
axios
는 응답 데이터를 자동으로 JSON으로 변환합니다.const { data } = await axios.get('/api/data')
c. HTTP 오류 처리
- fetch:
- HTTP 오류(예: 404, 500)가 발생해도 Promise가 reject되지 않습니다. 응답 객체의
ok
속성을 확인해야 합니다.const response = await fetch('/api/data') if (!response.ok) { throw new Error('HTTP error: ' + response.status) } const data = await response.json()
- HTTP 오류(예: 404, 500)가 발생해도 Promise가 reject되지 않습니다. 응답 객체의
- axios:
- HTTP 오류가 발생하면 Promise가 자동으로 reject됩니다.
try { const { data } = await axios.get('/api/data') } catch (error) { console.error(error.message) }
- HTTP 오류가 발생하면 Promise가 자동으로 reject됩니다.
d. 기능 확장
- axios:
- 기본적으로 요청 취소, 요청 및 응답 인터셉터, 기본 헤더 설정 등 추가 기능 제공.
- 복잡한 API 클라이언트 구축에 더 적합.
- fetch:
- 이런 기능을 사용하려면 직접 구현하거나 추가 라이브러리가 필요.
e. 브라우저 호환성
- fetch:
- 구형 브라우저(예: IE11)에서는 폴리필이 필요.
- axios:
- 구형 브라우저에서도 더 나은 지원 제공.
axios
를 사용하는 것이 더 나을까?
3. 언제 - 복잡한 요청 흐름: 요청 취소 기능(
CancelToken
), 응답/요청 인터셉터 사용이 필요한 경우. - 구형 브라우저 지원 필요: IE11 같은 구형 브라우저에서 작동해야 한다면,
axios
가 더 적합. - 반복되는 설정: 기본 URL, 헤더 설정이 자주 필요할 경우
axios
가 더 편리.
4. 결론
- Next.js에서는
fetch
가 기본적이고 효율적인 선택:- 내장 API로 번들 크기를 줄이고, SSR/SSG와 자연스럽게 통합되며, Node.js와 브라우저 환경 모두에서 표준적으로 작동하기 때문.
- 그러나 복잡한 HTTP 요청 로직이 필요하거나 기능 확장이 필요한 경우에는
axios
를 고려할 수 있습니다.