FastAPI - Response Status Code

KjjeddΒ·2026λ…„ 1μ›” 13일

FastAPI

λͺ©λ‘ 보기
10/16
post-thumbnail

🚦 Response Status Code

HTTP ν†΅μ‹ μ—μ„œ Status CodeλŠ” μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ³΄λ‚΄λŠ” β€œκ²°κ³Ό μ‹ ν˜Έβ€λ‹€.

μš°λ¦¬κ°€ μ‹λ‹Ήμ—μ„œ μ£Όλ¬Έν•˜λ©΄

  • β€œμ£Όλ¬Έ μ™„λ£Œμš”β€
  • β€œμž¬λ£Œκ°€ μ—†μ–΄μš”β€
  • β€œμž μ‹œλ§Œ κΈ°λ‹€λ €μ£Όμ„Έμš”β€

같은 말둜 상황을 μ „λ‹¬ν•˜λ“―, μ„œλ²„λ„ μš”μ²­ 처리 κ²°κ³Όλ₯Ό 숫자 μ½”λ“œλ‘œ μ•Œλ €μ€€λ‹€.


πŸ“‘ Status Codeλž€?

Status CodeλŠ” 3자리 숫자둜 κ΅¬μ„±λ˜μ–΄ 있으며, μš”μ²­μ΄ μ–΄λ–€ μƒνƒœλ‘œ μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

μ€‘μš”ν•œ 점은 이것이닀.

πŸ’‘ Status CodeλŠ” 응닡(Response)의 일뢀이며
Response Bodyμ™€λŠ” μ™„μ „νžˆ λ‹€λ₯Έ λ ˆμ΄μ–΄λ‹€

즉,

  • Response Body β†’ 데이터 λ‚΄μš©
  • Status Code β†’ 처리 κ²°κ³Ό μƒνƒœ

이 λ‘˜μ€ 항상 ν•¨κ»˜ μ›€μ§μ΄μ§€λ§Œ μ˜λ―ΈλŠ” μ „ν˜€ λ‹€λ₯΄λ‹€.


πŸ” FastAPIμ—μ„œ Status Code 직접 확인해보기

λ¨Όμ € κ°€μž₯ 기본적인 FastAPI μ½”λ“œλ₯Ό 보자.

from fastapi import FastAPI 
app = FastAPI() 
@app.get("/") 
async def read_root(): 
	return {"message": "Hello"}

이 APIλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ–΄λ–€ μƒνƒœ μ½”λ“œκ°€ λ‚˜μ˜¬κΉŒ?

βœ… 아무 섀정이 μ—†μœΌλ©΄ κΈ°λ³Έκ°’ 200 OKκ°€ λ°˜ν™˜λœλ‹€

μ΄λ²ˆμ—λŠ” μƒνƒœ μ½”λ“œλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•΄λ³΄μž.

@app.post("/items/", status_code=201) 
async def create_item(name: str): return {"name": name}

이 APIλŠ” λ‹€μŒμ„ μ˜λ―Έν•œλ‹€.

  • μš”μ²­ 성곡
  • μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€ 생성 μ™„λ£Œ

κ·Έλž˜μ„œ 201 Createdκ°€ λ°˜ν™˜λœλ‹€.


πŸ“– HTTP μƒνƒœ μ½”λ“œμ˜ 큰 λΆ„λ₯˜

HTTP μƒνƒœ μ½”λ“œλŠ” 첫 번째 μˆ«μžμ— 따라 μ˜λ―Έκ°€ λ‚˜λ‰œλ‹€.

λ²”μœ„ 의미 μ„€λͺ…
1xx 정보 μš”μ²­μ„ λ°›μ•˜κ³  처리 쀑
2xx 성곡 μš”μ²­μ΄ 정상 처리됨
3xx λ¦¬λ‹€μ΄λ ‰μ…˜ λ‹€λ₯Έ μœ„μΉ˜λ‘œ 이동 ν•„μš”
4xx ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜ μš”μ²­ μžμ²΄μ— 문제 있음
5xx μ„œλ²„ 였λ₯˜ μ„œλ²„ λ‚΄λΆ€ 문제
⚠️ μ‹€λ¬΄μ—μ„œ κ°€μž₯ 많이 λ‹€λ£¨λŠ” 건
2xx / 4xxλ‹€

βœ… 2xx: 성곡 응닡

2xxλŠ” β€œμš”μ²­μ΄ 잘 μ²˜λ¦¬λ˜μ—ˆλ‹€β€λŠ” μ˜λ―Έλ‹€.

μ½”λ“œ 이름 의미 μ£Ό μ‚¬μš© 상황
200 OK μš”μ²­ 성곡 쑰회, μˆ˜μ •
201 Created λ¦¬μ†ŒμŠ€ 생성 μ™„λ£Œ POST
204 No Content μ„±κ³΅ν–ˆμ§€λ§Œ λ°˜ν™˜ 데이터 μ—†μŒ DELETE
πŸ’‘ 204 No ContentλŠ”
Response Bodyκ°€ μ‘΄μž¬ν•˜λ©΄ μ•ˆ λœλ‹€

🚫 4xx: ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜

4xxλŠ” β€œμš”μ²­ν•œ μͺ½(ν΄λΌμ΄μ–ΈνŠΈ)에 λ¬Έμ œκ°€ μžˆλ‹€β€λŠ” λœ»μ΄λ‹€.

μ½”λ“œ 이름 의미 λŒ€ν‘œ 상황
400 Bad Request 잘λͺ»λœ μš”μ²­ μš”μ²­ 데이터 였λ₯˜
401 Unauthorized 인증 ν•„μš” 둜그인 μ•ˆ 됨
403 Forbidden κΆŒν•œ μ—†μŒ μ ‘κ·Ό λΆˆκ°€
404 Not Found λ¦¬μ†ŒμŠ€ μ—†μŒ ID μ—†μŒ
⚠️ 401κ³Ό 403은 μ˜λ―Έκ°€ λ‹€λ₯΄λ‹€
401 = 인증 μžμ²΄κ°€ μ•ˆ 됨
403 = 인증은 λμ§€λ§Œ κΆŒν•œμ΄ μ—†μŒ

🧠 HTTP μƒνƒœ μ½”λ“œλ₯Ό μ™œ μ‹ κ²½ 써야 ν• κΉŒ?

μƒνƒœ μ½”λ“œλŠ” λ‹¨μˆœν•œ μˆ«μžκ°€ μ•„λ‹ˆλ‹€.

ν”„λ‘ νŠΈμ—”λ“œ, λͺ¨λ°”일 μ•±, λ‹€λ₯Έ μ„œλ²„λ“€μ€ Status Codeλ₯Ό κΈ°μ€€μœΌλ‘œ λ‘œμ§μ„ λΆ„κΈ°ν•œλ‹€.

  • 200 β†’ 정상 ν™”λ©΄
  • 401 β†’ 둜그인 νŽ˜μ΄μ§€ 이동
  • 403 β†’ κΆŒν•œ μ—†μŒ λ©”μ‹œμ§€
  • 404 β†’ β€œμ‘΄μž¬ν•˜μ§€ μ•ŠμŒβ€ μ•ˆλ‚΄
πŸ’‘ Status CodeλŠ”
APIκ°€ 외뢀와 λ§ΊλŠ” 약속(Contract)이닀


🧩 μƒνƒœ μ½”λ“œ νλ¦„μœΌλ‘œ μ΄ν•΄ν•˜κΈ°

μƒνƒœ μ½”λ“œλŠ” λ‹¨λ…μœΌλ‘œ 보면 감이 잘 μ•ˆ μ˜¨λ‹€.
μš”μ²­ β†’ νŒλ‹¨ β†’ 응닡 νλ¦„μœΌλ‘œ 보면 λͺ…ν™•ν•΄μ§„λ‹€.

 
  ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­
	↓ 
  μš”μ²­ 데이터 검증
	↓ 
     인증 확인
	↓ 
     κΆŒν•œ 확인
	↓
    λ¦¬μ†ŒμŠ€ 쑴재 μ—¬λΆ€
	↓
     정상 처리 
단계 문제 λ°œμƒ μ‹œ λ°˜ν™˜ μ½”λ“œ
μš”μ²­ 데이터 였λ₯˜ ν˜•μ‹/κ°’ 잘λͺ»λ¨ 400
인증 μ•ˆ 됨 둜그인 ν•„μš” 401
κΆŒν•œ μ—†μŒ μ ‘κ·Ό λΆˆκ°€ 403
λ¦¬μ†ŒμŠ€ μ—†μŒ ID μ—†μŒ 404
정상 처리 - 200 / 201 / 204

βš™οΈ FastAPIμ—μ„œ μƒνƒœ μ½”λ“œ μ§€μ •ν•˜λŠ” 방법

β‘  숫자둜 직접 μ§€μ •

@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}

β‘‘ status μƒμˆ˜ μ‚¬μš© (ꢌμž₯)

from fastapi import FastAPI, status

app = FastAPI()

@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
    return {"name": name}

@app.delete("/items/{item_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_item(item_id: int):
    return None
πŸ’‘ status μƒμˆ˜λ₯Ό μ“°λŠ” 이유
- 숫자 의미λ₯Ό λ°”λ‘œ μ•Œ 수 있음
- IDE μžλ™μ™„μ„± 지원
- 가독성과 μœ μ§€λ³΄μˆ˜μ„± ν–₯상


πŸ“š CRUD와 μƒνƒœ μ½”λ“œ λ§€ν•‘

μž‘μ—… HTTP λ©”μ„œλ“œ ꢌμž₯ μƒνƒœ μ½”λ“œ
Create POST 201 Created
Read GET 200 OK
Update PUT / PATCH 200 OK
Delete DELETE 204 No Content

🧾 μ΅œμ’… 정리

  • Status CodeλŠ” μ„œλ²„μ˜ 처리 κ²°κ³Ό μ‹ ν˜Έλ‹€
  • Response Bodyμ™€λŠ” μ™„μ „νžˆ λ‹€λ₯Έ λ ˆμ΄μ–΄λ‹€
  • 2xxλŠ” 성곡, 4xxλŠ” ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜
  • μ˜λ―Έμ— λ§žλŠ” μ½”λ“œλ₯Ό μ“°λŠ” 것이 κ³§ API 섀계닀
profile
Gongbuhaja

0개의 λŒ“κΈ€