Django/DRF 메이저 버전 업그레이드 안전 가이드

메이저 버전 업그레이드는 보안, 성능, 새로운 기능 활용을 위해 필수적이지만, 하위 호환성 문제로 인한 위험을 동반함. 충분한 준비와 단계적 접근을 통해 안전하게 진행 가능

업그레이드가 필요한 이유

  • 보안 취약점 해결: 구버전은 보안 패치 지원 중단

  • 성능 향상: 비동기 뷰 지원, ORM 최적화 등

  • 새로운 기능 활용: 최신 Python 기능, 새로운 필드 타입

  • 생태계 호환성: 최신 서드파티 라이브러리 지원

  • 유지보수성: 점진적 업그레이드가 한 번에 여러 버전 업그레이드보다 안전

업그레이드 준비 단계

1. 릴리스 노트 정독

  • 업그레이드할 모든 버전의 릴리스 노트 확인

  • 하위 호환성 변경 사항, 지원 중단 기능, 제거된 기능 체크

  • 변경 사항을 프로젝트 적용 계획으로 정리

2. 테스트 커버리지 확보

  • 최소 80% 이상의 테스트 커버리지 확보

  • 커버리지가 낮다면 주요 기능 테스트 코드 먼저 보강

3. 의존성 패키지 호환성 확인

  • requirements.txt의 서드파티 패키지들이 목표 Django/DRF 버전 지원 여부 확인

  • 지원하지 않는 라이브러리는 버전 업그레이드, 다른 라이브러리로 교체, 또는 포크하여 수정

업그레이드 실행 단계

1. 개발 브랜치 생성

  • main이나 develop 브랜치에서 직접 작업 금지

  • 별도 업그레이드 브랜치 생성

2. 점진적 순차적 업그레이드

  • 한 번에 최종 버전으로 점프하지 말고 마이너 버전 또는 LTS 버전 순서대로 진행

  • 문제 발생 시 원인 특정 용이

3. DeprecationWarning 해결

  • 업그레이드 전 현재 버전에서 발생하는 지원 중단 경고 모두 해결

  • 다음 메이저 버전에서 에러가 될 코드들이므로 우선 수정

4. 테스트-수정 반복

  • 패키지 버전을 한 단계씩 올리며 테스트 실행

  • 실패하는 테스트 확인 후 릴리스 노트 참고하여 코드 수정

  • 모든 테스트 통과까지 반복

배포 단계

1. 스테이징 환경 배포 및 QA

  • 운영 환경과 동일한 스테이징 환경에 먼저 배포

  • 자동화 테스트가 잡지 못하는 UI/UX 문제나 예외 케이스 수동 테스트

  • DB 마이그레이션이 있다면 스테이징 DB 복사본으로 충분히 테스트

2. 운영 배포

  • Blue-Green 또는 Canary 배포 전략으로 무중단 배포

  • 배포 후 모니터링 도구로 에러 발생 빈도, API 응답 시간 등 지표 모니터링

추가 주의사항

  • 충분한 시간 확보: 새로운 기능 개발을 멈추고 업그레이드에만 집중할 시간 계획

  • Python 버전 호환성: Django/DRF가 요구하는 최소 Python 버전도 확인

  • 서드파티 라이브러리 관리: 유지보수 중단된 라이브러리는 과감하게 대안 모색

  • 팀 소통: 업그레이드 계획과 진행 상황을 팀 전체에 투명하게 공유

  • RemovedInDjangoXXWarning: DeprecationWarning보다 심각한 경고로 반드시 수정 필요

Last updated