[JavaScript] fetch API: 현대 HTTP 클라이언트
js-fetch, fetch API, fetch, Response, Request
정의
fetch 는 Promise 기반의 표준 HTTP 클라이언트. XMLHttpRequest (2000) 를 대체.
기본 사용
const res = await fetch('/api/users');
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const users = await res.json();
POST + JSON
await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'Alice' }),
});
함정 1: 4xx/5xx 는 reject 안 함
404, 500 도 fetch 는 성공 으로 봄. 반드시 res.ok 또는 res.status 검증.
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
함정 2: 스트리밍
응답 body 는 한 번만 소비 가능. .json(), .text(), .arrayBuffer() 중 하나만.
여러 번 필요하면 clone:
const res = await fetch(url);
const text = await res.clone().text();
const json = await res.json();
취소
const ctl = new AbortController();
fetch(url, { signal: ctl.signal });
setTimeout(() => ctl.abort(), 5000);
타임아웃
fetch(url, { signal: AbortSignal.timeout(5000) });
참고
- 관련 AbortController
- 관련 Promise
- 관련 HTTP/1.1
이 글의 용어 (3개)
- [JavaScript] AbortController: 비동기 취소javascript
- 정의 는 비동기 작업 (fetch, event listener 등) 을 취소 하기 위한 표준 인터페이스. 기본 사용 이벤트 리스너 취소 같은 signal 을 재사용해 여러 리스너…
- [Javascript] Promisejavascript
- 정의 Promise 는 미래의 어떤 시점에 결정될 값을 나타내는 객체다. ECMAScript 2015 (ES6) 에 도입되어 기반 비동기의 가독성과 에러 처리 문제를 해결했다. …
- [Network] HTTP/1.1: keep-alive, pipelining, chunked transfernetwork
- 정의 HTTP/1.1 (1997, RFC 9112 으로 재정리) 는 텍스트 기반 stateless request/response 프로토콜. 2026 시점에도 대부분의 트래픽이 H…
💬 댓글