수련  ›  중급 — 서비스로 확장  ›  CH2 / 4
중급 — 서비스로 확장 ⏱ 14분 +190 XP

API 호출 기초

fetch로 서버에서 데이터를 받아오고, JSON을 다루고, API 키를 안전하게 보관하는 기본기를 익힙니다.

정적 사이트는 미리 만들어 둔 내용만 보여줍니다. 하지만 날씨, 환율, 게시글 목록처럼 "매번 달라지는 데이터"를 보여주려면 다른 서버에 "이 정보 좀 줘"라고 요청해야 합니다. 이 요청 창구가 바로 API이고, 브라우저에서 가장 많이 쓰는 도구가 fetch입니다. 이번 챕터에서는 fetch로 데이터를 받아 JSON으로 다루고, 키를 노출하지 않는 법까지 봅니다.

fetch로 데이터 받아오기

fetch는 주소(URL)로 요청을 보내고, 응답이 도착하면 처리하는 함수입니다. 네트워크는 즉시 끝나지 않으므로 fetch는 비동기로 동작합니다. 그래서 await로 "응답이 올 때까지 기다린다"고 표현합니다.

async function loadUsers() {
  const res = await fetch('https://api.example.com/users');
  if (!res.ok) {
    throw new Error('요청 실패: ' + res.status);
  }
  const data = await res.json(); // 본문을 JSON으로 변환
  console.log(data);
}
loadUsers();
fetch는 응답을 두 단계로 받습니다. 먼저 fetch()가 응답 객체(헤더, 상태코드)를 주고, 다음 res.json()이 본문을 실제 데이터로 변환합니다. 둘 다 await가 필요합니다.

응답 상태와 JSON 다루기

초보자가 가장 자주 하는 오해가 "fetch가 에러 없이 끝났으니 성공이다"입니다. 사실 서버가 404나 500을 돌려줘도 fetch 자체는 성공으로 봅니다. 그래서 반드시 res.ok 또는 res.status를 직접 확인해야 합니다.

status의미
200정상
401 / 403인증 실패 / 권한 없음
404없는 주소
429요청이 너무 많음
500서버 내부 오류

응답으로 받은 JSON은 그냥 텍스트가 아니라 자바스크립트 객체로 변환된 상태입니다. 점 표기로 값을 꺼내면 됩니다.

const data = await res.json();
// { "name": "민지", "items": [1, 2, 3] }
console.log(data.name);        // 민지
console.log(data.items.length); // 3
data.items.forEach(n => console.log(n));

API 키를 안전하게

많은 API는 신원을 확인하려고 API 키를 요구합니다. 여기서 결정적인 보안 원칙이 있습니다.

브라우저(프론트엔드) 자바스크립트에 비밀 키를 그대로 적으면, 누구나 개발자도구 → 네트워크 탭에서 그 키를 볼 수 있습니다. 비밀 키는 절대 클라이언트 코드에 넣지 않습니다.
  • 비밀 키 — 서버(백엔드)에 보관하고, 브라우저는 내 서버에만 요청합니다. 내 서버가 대신 외부 API를 호출하고 키를 끼워 넣습니다.
  • 환경변수 — 키를 코드가 아니라 .env 같은 환경변수에 두고, 그 파일은 .gitignore로 Git에 올라가지 않게 막습니다.
  • 공개 키 — 일부 키는 도메인 제한이 걸린 "노출돼도 되는" 키입니다. 이 둘을 혼동하지 마세요.
# .gitignore 에 추가
.env

# .env 파일 (Git에 올리지 않음)
API_KEY=비밀값여기에
실수로 키를 한 번이라도 commit해서 push했다면, 그 키는 이미 노출된 것으로 보고 즉시 폐기·재발급하세요. 나중에 파일을 지워도 Git 기록에는 남아 있습니다.

정리하면 fetch로 요청하고, res.ok로 성공 여부를 확인하고, res.json()으로 데이터를 꺼내며, 비밀 키는 절대 브라우저에 두지 않습니다. 이 네 가지가 API를 안전하게 쓰는 출발점입니다.

이해도 퀴즈

정답 3개 이상 → +190 XP

배운 내용을 확인해 보세요. 4문항 중 60% 이상 맞히면 챕터가 완료되고 경험치가 적립됩니다.

Q1.fetch로 요청한 뒤 서버가 404를 돌려줬습니다. 이때 fetch는 어떻게 동작할까요?
Q2.외부 API의 비밀 키를 다뤄야 할 때 올바른 방법은?
Q3.fetch로 받은 응답의 본문을 자바스크립트 객체로 변환하는 코드는?
Q4.API 키가 적힌 .env 파일이 Git 저장소에 올라가지 않게 하려면?