Day 3 — API 설계: 화면과 서버는 어떻게 대화하나
오늘의 목표
- API가 "화면과 서버 사이의 주문서"라는 걸 이해한다
- REST 방식으로 엔드포인트(주소)를 설계할 수 있다
- 내 프로젝트의 API 명세서 초안을 작성해서 나간다
준비물: Day 2에 만든 ERD 초안
0. 복습 — 지난 시간 우리는
지난 시간에 "무엇을 저장할지"(테이블, 관계)를 설계했습니다. 오늘은 그 저장된 데이터를 "어떻게 꺼내고 넣을지" 의 통로를 만듭니다.
ERD가 창고의 선반 배치도였다면, 오늘 만드는 API는 창고와 손님 사이의 주문 창구입니다.
1. API란? — 식당 비유로 이해하기
API = 화면(손님)이 서버(주방)에 무언가를 요청하는 정해진 방법
식당을 떠올리세요.
- 손님(프론트엔드): "비빔밥 하나요" 라고 주문
- 메뉴판(API 명세): 무엇을 주문할 수 있는지 적힌 목록
- 주방(백엔드/서버): 주문을 받아 음식을 만들어 내보냄
- 음식(응답 데이터): 손님에게 돌아오는 결과
손님은 주방이 어떻게 요리하는지 몰라도 됩니다. 메뉴판(정해진 약속) 대로 주문하면 음식이 나옵니다. 이 "메뉴판"이 바로 API입니다.
💡 우리 프로젝트에서 프론트는 바이브코딩(AI)으로 만들지만, 이 메뉴판을 여러분이 정확히 설계해야 AI에게 "이 주소로 이런 요청을 보내는 코드를 짜줘"라고 시킬 수 있습니다.
2. HTTP 메서드 — 요청의 4가지 종류
데이터로 할 수 있는 일은 결국 4가지뿐입니다. (Day 2의 CRUD 기억나시죠?)
| 메서드 | 하는 일 | CRUD | 식당 비유 |
|---|---|---|---|
GET | 조회 (읽기) | Read | 메뉴 구경 |
POST | 생성 (만들기) | Create | 새 주문 넣기 |
PUT / PATCH | 수정 (바꾸기) | Update | 주문 변경 |
DELETE | 삭제 (지우기) | Delete | 주문 취소 |
💡
PUT은 전체 교체,PATCH는 일부만 수정입니다. 처음엔PATCH를 주로 쓴다고 생각하면 편합니다.
3. REST — 주소를 짓는 규칙
API 주소(엔드포인트)를 아무렇게나 지으면 나중에 본인도 헷갈립니다. REST는 주소를 일관되게 짓는 약속입니다.
핵심 원칙 3가지
① 주소는 "명사"로, 동사는 메서드로
❌ 나쁜 예: /getTodos , /createTodo , /deleteTodo
✅ 좋은 예: GET /todos , POST /todos , DELETE /todos/1
무엇을 할지(가져오기/만들기/지우기)는 메서드가 표현하니, 주소엔 대상(todos)만 씁니다.
② 복수형 명사 사용
✅ /todos /users /comments (O)
❌ /todo /user /getUser (X)
③ 특정 하나는 id로 지정
GET /todos → 할 일 전체 목록
GET /todos/1 → 1번 할 일 하나
PATCH /todos/1 → 1번 할 일 수정
DELETE /todos/1 → 1번 할 일 삭제
관계가 있는 데이터의 주소
Day 2에서 "사용자 1명 → 할 일 여러 개"(1:N) 관계를 만들었죠. 주소로는 이렇게 표현합니다.
GET /users/1/todos → 1번 사용자의 할 일 목록
4. 요청과 응답 — 무엇을 주고받나
API 한 줄은 요청(보내는 것) 과 응답(받는 것) 으로 이뤄집니다.
예시: 할 일 만들기
요청 (프론트 → 서버)
POST /todos
{
"title": "장보기",
"due_date": "2026-01-15"
}
응답 (서버 → 프론트)
201 Created
{
"id": 5,
"title": "장보기",
"is_done": false,
"due_date": "2026-01-15",
"user_id": 1
}
상태 코드 — 응답의 "결과 신호"
서버는 숫자로 결과를 알려줍니다. 자주 보는 것만:
| 코드 | 뜻 |
|---|---|
200 | 성공 (조회·수정) |
201 | 생성 성공 |
400 | 요청이 잘못됨 (입력값 오류) |
401 | 로그인 안 됨 |
403 | 권한 없음 |
404 | 찾는 게 없음 |
500 | 서버 에러 (코드 버그) |
💡
4xx는 "네(손님) 잘못",5xx는 "내(서버) 잘못"이라고 외우면 쉽습니다.
5. 실습 — 내 프로젝트 API 명세서 작성
ERD의 각 테이블마다 보통 CRUD 5종 세트가 나옵니다. 아래 표를 채우세요.
🛠 실습 템플릿
# 내 프로젝트 API 명세서 v0.1
## [리소스명: ______] 예) todos
| 메서드 | 주소 | 하는 일 | 로그인 필요? |
|--------|------|---------|-------------|
| GET | /______ | 목록 조회 | |
| GET | /______/:id | 하나 조회 | |
| POST | /______ | 생성 | |
| PATCH | /______/:id | 수정 | |
| DELETE | /______/:id | 삭제 | |
## 주요 요청/응답 예시 (POST 1개만이라도)
요청:
POST /______
{
"____": "____",
}
응답:
201 Created
{
"id": 1,
...
}
✍️ 막힐 때 보세요
API가 몇 개나 필요하죠? → 테이블 1개당 CRUD 5개가 기본입니다. 테이블 3개면 약 15개. 다 만들 필요 없고, 핵심 기능에 쓰이는 것부터 설계하세요.
로그인 같은 건 어느 메서드죠?
→ 로그인은 "세션을 생성"하는 거라 보통 POST /auth/login 으로 둡니다. 인증은 Day 9에서 자세히 다룹니다.
쿼리로 거르는 건요? (검색·필터)
→ 주소 뒤에 ?로 붙입니다. 예: GET /todos?is_done=false (완료 안 된 것만). 지금은 몰라도 됩니다.
6. 오늘의 체크리스트
- API가 "화면과 서버의 약속된 주문 방법"임을 이해했다
- GET/POST/PATCH/DELETE의 역할을 구분할 수 있다
- REST 주소 규칙(명사·복수형·id)을 안다
- 상태 코드 200/201/400/401/404/500의 뜻을 안다
- 내 프로젝트 API 명세서 초안을 작성했다 ← 가장 중요!
7. 다음 시간 예고
Day 4 — Git/GitHub + 개발환경 세팅
- 드디어 실제 코드를 작성할 환경을 갖춥니다
- Git 협업 플로우 / GitHub 저장소 생성 / 프로젝트 초기 세팅
- 준비물: 지금까지 만든 명세서 + ERD + API 명세
📌 숙제: API 명세서에서 "이번 첫 스프린트에 실제로 만들 API 3개"에 ⭐ 표시해 오세요.
API 명세서는 프론트와 백엔드가 따로 일해도 만나는 지점입니다. 이 메뉴판이 정확하면 AI에게 시키는 것도 명확해집니다. 📋