JSON 지원 추가: 경량 Python 웹 프레임워크에서의 구현
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- Python 웹 프레임워크 개발자 (REST API 또는 단일 페이지 애플리케이션 구축 시 JSON 처리 필요)
- 중간 수준 (요청/응답 헤더, JSON 파싱, 미들웨어 이해 필수)
핵심 요약
- JSON 파싱:
Content-Type: application/json
헤더 확인 후json.loads()
로 요청 본문을 파싱 (parse_json_body
함수 사용) - JSON 응답 반환:
json.dumps()
로 데이터 직렬화 후Content-Type
헤더 설정 (json_response
함수 사용) - 미들웨어 활용:
.json
속성을 요청 객체에 추가하여 핸들러에서 직접 접근 가능 (json_parser_middleware
구현)
섹션별 세부 요약
1. JSON 지원의 중요성
- 클라이언트-서버 통신의 표준 포맷으로, 모든 주요 프론트엔드 프레임워크와 API 소비자와 호환됨
- 구조화된 입력 수용, 머신 가독성 있는 응답, API 엔드포인트 간결한 처리 가능
2. JSON 파싱 구현
Content-Type
헤더 검증 → 요청 본문 디코딩 →json.loads()
로 파싱- 예외 처리:
ValueError
,UnicodeDecodeError
발생 시None
반환 - 코드 예시:
def parse_json_body(request):
content_type = request["headers"].get("Content-Type", "")
if "application/json" in content_type:
try:
return json.loads(request.get("body", b"").decode("utf-8"))
except (ValueError, UnicodeDecodeError):
return None
3. JSON 응답 생성
- Python 객체를
json.dumps()
로 직렬화 후Content-Type: application/json
헤더 설정 - 예시 함수:
def json_response(data, status=200):
return {
"status": status,
"headers": {"Content-Type": "application/json"},
"body": json.dumps(data).encode("utf-8")
}
4. 에러 처리 및 고려사항
Content-Type
누락 시 원시 본문 수락 여부 결정- UTF-8 이외 인코딩 시 거부
- 대규모 페이로드 시 최대 크기 검증 추가
5. 미들웨어 활용
json_parser_middleware
로 요청 객체에.json
속성 추가- 핸들러에서
request["json"]
직접 접근 가능 - 예시:
def json_parser_middleware(request, next_handler):
request["json"] = parse_json_body(request)
return next_handler(request)
6. 일관성 유지
- 에러 메시지도 구조화:
{"error": "Not found"}
형식 사용 - 예시:
def not_found():
return json_response({"error": "Not found"}, status=404)
7. 테스트 방법
curl
사용 예:
curl -X POST -H "Content-Type: application/json" -d '{"name": "Alice"}'
결론
- JSON 지원은 프레임워크의 현대적 프론트엔드/모바일 앱 호환성 향상에 기여
parse_json_body
,json_response
함수와 미들웨어 구현을 통해 간단히 추가 가능- 심화 학습: "Building a Lightweight Python Web Framework from Scratch" PDF 가이드 참조