티스토리 뷰
반응형
React + API 통신 완전 정복 – fetch와 Axios 비교
React로 실전 앱을 만들기 시작하면 반드시 마주치는 주제가 있습니다.
바로 API 통신입니다.
데이터를 가져오려면 어떻게 해야 하나요?
fetch와 Axios, 뭐가 다른가요?
로딩 중 처리와 에러 처리는 어떻게 하나요?
이번 글에서는 fetch와 Axios의 차이점,
그리고 실무에서 자주 쓰이는 API 호출 패턴, 로딩/에러 처리법까지
React에서의 API 통신을 완전히 이해할 수 있도록 안내합니다.
✅ React에서 API를 호출하는 방법
대표적인 방식은 아래 두 가지입니다:
- fetch – 브라우저 내장 API
- axios – 별도 설치하는 외부 라이브러리 (기능 풍부)
🔹 fetch 기본 사용법
useEffect(() => {
fetch("https://api.example.com/data")
.then((res) => res.json())
.then((data) => setData(data))
.catch((err) => setError(err));
}, []);
✅ 브라우저 기본 제공
✅ then 체인 방식으로 결과 처리
⚠️ 에러 핸들링이 다소 불편
🔹 axios 기본 사용법
import axios from "axios";
useEffect(() => {
axios
.get("https://api.example.com/data")
.then((res) => setData(res.data))
.catch((err) => setError(err));
}, []);
✅ 자동으로 JSON 파싱
✅ 요청/응답 인터셉터, 헤더 설정 등 풍부한 기능
✅ 실무에서 더 많이 사용됨
🧱 비교 표: fetch vs axios
항목 fetch axios
JSON 자동 파싱 | ❌ 수동 처리 필요 | ✅ 자동 |
---|---|---|
요청 취소 | ❌ AbortController 필요 | ✅ 기본 지원 (CancelToken) |
응답 인터셉터 | ❌ 직접 구현 | ✅ 내장 기능 |
에러 메시지 일관성 | ❌ 상태코드별 수동 처리 | ✅ 자동 처리 가능 |
사용 편의성 | 기본은 쉬움 | 고급 기능은 axios 우위 |
🔄 로딩 & 에러 처리 패턴 (공통 구조)
function DataLoader() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
axios.get("https://api.example.com/data")
.then((res) => setData(res.data))
.catch((err) => setError(err))
.finally(() => setLoading(false));
}, []);
if (loading) return;
if (error) return
에러 발생: {error.message};
return {JSON.stringify(data, null, 2)};
}
✅ loading, error, data를 나눠서 관리하는 것이 가장 흔한 패턴입니다.
✨ 실전 팁
반응형
- useEffect는 마운트 시 한 번만 실행 ([] 의존성 배열)
- finally를 활용해 로딩 종료 처리
- axios.create()로 공통 API 인스턴스 설정 권장
export const api = axios.create({
baseURL: "https://api.example.com",
timeout: 5000,
});
🚀 실전 예제: 사용자 목록 가져오기
function UserList() {
const [users, setUsers] = useState([]);
useEffect(() => {
api.get("/users").then((res) => setUsers(res.data));
}, []);
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
🧠 오늘의 요약
개념 설명
fetch | 브라우저 내장, 기본 기능만 있음 |
---|---|
axios | 기능이 풍부하고 실무에 적합 |
상태 분리 | data, loading, error를 별도 관리 |
공통 API 설정 | axios.create()로 공통 설정 가능 |
비동기 처리 위치 | useEffect 안에서 실행하는 것이 일반적 |
🧪 실습 과제
- useEffect를 사용해 외부 API 호출 후 리스트 렌더링 구현
- 로딩 상태와 에러 메시지를 각각 조건부 렌더링
- axios.create()로 공통 API 객체를 만들고 적용해보기
📌 다음 글 예고
👉 React 컴포넌트 상태 관리 라이브러리 비교 – Context vs Redux vs Zustand
- 언제 어떤 상태 관리 툴을 써야 할까?
- 전역 상태 구조 설계 패턴
- 실제 프로젝트에서의 선택 기준
React API 호출, React axios 사용법, fetch vs axios, React useEffect API, React 비동기 처리, React 로딩 상태, React 에러 핸들링, React 데이터 요청, React API 통신 구조, axios 실전 패턴
'framework > React' 카테고리의 다른 글
React 프로젝트에 TypeScript 도입하기 – 실전 마이그레이션 가이드 (0) | 2025.04.17 |
---|---|
React 상태 관리 라이브러리 비교 – Context vs Redux vs Zustand (0) | 2025.04.16 |
React + React Router로 싱글 페이지 앱(SPA) 만들기 (0) | 2025.04.14 |
React 앱 구조 설계 Best Practice – Atomic Design 적용법 (0) | 2025.04.12 |
컴포넌트 성능 최적화 – memo, useMemo, useCallback 총정리 (0) | 2025.04.11 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gatsbyjs
- nodejs
- seo 최적화 10개
- NestJS
- AI 자동화
- AI챗봇
- 개발블로그
- 관리자
- REACT
- Docker
- Next.js
- SEO최적화
- Webpack
- 스마트 컨트랙트
- 백엔드개발
- fastapi
- 웹개발
- llm
- SEO 최적화
- CI/CD
- 프론트엔드
- rag
- nextJS
- PostgreSQL
- github
- Prisma
- kotlin
- App Router
- LangChain
- Ktor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형