Python 의존성 업데이트: 변경 범위·취약점·회귀 확인
버전 고정, 의존성 차이 검토, 회귀 테스트와 롤백을 연결하는 업데이트 절차입니다.
패키지 업데이트는 최신 버전 번호로 바꾸는 작업보다 어떤 동작과 의존성이 달라지는지 확인하는 작업에 가깝습니다. 보안 수정이 필요할 수 있지만 새 버전이 기존 코드와 자동으로 호환되는 것은 아닙니다. Python 프로젝트를 기준으로 변경 범위를 작게 잡아 보겠습니다.
현재 설치와 선언을 구분하기
requirements.txt에 최소 버전만 적혀 있으면 설치 시점에 따라 다른 버전이 선택될 수 있습니다. 실제 설치된 버전과 프로젝트가 의도한 의존성을 비교합니다. 재현 가능성을 높이려면 직접 의존성과 하위 의존성의 고정·잠금 전략을 정합니다.
.venv/bin/python -m pip list --outdated
.venv/bin/python -m pip check
첫 명령은 오래된 버전 후보를 찾는 데 쓰고 두 번째는 설치된 의존성의 호환 문제를 확인합니다. 두 결과 모두 취약점이 없다는 증명은 아닙니다. 보안 권고와 취약점 검사 결과를 별도로 확인해야 합니다.
업데이트 후보의 기록
| 항목 | 남길 내용 |
|---|---|
| 변경 | 기존 버전 → 후보 버전 |
| 이유 | 취약점 수정·버그 수정·지원 종료 등 |
| 근거 | 공식 릴리스 노트와 보안 권고 |
| 영향 | 제거된 API, 설정 변화, 하위 의존성 |
| 검증 | 해당 기능의 정상·실패 테스트 |
| 복구 | 이전 잠금 파일과 배포 산출물 |
관련 없는 모든 패키지를 동시에 올리면 실패 원인을 찾기 어렵습니다. 보안상 긴급한 업데이트와 일반적인 정기 업데이트의 우선순위를 구분합니다.
새 환경에서 검증하기
기존 환경에 계속 덮어 설치하기보다 새 가상환경에서 선언된 파일로 설치합니다. 테스트뿐 아니라 앱 시작과 중요한 사용자 경로를 확인합니다. 인증, 직렬화, DB 드라이버처럼 경계에 있는 패키지는 실패 응답과 예외 동작도 비교합니다.
잠금 파일의 큰 변화가 예상과 맞는지 리뷰합니다. 새 의존성이 추가되었다면 출처와 역할을 확인하고, 이름이 비슷한 다른 패키지를 잘못 설치하지 않았는지 봅니다.
배포와 롤백까지 한 묶음
테스트를 통과한 산출물과 배포한 산출물이 같아야 합니다. 배포 시점에 다시 최신 의존성을 선택하게 하면 검증 대상이 바뀔 수 있습니다. 이전 환경으로 돌아갈 파일과 이미지를 보존하되 실제 비밀값을 저장소에 넣지는 않습니다.
취약점이 보고됐을 때는 설치 여부뿐 아니라 영향받는 기능과 노출 조건을 확인합니다. 위험을 과소평가하거나 검사 경고를 무조건 무시하지 않고, 공식 수정과 완화 방법을 기준으로 판단합니다.