📘 Django REST Framework 핵심 요약: Serializer와 View의 실전 활용
이 튜토리얼은 DRF(Django REST Framework)의 핵심 구성 요소인 Serializer와 View를 중심으로, 실제 프로젝트에서 발생할 수 있는 문제 해결과 실전 응용력을 기를 수 있도록 구성되어 있습니다. 코드를 기준으로 흐름을 따라가며, 직렬화와 응답 설계, GET/POST 처리, 유효성 검사 등 실용적인 패턴을 제시합니다.
1. 🎯 Static Method와 Serializer의 유기적 활용
✅ 핵심 흐름
- staticmethod를 통해 클래스에서 직접 호출할 수 있는 메서드 정의 → 인스턴스 없이 호출 가능
- DB 저장 전에 코드를 먼저 생성하고, 이후 인스턴스를 생성하여 빈 값 저장 방지
- serializer.save()를 통해 객체 생성 → 응답은 serializer.data 혹은 커스텀 JSON으로 구성
- 상태코드는 201(CREATED) 반환 → 성공적 생성 알림
✅ 대표 코드
@staticmethod
def generate_code():
return ''.join(random.choices(string.ascii_letters + string.digits, k=8))
serializer = ShortURLCreateSerializer(data=request.data)
if serializer.is_valid():
code = ShortURL.generate_code()
short_url = serializer.save(code=code)
return Response(ShortURLResponseSerializer(short_url).data, status=201)
2. 📡 URL 처리: POST와 GET의 흐름
POST 흐름
- 오리지널 URL을 JSON으로 입력 → original_url: "https://example.com"
- URL 형식이 아닐 경우 유효성 검사 실패 → 400 반환
- 정상일 경우 DB에 저장 → 응답 반환: id, code, original_url, created_at, access_count
GET 흐름
- get() 메서드 정의 후 .objects.all()로 전체 조회
- many=True 설정된 serializer로 직렬화
- 응답: 전체 short URL 리스트
3. 🔄 응답 결과 개선 전략
문제 상황
- serializer.data로 응답 시 original_url만 반환 → 코드, ID 등 누락
개선 방식
- 응답 전용 serializer (ex. ShortURLResponseSerializer) 생성
- 필요한 필드: ['id', 'code', 'original_url', 'created_at', 'access_count']
- View에서 응답 시 해당 serializer를 사용하여 명확한 응답 구성
4. 🧪 Serializer 설계 전략
요청용(Create)
- 요청 데이터를 역직렬화 (Deserialization)
- 유효성 검사 수행 (is_valid())
- 필드 누락, 잘못된 형식 등 사용자 오류 검출
응답용(Response)
- DB 객체를 받아 직렬화(Serialization)
- 필요한 필드만 포함하여 클라이언트에 필요한 정보 제공
- 한 serializer에 응답/요청 둘 다 포함하지 않고 역할 분리 권장
다중 응답 처리
queryset = ShortURL.objects.all()
serializer = ShortURLResponseSerializer(queryset, many=True)
return Response(serializer.data)
5. 🧰 Serializer 재사용과 설계 팁
전략 설명
✅ 하나의 Serializer로 요청+응답 | 구조가 단순할 때만 사용 |
✅ Serializer 분리 | 요청(Create), 응답(Response) 명확히 분리해서 가독성, 유지보수 향상 |
⚠️ 필드 수정 지양 | 기존 요청 처리 로직이 깨질 수 있음 → 필드 변경 시 새 Serializer 생성 |
6. ✏️ 수도 코드 작성의 중요성
- 복잡한 기능 구현 전, 흐름을 글로 작성하여 정리
# 1. 전체 ShortURL 데이터 조회
# 2. Serializer에 데이터 넣기
# 3. 응답 반환
→ 구현이 명확해지고, 유지보수 용이
7. 🛠 PyCharm 리팩터 기능 활용
- 클래스, 함수 이름 변경 시 우클릭 > Refactor > Rename 기능 사용
- View 이름 변경 → URLConf 및 다른 참조 지점도 자동 변경
- 프로젝트 규모가 커질수록 필수 사용 스킬
8. 🧠 결론: DRF API의 좋은 설계란?
- 요청과 응답에서 serializer를 적절히 분리하여 명확하게 역할 분담
- GET/POST 처리 흐름을 GenericAPIView or APIView 기반으로 정리
- validation 로직과 serializer 활용을 적극 연동
- 클라이언트에게 필요한 데이터를 정확하게, 구조적으로 제공
- 기존 시스템과의 호환성을 해치지 않도록 설계에 유의
이 튜토리얼을 통해 실무 API 개발의 구조와 흐름을 이해하고, DRF의 강점을 최대한 살린 구조화된 API 서버를 설계할 수 있게 됩니다 💪