- 제안자 : <주요 제안자 이름>[, <공동 제안자 이름> ...]
- 제안일 : <제안한 날짜 YYYY-mm-dd>
- 수정일 : <수정한 날짜 YYYY-mm-dd>
- 상태 : <제안됨|진행중|반영됨|반려됨|폐기됨>
- PR: <PR 번호>
- Issue: <관련 이슈 번호, 저장소/이슈 포맷 사용>
rfcs 저장소는 인프라 관리 및 사내 시스템 전반에 대한 현재 상태와 장기적인 제안 및 논의를 하는 공간이다. 여기서는 단기적으로 처리되는 각 저장소의 이슈와 달리 특정한 저장소에 속하지 않거나, 팀 내에서 장기적으로 고민해야 할 제안들을 토론하고 적용한다.
rfcs는 장기적인 개선과 팀원들의 자유로운 제안과 토론을 위해서 만들어졌다. 여기서 장기적인 개선의 대상이란, 프로그래밍 스타일 가이드나 SSL에 대한 관리 정책과 같이, 단번에 처리할 수 없고 장기적인 논의를 통해 해결해나갈 문제를 가리킨다. 특히 지엽적으로 이루어지는 결정들은 팀원 간에 공유가 되지 않을 뿐만 아니라, 최악의 경우 시간이 지나면서 그 결정이 어떤 맥락에서 이루어졌는지 잊혀지기 쉽다. rfcs를 통해서 해결해야 할 문제를 좀더 구체적으로 정의하고 토론할 수 있을 뿐만 아니라, 어떤 맥락에서 결정이 이루어졌는지에 대해 물리적/시간적으로 멀리 떨어진 다른 팀원에게 전달할 수 있다.
이는 rfc, Python PEPs, Rust rfcs 등을 본받아 만들어졌다. 기본적으로 현재 문서의 포맷을 따르되, 이러한 문서를 참조해서 작성하면 된다.
rfcs는 git 저장소로 github에서 관리된다. 제안자는 [rfcs 저장소]를 포크하고 제안 문서를 작성한다. 제안 문서를 작성한 후 풀 리퀘스트를 원본 저장소에 보낸다. 이때 부여되는 풀 리퀘스트 번호가 rfc 번호가 되며, 풀 리퀘스트 상에서 수정해서 이 번호를 파일 이름에 반영한다. 팀원들은 풀 리퀘스트 상에서 자유롭게 논의하고 제안을 다듬어 간다. 최종적으로 제안이 머지되면 이는 '진행 중' 상태가 되며, 제안에 대한 모든 내용이 반영되면 '반영됨' 상태로 전환된다.
[rfcs 저장소]:
제안의 상태는 다음과 같이 다섯 가지로 정의한다.
- 제안됨 - 작성자가 제안한 상태다. 머지 전후로 토론이 진행될 수 있다.
- 진행 중 - 관련된 사람들이 제안을 승인하고, 작업이 진행되고 있는 상태다.
- 반영됨 - 제안이 모두(혹은 거의 모두) 시스템에 반영된 상태다.
- 반려됨 - 제안에 대한 토론 과정에서 문제점을 발견했거나, 다른 이유로 적용하기 어려운 경우 제안은 반려된다.
- 폐기됨 - 제안이 과거에 반영되었으나, 이후에 다른 이유로 시스템에서 더이상 사용하지 않는 경우에 제안은 폐기된다.
제안에 대해 예상되는 문제점을 작성한다.
제안에 대해 대안이 될 만한 방법과 대안을 선택하지 않은 이유를 작성한다.
개별 프로젝트의 이슈는 rfcs에서 다루지 않는다. 기본적으로 각 이슈는 이슈가 속한 프로젝트에서 다룬다. rfcs에서 다루는 제안은 일반적으로 전체 업무에 영향을 주는 부분을 다룬다. 예외적으로 개별 프로젝트에 관련된 문제라도 아주 중요한 사안이라면 rfcs에서 다룰 수 있다.