PEP 676 – PEP 인프라 프로세스
- Author:
- Adam Turner <adam at python.org>
- Sponsor:
- Mariatta <mariatta at python.org>
- PEP-Delegate:
- Barry Warsaw <barry at python.org>
- Discussions-To:
- Discourse thread
- Status:
- Active
- Type:
- Process
- Created:
- 01-Nov-2021
- Post-History:
- 23-Sep-2021, 30-Nov-2021
- Resolution:
- Discourse message
Table of Contents
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain or CC0-1.0, whichever is more permissive 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP는 reStructuredText 파일에서 PEP 파일을 HTML 웹페이지로 렌더링하는 작업을 둘러싼 인프라를 다룹니다. PEP 독자, 작성자 및 편집자를 위한 독립적이고 유지 관리 가능한 솔루션을 명세하는 것을 목표로 합니다.
동기
2021년 11월 현재, Python 개선 제안(PEP)은 여러 시스템과 여러 단계로 구성된 프로세스에서 렌더링됩니다. 지속적 통합(CI) 작업은 모든 PEP 파일을 개별적으로 렌더링하기 위해 docutils 스크립트를 실행합니다. 그런 다음 CI 작업은 tar 아카이브를 서버에 업로드하고, 서버에서는 이를 주기적으로 가져와 python.org 웹사이트로 렌더링합니다.
이로 인해 python.org 웹사이트는 원시 HTML 업로드를 처리하고 PEP 렌더링을 수행해야 하며, 일부 경우에는 이슈를 제기할 적절한 위치가 불분명해집니다 [1].
이 PEP는 PEP를 독립적으로 렌더링하기 위한 명세를 제공합니다. 이를 통해 다음을 수행할 수 있습니다:
- PEP 지원을 위한 분산된 구성의 양을 줄입니다.
- PEP를 읽고, 작성하고, 검토하는 사람들의 사용 편의성을 개선합니다.
- 여러 미해결 이슈를 해결하고 개선을 위한 경로를 마련합니다.
- 자원봉사 유지 관리자의 시간을 절약합니다.
PEP를 최상위 수준에서 peps.python.org를 통해 접근하도록 하고(예: peps.python.org/pep-0008), PEP 렌더링을 지원하는 모든 사용자 지정 도구를 python/peps 저장소에서 호스팅하도록 제안합니다.
근거
인프라 간소화 및 중앙 집중화
2021년 11월 현재, PEP 작성자 또는 편집자가 PEP 파일을 로컬에서 렌더링하려면 python.org 웹사이트의 전체 로컬 인스턴스를 만들고, python/peps 저장소 외부에 있는 documentation을 따르면서 여러 개의 서로 다른 스크립트를 실행해야 합니다.
이와 대조적으로, 제안된 구현은 모든 PEP 파일을 렌더링하는 단일 Makefile과 Python 스크립트를 제공하며, 웹 서버 또는 로컬 파일 시스템을 대상으로 지정하는 옵션을 제공합니다.
모든 도구를 단일 저장소에서 호스팅하면 이슈를 제기할 위치가 명확해져, 자원봉사자가 분류 작업에 사용하는 시간이 줄어듭니다.
간소화되고 중앙 집중화된 도구는 PEP 렌더링 인프라의 범위가 잘 정의되어 있으므로 추가 개선에 참여하는 장벽도 낮출 수 있습니다.
사용 편의성 개선 및 이슈 해결
PEP를 읽을 때 다음과 같은 추가 기능에 대한 요청이 여러 건 있습니다:
- 구문 강조 [2]
.. code-block::지시문 사용 [2]- SVG 이미지 지원 [3]
- 활자체 인용 부호 [4]
- 추가 푸터 정보 [5]
- intersphinx 기능 [6]
- 다크 모드 테마 [7]
이러한 기능은 이 제안에서 쉽게 달성할 수 있는 개선 사항이며, 검토자와 작성자를 포함한 PEP 사용자의 사용 편의성을 향상하는 데 도움이 됩니다.
예를 들어, 현재 시스템(2021년 11월 기준)은 일정에 따라 주기적으로 실행됩니다. 이는 PEP의 업데이트가 즉시 전파되지 못해 생산성이 저하된다는 의미입니다. 참조 구현은 저장소에 커밋할 때마다 모든 PEP를 렌더링하고 게시하므로, 설계상 이 문제를 해결합니다.
참조 구현은 몇 가지 문제를 해결합니다 [8]. 예를 들어:
- 리스트 스타일은 현재 python.org의 스타일시트에서 존중되지 않습니다.
- PEP에서 이미지를 업데이트하는 기능을 지원하기가 python.org에서는 어렵습니다.
Read the Docs 또는 Netlify와 같은 서드파티 제공자는 풀 리퀘스트 자동 렌더링과 같은 기능으로 이 경험을 향상할 수 있습니다.
사양
PEP 파일을 HTML로 렌더링하기 위해 제안된 사양은 Reference Implementation에 따른 것입니다.
렌더링된 PEP는 peps.python.org에서 제공되어야 합니다. 이러한 PEP는 정적 파일로 호스팅해야 하며, 콘텐츠 전송 네트워크(CDN) 뒤에 배치할 수도 있습니다.
풀 리퀘스트의 미리 보기를 렌더링하는 서비스를 제공해야 합니다. 이 서비스는 호스팅 및 배포 솔루션에 통합할 수도 있습니다.
다음 리디렉션 규칙을 python.org 도메인에 반드시 생성해야 합니다.
/peps/-> https://peps.python.org//dev/peps/-> https://peps.python.org//peps/(.*)\.html-> https://peps.python.org/$1/dev/peps/(.*)-> https://peps.python.org/$1
다음 nginx 구성으로 이를 구현할 수 있습니다.
location ~ ^/dev/peps/?(.*)$ {
return 308 https://peps.python.org/$1/;
}
location ~ ^/peps/(.*)\.html$ {
return 308 https://peps.python.org/$1/;
}
location ^/(dev/)?peps(/.*)?$ {
return 308 https://peps.python.org/;
}
하위 호환성을 위해 URL fragments을 보존하도록 리디렉션을 구현해야 합니다.
하위 호환성
서버 측에서 새로운 표준 URL로 리디렉션하므로, 이전에 게시된 자료에서 이전 URL 스키마를 참조하는 링크도 정상적으로 작동합니다. 모든 PEP는 계속 올바르게 렌더링되며, 참조 구현의 사용자 지정 스타일시트는 일부 요소, 특히 코드 블록과 블록 인용의 표시를 개선합니다. 따라서 이 PEP는 하위 호환성 문제를 일으키지 않습니다.
보안 영향
기본 python.org 웹사이트는 더 이상 원시 HTML 업로드를 처리하지 않으므로 잠재적인 위협 경로가 차단됩니다. PEP 렌더링 및 배포 프로세스는 최신의 잘 유지 관리되는 코드와 안전한 자동화 플랫폼을 사용하여 잠재적인 공격 표면을 더욱 줄입니다. 따라서 부정적인 보안 영향은 없다고 판단합니다.
이 내용을 가르치는 방법
새로운 표준 URL은 문서에 공개됩니다. 그러나 이는 주로 백엔드 인프라 변경이며, 최종 사용자에게 미치는 영향은 최소화될 것입니다. PEP 1과 PEP 12는 필요에 따라 업데이트됩니다.
참조 구현
제안된 구현은 일련의 풀 리퀘스트 [9]를 통해 python/peps 저장소에 병합되었습니다. 이는 사용자 지정 테마(라이트 및 다크 색 구성표 지원)와 확장 기능을 사용하는 Sphinx 문서 시스템입니다.
이 시스템은 이미 모든 커밋에서 모든 PEP를 자동으로 렌더링하고 python.github.io/peps에 게시합니다. 이 시스템의 상위 수준 문서에는 PEP를 로컬에서 렌더링하는 방법과 시스템 구현이 설명되어 있습니다.
거부된 아이디어
위에서 언급한 품질 개선 사항과 이슈 완화책의 일부를 포함하도록 현재의(2021년 11월 기준) 렌더링 프로세스를 수정하는 것은 아마 가능했을 것입니다. 그러나 이것이 분산 도구 문제를 해결할 것이라고는 생각하지 않습니다.
제안된 렌더링 시스템의 출력을 사용하여 python.org로 가져오는 것도 가능했을 것입니다. 복잡성은 상당히 추가되는 반면 제거되는 복잡성은 전혀 없으므로, 이는 양쪽의 단점만 모은 최악의 방안이라고 주장할 수 있습니다.
감사의 말
- Hugo van Kemenade
- Pablo Galindo Salgado
- Éric Araujo
- Mariatta
- C.A.M. Gerlach
각주
Copyright
This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.