REST API
서로 다른 프로그램이 인터넷으로 데이터를 주고받을 수 있도록 정해진 규칙으로 소통하는 방식입니다.
같은 말:RESTful APIREST
목차
🤔 혹시 이런 경험 있나요?
AI에게 "날씨 앱 만들어줘"라고 했더니 코드에 fetch('https://api.weather.com/...')이 보입니다. 또는 OpenAI를 사용하려면 "API 키를 발급받으세요"라는 안내가 나옵니다. API라는 단어는 바이브코딩을 하면 거의 매번 마주치는데, 도대체 이게 뭘까요?
🍽️ 레스토랑으로 이해하는 API
레스토랑에서 식사를 주문하는 상황을 생각해보세요.
- 손님(여러분의 앱): 까르보나라를 먹고 싶습니다.
- 웨이터(API): 손님의 주문을 받아 주방에 전달합니다.
- 주방(서버): 실제로 음식을 만들어서 웨이터에게 건네줍니다.
- 메뉴판(API 문서): 주문할 수 있는 것들과 방법이 적혀 있습니다.
손님은 주방에 직접 들어갈 수 없습니다. 대신 웨이터(API)에게 정해진 방식으로 요청하면, 원하는 결과를 받을 수 있습니다. API도 마찬가지입니다. 여러분의 프로그램이 다른 서비스에 직접 접근할 수 없지만, 정해진 규칙(API)으로 데이터를 요청하고 응답받을 수 있습니다.
📬 HTTP 메서드: 요청의 종류
API에 요청을 보낼 때는 "무엇을 하고 싶은지"를 함께 알려야 합니다. 이것을 HTTP 메서드라고 합니다.
| 메서드 | 의미 | 레스토랑 비유 |
|---|---|---|
| GET | 데이터를 가져옵니다 | "메뉴판 보여주세요" |
| POST | 새 데이터를 보냅니다 | "이 메뉴로 주문할게요" |
| PUT | 기존 데이터를 수정합니다 | "주문 변경할게요" |
| DELETE | 데이터를 삭제합니다 | "주문 취소해주세요" |
바이브코딩에서 AI가 생성한 코드를 보면 이런 구조를 자주 만나게 됩니다.
// GET: 사용자 목록 가져오기
fetch('https://api.example.com/users')
// POST: 새 게시글 작성하기
fetch('https://api.example.com/posts', {
method: 'POST',
body: JSON.stringify({ title: '제목', content: '내용' })
})본문 개념을 설명하는 학습용 예시입니다. 실제 서비스 화면이 아닙니다. API마다 요청 형식과 인증 조건이 다릅니다.
📦 JSON: API가 사용하는 언어
API끼리 데이터를 주고받을 때는 대부분 JSON(JavaScript Object Notation) 형식을 사용합니다. 사람도 읽을 수 있고, 컴퓨터도 이해할 수 있는 텍스트 형태입니다.
{
"name": "홍길동",
"email": "hong@example.com",
"age": 28
}중괄호 {} 안에 "키": "값" 형태로 데이터가 들어 있습니다. AI에게 "유저 정보를 JSON으로 보내줘"라고 하면, 이런 형태의 데이터를 만들어줍니다.
🔑 API 키: 왜 항상 필요할까요?
바이브코딩을 하다 보면 OpenAI, Google Maps, Supabase 등 외부 서비스를 사용할 때마다 API 키를 요구받습니다. API 키는 레스토랑의 예약 번호와 같습니다.
- 누가 요청했는지 확인합니다 (인증)
- 얼마나 사용했는지 추적합니다 (사용량 관리)
- 남용을 방지합니다 (보안)
API 키 없이 요청하면 서버는 "누가 보낸 요청인지 알 수 없으니 거부합니다"라고 응답합니다. 그래서 AI가 만들어준 코드에 OPENAI_API_KEY 같은 환경 변수가 항상 등장하는 것입니다.
⚠️ 바이브코딩할 때 흔한 API 실수
1. API 키를 코드에 직접 넣는 실수
// 절대 이렇게 하면 안 됩니다
const apiKey = 'sk-abc123...'
// 환경 변수를 사용하세요
const apiKey = process.env.OPENAI_API_KEYAPI 키를 코드에 그대로 적으면 GitHub에 올렸을 때 전 세계에 공개됩니다. 반드시 환경 변수(.env 파일)에 보관해야 합니다.
2. 에러 응답을 무시하는 실수
API는 항상 상태 코드를 함께 보내줍니다.
- 200: 성공입니다.
- 401: 인증 실패입니다. API 키가 잘못되었을 수 있습니다.
- 404: 요청한 데이터가 없습니다.
- 429: 요청을 너무 많이 보냈습니다 (속도 제한).
- 500: 서버 쪽 문제입니다.
AI가 만든 코드에서 에러가 나면, 먼저 이 상태 코드를 확인해보세요. 대부분의 문제 원인을 파악할 수 있습니다.
3. REST API의 URL 구조를 모르는 실수
REST API는 URL 자체가 데이터의 위치를 나타냅니다.
GET /users → 전체 사용자 목록
GET /users/123 → 123번 사용자 정보
POST /users → 새 사용자 생성
GET /users/123/posts → 123번 사용자의 게시글 목록URL만 봐도 "어떤 데이터에 접근하는지"를 알 수 있도록 설계하는 것이 REST API의 핵심 원칙입니다.
💼 실무에서 API를 실감하는 상황
광고 성과 대시보드가 멈췄을 때
여러 광고 플랫폼의 성과를 한 화면에 모아주는 대시보드는 각 플랫폼의 API로 데이터를 받아옵니다. 어느 날 특정 채널 데이터만 안 들어온다면, 대부분 API 키 만료나 권한 변경이 원인입니다. "API 연동이 끊겼다"라는 말이 무슨 뜻인지 알면, 담당자에게 "키를 재발급해서 다시 연결해달라"라고 정확히 요청할 수 있습니다.
AI 기능을 앱에 붙일 때
챗봇이나 자동 요약 기능을 만들려면 OpenAI 같은 서비스의 API 키를 발급받아 환경 변수에 넣는 과정을 거칩니다. 사용량에 따라 비용이 청구되고, 요청이 몰리면 429(속도 제한) 에러를 만나게 됩니다. 이 구조를 알면 "왜 키가 필요한지", "왜 갑자기 응답이 안 오는지"를 스스로 파악할 수 있습니다.
노코드 자동화 툴을 쓸 때
Zapier나 Make로 "폼 제출이 오면 슬랙에 알림 보내기" 같은 자동화를 만들 때도, 내부에서는 각 서비스의 API가 호출됩니다. 자동화가 실패하면 실행 로그에 401, 404 같은 상태 코드가 남는데, 이 숫자를 읽을 줄 알면 인증 문제인지 주소 문제인지 바로 구분할 수 있습니다. 요청을 보내는 쪽과 처리하는 쪽의 역할 구분은 프론트엔드와 백엔드 클래스에서 자세히 다룹니다.
📋 3줄 요약
-
REST API는 서로 다른 프로그램이 인터넷으로 데이터를 주고받도록 정해 둔 요청과 응답의 규칙입니다.
-
요청에는 가져오는 GET과 새로 보내는 POST, 고치는 PUT, 지우는 DELETE 네 가지 메서드를 쓰고 데이터는 대개 JSON으로 오갑니다.
-
API 키는 누가 얼마나 썼는지 확인하는 값이라 코드에 직접 적지 않고 응답 코드가 200이면 성공이고 401이면 인증 실패입니다.

제대로 이해했는지 한 문제로 확인해 볼까요?
답을 고르면 바로 풀이가 나와요.
바이브코딩으로 만든 앱에서 외부 서비스(예: OpenAI)에 데이터를 보내 새로운 결과를 생성하려고 합니다. 이때 사용하는 HTTP 메서드는 무엇일까요?

