View
1. Serializer란? (쉽게 이해하기)
DRF에서 Serializer는 데이터를 JSON ↔ Python 객체로 변환해주는 도구야.
예를 들어, Django 모델 데이터를 클라이언트(React, Vue, 모바일 앱 등)에서 사용하려면 JSON 형태로 변환해야 하고,
클라이언트에서 보낸 데이터를 Django가 이해하려면 역직렬화가 필요해.
Serializer는 이 두 가지 작업을 해주지!
Serializer의 3가지 핵심 기능
- 직렬화(Serialization)
- 파이썬 객체 → JSON 형식 변환
- 클라이언트가 이해할 수 있는 데이터로 변환
- 역직렬화(Deserialization)
- JSON → 파이썬 객체 변환
- 클라이언트가 보낸 데이터를 서버에서 처리 가능하도록 변환
- 데이터 검증(Validation)
- 유효성 검사 (예: 필수값 체크, 길이 제한 등)
2. Serializer vs. Django Form 비교
특징 Django Form DRF Serializer
주요 목적 | HTML 폼 데이터 처리 및 렌더링 | API에서 JSON 데이터 직렬화/역직렬화 |
처리 대상 | HTML Form 데이터 | JSON, XML 데이터 |
유효성 검사 | HTML 기반 | 다양한 형식 (JSON, XML) |
프론트엔드 연동 | HTML 중심 | 웹·모바일·앱 API에서 쉽게 사용 가능 |
정리:
- Django Form → 템플릿 기반 웹 페이지에서 HTML Form 데이터 처리
- DRF Serializer → API에서 JSON 데이터를 주고받는 데 특화됨
3. 왜 직렬화가 필요할까?
Django에서 모델 데이터를 바로 클라이언트에 전달할 수 없어.
웹에서는 JSON 같은 포맷이 표준이라서, 데이터를 직렬화해서 변환해야 함.
예시:
from myapp.models import Post
from myapp.serializers import PostSerializer
post = Post.objects.all() # 쿼리셋 (Python 객체)
serializer = PostSerializer(post, many=True)
print(serializer.data) # JSON 형태로 변환된 데이터
4. DRF Serializer의 종류
- ModelSerializer (자동화된 직렬화)
- Django 모델과 연결해서 필드를 자동으로 직렬화
class PostSerializer(serializers.ModelSerializer): class Meta: model = Post fields = ['title', 'content']
- Serializer (수동으로 필드 정의, 더 유연함)
- 직접 필드를 정의해서 더 많은 커스터마이징 가능
class PostSerializer(serializers.Serializer): title = serializers.CharField(max_length=100) content = serializers.CharField()
5. RESTful API에서의 DRF Serializer 활용
- DRF는 RESTful API의 원칙을 따르도록 도와줌.
- GET, POST, PUT, DELETE 요청을 통해 데이터를 주고받을 때,
Serializer를 사용하여 데이터를 가공 및 검증 가능.
예시:
from rest_framework.views import APIView
from rest_framework.response import Response
class PostListView(APIView):
def get(self, request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
6. 결론 및 Serializer 활용 팁
- DRF Serializer는 API에서 데이터를 주고받는 데 필수적인 역할을 함.
- 직렬화는 데이터 포맷을 변환하는 데 필요하며, JSON 형태로 변환하는 것이 일반적.
- ModelSerializer를 사용하면 모델 필드를 자동으로 직렬화할 수 있어 간편.
- 직접 커스텀하려면 Serializer 클래스를 사용해서 필드를 정의.
- 데이터의 무결성을 위해 유효성 검사를 적극 활용해야 함.
'TIL' 카테고리의 다른 글
내일배움캠프 40일차 - 아아 안돼 (1) | 2025.01.23 |
---|---|
내일배움캠프 본캠프 36일차 - Django DRF를 배우는 이유 (0) | 2025.01.16 |
내일배움캠프 본캠프 34일차 (0) | 2025.01.14 |
내일배움캠프 본캠프 33일차 - DJANGO (0) | 2025.01.13 |
내일배움캠프 6주차 WIL (0) | 2025.01.10 |
reply