본문으로 건너뛰기
김신건의 로그

[JavaScript] fetch API: 현대 HTTP 클라이언트

· 수정 · 📖 약 1분 · 122자/단어 #javascript #http #network #fetch
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();

취소

AbortController 로:

const ctl = new AbortController();
fetch(url, { signal: ctl.signal });
setTimeout(() => ctl.abort(), 5000);

타임아웃

fetch(url, { signal: AbortSignal.timeout(5000) });

참고

이 글의 용어 (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…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기