📅 장고 REST Framework API 과정
🎯 과정 개요
- 대상: 장고 10일 과정 수료자 또는 장고 기본 지식 보유자
- 목표: RESTful API 개발 전문성 습득 및 프레임워크 비교 능력 향상
- 특징: 실습 중심(80%), pytest 기반 테스트, CI/CD 구축
📚 선수 지식
- 장고 웹 개발 코스
🛠️ 개발 환경
- 파이썬 3.10+
- 장고 4.2+
- 장고 REST Framework 3.14+
- pytest, pytest-django
- Insomnia (API 테스트 도구)
- GitHub Actions
📋 일차별 커리큘럼
Day 1: REST API 기초와 DRF 시작
오전 (3시간)
- REST API 설계 원칙
- RESTful 아키텍처 이해
- HTTP 메서드와 상태 코드
- API 설계 best practices
- DRF 소개 및 설치
- 프로젝트 구조 설정
- 기본 설정 및 URL 구성
오후 (3시간)
- 첫 API 엔드포인트 작성
- Function-based views
- Serializer 기초
- Insomnia 사용법 (30분)
- 기본 요청 테스트
- 환경 변수 설정
- 실습: 간단한 메모 API
- 메모 목록 조회 (GET)
- 메모 생성 (POST)
- 메모 상세 조회 (GET)
Day 2: DRF Serializer와 pytest 기초
오전 (3시간)
- ModelSerializer 심화
- 필드 커스터마이징
- 중첩된 관계 처리
- 검증(Validation) 메서드
- SerializerMethodField 활용
오후 (3시간)
- pytest 환경 설정
- pytest-django 설치 및 설정
- 테스트 구조 이해
- 첫 API 테스트 작성
- APIClient 사용법
- 테스트 픽스처 기초
- 실습: 블로그 API와 테스트
- Post, Comment 모델
- CRUD 기능 구현
- 각 엔드포인트별 테스트
Day 3: ViewSets과 테스트 전략
오전 (3시간)
- Generic Views 이해
- ListAPIView, CreateAPIView 등
- Mixins 활용
- ViewSet과 Router
- ModelViewSet 사용
- 커스텀 액션 추가
오후 (3시간)
- 고급 pytest 기법
- 파라미터화된 테스트
- 테스트 클래스 구조화
- 목(Mock) 활용
- 테스트 커버리지
- pytest-cov 설정
- 커버리지 리포트 생성
- 실습: 완전한 CRUD와 테스트
- ViewSet 기반 API
- 100% 테스트 커버리지 목표
Day 4: 인증/권한과 테스트
오전 (3시간)
- DRF 인증 시스템
- Token Authentication
- JWT 구현 (djangorestframework-simplejwt)
- Session Authentication 비교
- 권한 클래스
- 내장 권한 클래스
- 커스텀 권한 작성
오후 (3시간)
- 인증/권한 테스트
- 인증된 요청 테스트
- 권한 검증 테스트
- 토큰 갱신 테스트
- 실습: 회원제 API
- 회원가입/로그인
- 프로필 관리
- 권한별 접근 제어
Day 5: API 고급 기능과 장고 Ninja
오전 (3시간)
- DRF 고급 기능
- 필터링 (django-filter)
- 검색 기능
- 정렬 및 페이지네이션
- Throttling (요청 제한)
오후 (3시간)
- 장고 Ninja 소개
- 설치 및 기본 구조
- Type hints 활용
- 같은 API를 Ninja로 구현
- 프레임워크 비교
- 코드 스타일 차이
- 성능 특성
- 실습: 상품 검색 API
- 복잡한 필터링
- 전문 검색
- 두 프레임워크로 구현
Day 6: GitHub Actions와 CI/CD
오전 (3시간)
- GitHub Actions 기초
- 워크플로우 이해
- YAML 문법
- 트리거 설정
- 장고 프로젝트용 CI 구성
- 테스트 자동화
- 코드 품질 검사
오후 (3시간)
- 고급 CI/CD 기능
- 환경별 배포
- 시크릿 관리
- 배포 자동화
- 코드 품질 도구
- flake8, black
- pre-commit hooks
- 실습: 완전한 CI/CD 파이프라인
- PR시 자동 테스트
- 코드 커버리지 체크
- 자동 배포 설정
Day 7: FastAPI 비교와 통합 테스트
오전 (3시간)
- FastAPI 기초
- 프로젝트 구조
- Pydantic 모델
- 비동기 처리
- 동일 API FastAPI로 구현
- CRUD 엔드포인트
- 인증 처리
오후 (3시간)
- 통합 테스트 작성
- 시나리오 기반 테스트
- E2E 테스트 기초
- 성능 비교
- 응답 시간 측정
- 메모리 사용량
- 실습: 전자상거래 API
- 상품, 장바구니, 주문
- 3개 프레임워크 비교
Day 8: 실전 프로젝트와 배포
오전 (3시간)
- 종합 프로젝트 설계
- 소셜 미디어 API
- 요구사항 분석
- TDD 접근법
- 핵심 기능 구현
- 사용자 시스템
- 게시물 CRUD
- 팔로우 기능
오후 (3시간)
- 프로덕션 준비
- 환경 변수 관리
- 로깅 설정
- 에러 처리
- 배포 및 모니터링
- Docker 컨테이너화
- 배포 전략
- 모니터링 도구
- 실습: 전체 워크플로우
- 개발부터 배포까지
- 문서화
- 사용자 가이드
🧪 테스트 도구 및 예제
pytest 기본 구조
# conftest.py
import pytest
from rest_framework.test import APIClient
from django.contrib.auth import get_user_model
User = get_user_model()
@pytest.fixture
def api_client():
return APIClient()
@pytest.fixture
def user(db):
return User.objects.create_user(
username='testuser',
email='test@example.com',
password='testpass123'
)
@pytest.fixture
def auth_client(api_client, user):
api_client.force_authenticate(user=user)
return api_client
GitHub Actions 기본 설정
name: 장고 REST API CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Run tests
run: |
pytest --cov=./ --cov-report=xml
- name: Code quality
run: |
flake8 .
black --check .
📊 프레임워크 비교 기준
| 항목 | DRF | 장고 Ninja | FastAPI |
|---|---|---|---|
| 학습 곡선 | 중간 | 낮음 | 중간 |
| 문서화 | 자동 (브라우저블) | OpenAPI | 자동 (Swagger) |
| 성능 | 좋음 | 매우 좋음 | 최고 |
| 생태계 | 매우 풍부 | 성장 중 | 풍부 |
| 타입 안정성 | 낮음 | 높음 | 매우 높음 |
🎯 학습 성과
- RESTful API 설계 및 구현 능력
- 테스트 주도 개발(TDD) 숙달
- CI/CD 파이프라인 구축 능력
- 다양한 API 프레임워크 비교 분석 능력
- 프로덕션 레벨 API 개발 능력