커뮤니티에서 더 이상 Python 2를 더 이상 지원하지 않습니다. Python 2 앱을 Python 3로 마이그레이션하는 것이 좋습니다.

Python 3 표준 런타임으로 마이그레이션

2020년 1월 1일부터 Python 커뮤니티는 더 이상 Python 2.7의 업데이트, 버그 수정 또는 보안 문제 패치를 제공하지 않습니다. 아직 App Engine 표준 환경의 Python 2 런타임에서 실행 중인 앱을 최대한 빨리 Python 3 런타임으로 마이그레이션하는 것이 좋습니다. 자세한 내용은 Google Cloud에서 Python 2 지원을 참조하세요.

Python 2 런타임과 Python 3 런타임의 주요 차이점

Python 2와 Python 3 런타임에는 다음과 같은 차이점이 있으며 마이그레이션 시 필요한 변경사항 대부분은 이 차이점에서 비롯됩니다.

Python 2와 Python 3 사이의 호환성 문제

Python 3이 2008년 처음 출시되었을 당시 여러 가지 이전 버전과 호환되지 않는 변경사항이 언어에 도입되었습니다. 이러한 변경사항 중 일부는 print 문을 print() 함수로 바꾸는 등 사소한 코드 업데이트를 수행해야 합니다. 기타 변경사항은 바이너리 데이터, 텍스트, 문자열을 처리하는 방법을 업데이트하는 등 코드를 대폭 업데이트해야 할 수 있습니다.

Python 표준 라이브러리를 비롯한 널리 사용되는 여러 오픈소스 라이브러리도 Python 2에서 Python 3으로 이동할 때 변경되었습니다.

Python 3 런타임에 번들 App Engine 서비스 없음

Python 3 런타임을 시작으로 App Engine 표준 환경에는 더 이상 Memcache 및 태스크 큐와 같은 번들 App Engine 서비스가 포함되지 않습니다. 대신 Google Cloud는 Python 2 런타임의 대부분의 번들 서비스와 동일한 독립형 제품을 제공합니다. 이미지 처리, 검색, 메시징과 같은 Google Cloud에서 별도의 제품으로 제공되지 않는 번들 서비스의 경우 타사 공급 업체 또는 이 마이그레이션 가이드에서 추천하는 다른 해결 방법을 사용할 수 있습니다.

번들 App Engine 서비스를 제거하면 Python 3 런타임에서 완전히 관용적인 Python 개발 환경을 지원할 수 있습니다. Python 3 런타임에서는 완전히 이식 가능하고 App Engine을 포함한 모든 표준 Python 환경에서 실행할 수 있는 표준 Python 앱을 작성합니다.

동적 콘텐츠 요청을 라우팅하는 데 필요한 웹 프레임워크

Python 2 런타임에서 app.yaml 파일에 URL 핸들러를 만들어 특정 URL 또는 URL 패턴이 요청될 때 실행할 앱을 지정할 수 있습니다.

Python 3 런타임에서 앱은 app.yaml에서 URL 핸들러를 사용하는 대신 Flask 또는 Django와 같은 웹 프레임워크를 사용하여 동적 콘텐츠 요청을 라우팅해야 합니다. 정적 콘텐츠의 경우 앱의 app.yaml 파일에서 계속 URL 핸들러를 만들 수 있습니다.

마이그레이션 프로세스 개요

마이그레이션에 다음과 같은 점진적 방법을 사용하는 것이 좋습니다. 이 방법은 프로세스 전반에 걸쳐 작동 및 테스트 가능한 애플리케이션을 유지보수합니다.

  1. Python 2 앱의 App Engine 번들 서비스를 Google Cloud 서비스, 타사 서비스 또는 기타 권장 교체로 마이그레이션합니다. 각 서비스를 마이그레이션한 후 앱을 테스트합니다.

    이 단계를 완료하면 Python 2 앱에서 더 이상 google.appengine API를 사용하지 않습니다.

  2. Python 2 및 Python 3과 호환되도록 앱을 업그레이드하세요.

    이 업그레이드에 유용한 몇 가지 솔루션이 있습니다. 예를 들어 Python-Future 또는 Python-Modernize을 사용합니다.

    이 마이그레이션 프로세스 단계에 대한 자세한 내용은 Python Software Foundation 문서 사이트의 Porting Python 2 Code to Python 3(Python 2 코드를 Python 3로 포팅)을 참조하세요.

  3. Python 3 런타임용 App Engine 구성 파일을 준비합니다. 다음을 포함하여 여러 중요한 변경사항이 app.yaml의 구성 설정에 영향을 미칩니다.

    • 이제 앱은 스레드로부터 안전한 것으로 간주됩니다. 앱이 스레드로부터 안전하지 않은 경우 비용이 크게 증가할 가능성을 미연에 방지하려면 app.yaml 파일을 일부 변경해야 합니다.
    • app.yaml 파일이 더 이상 요청을 스크립트로 라우팅하지 않습니다. 대신 인앱 라우팅을 사용하는 웹 프레임워크를 사용하고 app.yaml의 모든 script 핸들러를 업데이트하거나 삭제해야 합니다.
  4. Python 3 환경에서 업그레이드된 앱을 테스트 및 배포합니다.

    Python 3 환경에서 업그레이드된 앱을 실행하기 전에는 표시되지 않는 호환성 문제를 해결하는 데 상당한 시간이 소요될 수 있습니다.

    모든 테스트를 통과하면 업그레이드된 앱을 App Engine에 배포하되, 트래픽이 새 버전으로 자동 라우팅되지 않도록 합니다. 트래픽 분할을 사용하여 트래픽을 Python 2 런타임의 앱에서 Python 3 런타임의 앱으로 천천히 마이그레이션합니다. 문제가 발생하면 문제가 해결될 때까지 모든 트래픽을 안정적인 버전으로 라우팅하세요.