[Django 4일차] Django REST Framework 핵심 요약: Serializer와 View의 실전 활용 3/4 (short_url 프로젝트)(250515)

2025. 5. 15. 15:04·특강

📘 Django REST Framework 핵심 요약: Serializer와 View의 실전 활용

이 튜토리얼은 DRF(Django REST Framework)의 핵심 구성 요소인 Serializer와 View를 중심으로, 실제 프로젝트에서 발생할 수 있는 문제 해결과 실전 응용력을 기를 수 있도록 구성되어 있습니다. 코드를 기준으로 흐름을 따라가며, 직렬화와 응답 설계, GET/POST 처리, 유효성 검사 등 실용적인 패턴을 제시합니다.


1. 🎯 Static Method와 Serializer의 유기적 활용

✅ 핵심 흐름

  1. staticmethod를 통해 클래스에서 직접 호출할 수 있는 메서드 정의 → 인스턴스 없이 호출 가능
  2. DB 저장 전에 코드를 먼저 생성하고, 이후 인스턴스를 생성하여 빈 값 저장 방지
  3. serializer.save()를 통해 객체 생성 → 응답은 serializer.data 혹은 커스텀 JSON으로 구성
  4. 상태코드는 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 서버를 설계할 수 있게 됩니다 💪

'특강' 카테고리의 다른 글

🚀 FastAPI 입문 가이드: 설치부터 실행까지 한 번에!(1일차)  (0) 2025.05.26
[Django 4일차] Django REST Framework Generic view: 추상화, mixin, 실전 예시까지!4/4 (short_url 프로젝트)(250515)  (0) 2025.05.15
[Django 4일차] Django를 백엔드 프레임워크로 활용하기 - DRF 입문 가이드 1/4 (short_url 프로젝트)(250515)  (0) 2025.05.15
[Django 3일차] Django 함수형 뷰 vs 클래스형 뷰 + ORM 4/4 (short_url 프로젝트)(250514)  (0) 2025.05.14
[Django 3일차] Django Race Condition 해결 및 삭제 기능 구현 3/4 (short_url 프로젝트)(250514)  (0) 2025.05.14
'특강' 카테고리의 다른 글
  • 🚀 FastAPI 입문 가이드: 설치부터 실행까지 한 번에!(1일차)
  • [Django 4일차] Django REST Framework Generic view: 추상화, mixin, 실전 예시까지!4/4 (short_url 프로젝트)(250515)
  • [Django 4일차] Django를 백엔드 프레임워크로 활용하기 - DRF 입문 가이드 1/4 (short_url 프로젝트)(250515)
  • [Django 3일차] Django 함수형 뷰 vs 클래스형 뷰 + ORM 4/4 (short_url 프로젝트)(250514)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787) N
      • Python (32)
      • 프로젝트 (110) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    titaniumcase
    travel ban
    gpterror
    lawsuitculture
    life reflection
    bts
    trumpmuskclash
    btscomeback
    livebroadcast
    urbantrends
    btsdischarge
    homebartrend
    basalcellcarcinoma
    americanlaw
    remittance
    youngprofessionals
    RM
    btsreunion
    뷔
    chatgpterror
    self-growth
    newpoliticalparty
    hotcoffeecase
    global politics
    chinanightlife
    classaction
    smartphonedurability
    americaparty
    college reunions
    btsjungkook
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
[Django 4일차] Django REST Framework 핵심 요약: Serializer와 View의 실전 활용 3/4 (short_url 프로젝트)(250515)
상단으로

티스토리툴바