📌 Flask-Smorest의 응답 처리 방식
Flask-Smorest는 응답을 자동으로 직렬화하여 클라이언트에게 전달해. 즉, 뷰 함수에서 반환하는 데이터는 직접 JSON으로 변환되어 응답 본문에 포함돼. 이 과정은 다음과 같이 이루어져:
- @book_blp.arguments(BookSchema) 데코레이터는 요청 본문을 BookSchema를 사용하여 **역직렬화(deserialize)**해. 즉, 클라이언트가 보낸 JSON 데이터를 Python 딕셔너리로 변환하지.
- 뷰 함수에서는 이 역직렬화된 데이터를 받아서 처리하고, 새로운 데이터를 생성해.
- @book_blp.response(201, BookSchema) 데코레이터는 뷰 함수의 반환값을 BookSchema를 사용하여 **직렬화(serialize)**해. 즉, Python 딕셔너리를 JSON으로 변환하여 응답 본문에 포함시키지.
이 과정에서 **return new_data**는 Python 딕셔너리 형태로 반환되지만, Flask-Smorest가 이를 자동으로 JSON으로 변환하여 클라이언트에게 전달해.
🧪 예시 코드
@book_blp.arguments(BookSchema)
@book_blp.response(201, BookSchema)
def post(self, new_data):
new_data['id'] = len(books) + 1
books.append(new_data)
return new_data
위 코드에서:
- @book_blp.arguments(BookSchema)는 클라이언트가 보낸 JSON 데이터를 BookSchema를 사용하여 Python 딕셔너리로 변환해.
- 뷰 함수는 이 데이터를 받아서 처리하고, 새로운 책 데이터를 생성해.
- @book_blp.response(201, BookSchema)는 이 새로운 데이터를 BookSchema를 사용하여 JSON으로 변환하고, 상태 코드 201과 함께 클라이언트에게 응답해.
✅ 클라이언트가 받는 응답 예시
클라이언트는 다음과 같은 JSON 응답을 받게 돼:
{
"id": 1,
"title": "New Book",
"author": "Author Name"
}
이 응답은 BookSchema에 정의된 필드에 따라 자동으로 직렬화된 결과야.
🔍 참고 자료
이렇게 Flask-Smorest는 응답 직렬화를 자동으로 처리하여, 개발자가 직접 JSON 변환 코드를 작성하지 않아도 돼. 이 덕분에 코드가 더 깔끔하고 유지보수가 쉬워져! 😊
@book_blp.arguments(BookSchema)와 @book_blp.response(201, BookSchema)를 사용하면, 클라이언트가 보낸 데이터를 서버가 이해하고, 그 데이터를 클라이언트에게 응답으로 전달하는 과정을 자동으로 처리해요.
🔍 어떻게 작동하나요?
1,클라이언트의 요청: 클라이언트가 JSON 형식으로 데이터를 보냅니다. 예를 들어:
{
"title": "새로운 책",
"author": "홍길동"
}
2.서버의 처리:
- @book_blp.arguments(BookSchema)는 클라이언트가 보낸 JSON 데이터를 BookSchema를 사용하여 파이썬 딕셔너리로 변환합니다.
- 뷰 함수에서는 이 데이터를 받아서 처리하고, 새로운 데이터를 생성합니다.
- @book_blp.response(201, BookSchema)는 뷰 함수의 반환값을 BookSchema를 사용하여 JSON 형식으로 변환하고, 상태 코드 201과 함께 클라이언트에게 응답합니다.
3.클라이언트의 응답: 클라이언트는 다음과 같은 JSON 응답을 받게 됩니다:
{
"id": 1,
"title": "새로운 책",
"author": "홍길동"
}
'기술블로그' 카테고리의 다른 글
Flask에서 url_for를 사용한 리디렉션 with 파머(2/3) (0) | 2025.04.22 |
---|---|
Flask에서 url_for와 라우트 사용 with 파머(1/3) (0) | 2025.04.22 |
Flask의 기능 + Blueprint + Flask-Smorest 통한 작업섹션 구분 (0) | 2025.04.18 |
Blueprint 이름은 Flask 내부에서 라우트와 뷰 함수를 구분하는 데 사용된다 (0) | 2025.04.18 |
클래스와 객체, self에 대한 자세한 설명 (0) | 2025.04.18 |