Web

Django) Response와 Serializer

서영환 2024. 9. 5. 18:32

Django에서는 클라이언트의 요청(Request)이 들어오면, 서버는 보통 HTTPResponse 형태로 응답을 보내게 됩니다. 퓨어 장고(Pure Django)에서는 render 메서드를 사용해 HTML 파일을 클라이언트에 전달하거나, redirect를 이용해 다른 URL로 리다이렉션합니다.

하지만 Django REST Framework(DRF)에서는 HTML이 아닌 JSON 형식으로 데이터를 전송하는 것이 일반적입니다. DRF는 웹 API를 쉽게 개발할 수 있게 해주며, 대부분의 경우 클라이언트가 요청하는 데이터 형식이 JSON이기 때문에 이에 맞춰 응답을 처리합니다. 물론, 필요에 따라 JSON 외의 다른 형식으로도 응답을 보낼 수 있지만, JSON 형식이 가장 흔히 사용됩니다.

JSON 형식 예시

{
    "name": "식빵",
    "family": "웰시코기",
    "age": 1,
    "weight": 2.14
}

위와 같은 JSON 형식은 파이썬의 딕셔너리와 유사하며, Key: Value 구조로 이루어져 있습니다. Value에는 다양한 자료형이 들어갈 수 있습니다. 예를 들어 문자열, 숫자, 배열, 중첩된 객체 등이 가능합니다.

Serializer의 역할

DRF에서 자주 등장하는 핵심 개념 중 하나가 Serializer입니다. Serializer는 퓨어 장고의 Form과 비슷한 역할을 합니다. 퓨어 장고에서 데이터베이스의 데이터를 다룰 때, Form을 사용해 클라이언트로부터 전달된 데이터를 컬럼에 맞춰 넣고, 유효성 검사를 한 뒤 저장하는 과정이 필요합니다. DRF에서는 이러한 과정을 좀 더 쉽게 해주는 도구가 Serializer입니다.

Serializer는 다음과 같은 역할을 합니다:

  1. 요청 데이터 처리: 클라이언트로부터 받은 JSON 데이터를 파이썬 객체로 변환한 뒤, 이 데이터를 데이터베이스의 모델에 맞게 변환하고 저장할 수 있습니다.
  2. 응답 데이터 처리: DRF는 클라이언트가 요청한 정보를 응답해야 하기 때문에, Serializer를 통해 데이터베이스에서 조회된 데이터를 JSON 형식으로 변환하여 클라이언트에 전달합니다. 직접 JSON 데이터를 생성할 필요 없이, Serializer가 자동으로 적절한 JSON 응답을 생성해줍니다.

Serializer의 장점

Serializer는 단순히 데이터를 변환하는 것을 넘어서, 데이터 유효성 검사데이터 직렬화를 한 번에 처리할 수 있어 매우 유용합니다. 예를 들어, 클라이언트가 POST나 PUT 요청을 통해 데이터를 보냈을 때, 이 데이터를 적절히 유효성 검사를 하고, 유효한 데이터는 데이터베이스에 저장한 후 그 결과를 응답할 수 있습니다.

다음은 Serializer의 간단한 예시입니다:

from rest_framework import serializers
from .models import Dog

class DogSerializer(serializers.ModelSerializer):
    class Meta:
        model = Dog
        fields = ['name', 'family', 'age', 'weight']

위 Serializer는 Dog 모델의 데이터를 JSON 형식으로 직렬화하거나, 클라이언트로부터 받은 JSON 데이터를 모델의 필드에 맞춰 처리할 수 있습니다.

결론

DRF에서 Serializer는 퓨어 장고의 Form과 유사하지만, 더 나아가 API 응답을 생성하고 데이터를 유효성 검사하는 등 다양한 역할을 수행합니다. 이를 통해 클라이언트와 서버 간의 데이터를 쉽게 주고받을 수 있으며, DRF를 사용하는 이유 중 하나는 이러한 직관적이고 강력한 도구를 제공하기 때문입니다.

직접 JSON 데이터를 생성할 필요 없이 Serializer를 잘 활용하면 훨씬 간결하고 안전한 코드 작성이 가능합니다.