payload란?API 개발을 하다 보면 payload라는 단어를 자주 접하게 됩니다.
실제로 payload는 요청 처리 과정에서 핵심적인 개념 중 하나입니다.
이 글에서는 payload의 의미와 역할, 실제 코드에서 어떻게 다루는지를 정리해 보겠습니다.
payload는 API 요청(Request)에서 클라이언트가 서버로 보내는 "데이터 내용"을 의미합니다. 특히 POST, PUT, PATCH 같은 요청에서는 어떤 데이터를 생성하거나 수정할지를 이 payload 안에 담아 전달합니다.
다음과 같은 HTTP 요청이 있다고 가정해보겠습니다:
PATCH /users/42
Content-Type: application/json
{
"username": "johndoe_92",
"email": "johndoe@example.com",
"phone": "010-1234-5678",
"profile": {
"bio": "개발자이자 커피 애호가입니다.",
"location": "부산광역시 해운대구",
"website": "https://johndoe.dev"
},
"preferences": {
"newsletter": true,
"language": "ko"
}
}
여기서 Content-Type이 application/json으로 명시되어 있으며, 본문에 포함된 JSON 전체가 바로 payload입니다. 즉, 이 데이터가 서버에 전달되어 업데이트에 활용됩니다.
실제 백엔드 코드에서는 다음과 같이 payload를 다룹니다:
payload = event.json_body
event: API Gateway 등에서 들어온 전체 요청 이벤트json_body: 요청 본문(JSON)을 파싱한 파이썬 딕셔너리따라서 payload는 Python에서 dict 형태로 접근하게 되며, 원하는 값을 꺼내거나 유효성 검사를 하는 데 사용됩니다.
| 역할 | 설명 |
|---|---|
| 수정 데이터 전달 | 어떤 필드를 어떻게 수정할지 서버에 전달하는 용도 |
| 유효성 검사 대상 | 예: Project(**payload) 형태로 모델 생성 시 값 검증 수행 |
| 쿼리 생성을 위한 기반 | 예: get_update_query(payload)처럼 SQL 문을 생성할 때 사용 |
| 보안 및 권한 필터링 대상 | 허용된 필드만 추출하거나 특정 필드에 대한 권한을 검사하는 데 사용 |
payload의 내용을 조건에 따라 처리할 수 있습니다.
if "profile" in payload and "location" in payload["profile"]:
print("변경할 지역:", payload["profile"]["location"])
위 코드처럼 필요한 값을 꺼내어 로직에 반영할 수 있습니다.
정리하면, payload는 클라이언트가 서버로 보내는 JSON 본문이며, 데이터 생성이나 수정을 위한 핵심 입력값입니다. API 서버는 이 값을 기반으로 데이터베이스를 업데이트하거나 유효성을 검사하고, 필요한 로직을 실행합니다.
API에서 payload는 마치 "요청 내용이 담긴 상자"처럼 생각할 수 있습니다. 서버는 이 상자를 열어 필요한 내용을 꺼내 처리하게 됩니다.
이 포스팅이 payload에 대한 개념을 이해하는 데 도움이 되었기를 바랍니다. 추가로 궁금한 점이 있다면 댓글로 남겨주세요.