주요 내용
- 문서자료는 시간이 흐르고 조직 규모가 커질수록 더 중요
- 문서자료 변경도 기존 개발자 워크플로에 통합되어야 함
- 하나의 문서는 하나의 목적에 집중하자
- 문서자료는 작성자가 아니라 독자를 위해 써야함
엔지니어들이 양질의 문서자료를 더 쉽게 작성하도록 하는 비결이 무엇일까요? 바로 현재 개발 워크플로에 긴밀하게 통합되고 조직의 성장에 발맞춰 확장되는 프로세스와 도구입니다. 문서자료를 코드처럼 취급하여 엔지니어링 워크플로에 통합해야 합니다.
이번 장에서 말하는 문서자료(documentation)란 엔지니어가 작업을 끝마치기 위해 작성해야하는 모든 부수적인 텍스트를 의미합니다. 그러므로 별도로 작성한 문서뿐 아니라 코드 주석까지 포함합니다.
문서자료는 이렇게 설계한 이유, 이렇게 코드를 구성한 이유 등을 설명해주는 중요한 역할을 하지만 엔지니어들이 '덜 중요하게' 생각하는 이유가 무엇일까요?
하지만 문서자료는 다음과 같은 혜택을 줍니다.
문서자료는 세월이 흐를수록 더 중요해지며, 특히 핵심 코드를 잘 문서화해두면 조직이 커질수록 지대한 기여를 합니다.
문서자료에도 프로그래밍 언어처럼 규칙이 있고, 구문 규정이 있고, 스타일도 있습니다. 코드와 마찬가지로 일관되어야 하고, 명확해야 하고, 이해를 방해하는 오류를 피해야 합니다. 이는 설명하는 문체를 표준화하고 혼동 요소를 없애 독자가 헷갈리지 않게 하기 위함입니다.
따라서 문서자료는 다음과 같이 취급해야합니다.
엔지니어들이 문서자료를 작성하며 범하는 가장 중요한 실수는 자신만을 위해 쓴다는 것입니다. 좋은 문서자료라 해서 완벽할 필요는 없습니다. 하지만 독자가 누구인지는 꼭 파악한 후에 작성해야 합니다. 그리고 문서를 짧게 쓰는 것이 유리합니다. 독자 유형은 다음과 같이 나눌 수 있습니다.
사용자가 문서 자료를 접하게 되는 방식에 따라서 독자를 구분할 수 있습니다.
[TL;DR문]
구글에서는 어떤 독자에게 적합하지 않은 문서인지도 알려줍니다.
예를들어 다음과 같이 TL;DR문을 사용해 표시합니다.
- TL;DR: 구글의 C++컴파일러가 궁금한 것이 아니라면 더 읽을 필요 없습니다.
마지막으로 고객(ex. API 사용자)이냐 제공자(ex. 프로젝트 팀원)이냐도 중요한 독자 구분 기준입니다. 가능하다면 각각의 독자를 위한 문서를 구분해주는 것이 좋습니다. 각자에게 필요한 정보가 다르기 때문입니다.
다양한 문서자료의 종류가 다름을 알고 서로 섞이지 않게 하는 것도 중요합니다. 하나의 문서는 일반적으로 하나의 목적에 집중해야 합니다.
[코드 주석의 분류]
API 주석
- 구체적인 구현 방법이나 설계 결정 사항을 언급할 필요는 없음
- 사용자가 작성자만큼이나 API에 대해 잘 안다고 가정해서는 안됨
구현 주석
- 읽는 이가 도메인 지식을 상당히 갖추고 있다고 가정해도 됨
설계문서
구글의 팀 대부분은 중요한 프로젝트에 착수하기 전에 설계 문서부터 승인받아야 한다.
튜토리얼
튜토리얼은 프로젝트 환경을 새로 구축하는 과정을 담은 것입니다. 튜토리얼이 아직 없다면 누군가가 팀에 새로 합류했을 때입니다. 튜토리얼에는 어떠한 사전 설정, 권한, 도메인 지식도 가정하면 안됩니다. 무언가 먼저 설정되어 있다고 가정했다면 튜토리얼 앞부분의 사전 요구사항 절에 명시하세요.
개념 설명 문서
어떤 코드는 코드 주석 같은 참조용 문서자료만으로는 부족하여 깊이 있는 설명을 곁들여야 합니다. 이 때 해당 API나 시스템의 개요를 알려주는 개념문서를 첨부합니다. 개념 문서는 참조 문서자료들을 대체하기보다는 보강하는 역할입니다. 개념문서는 명확성이 중요하므로 다소 완전하지 않거나 (완전한 문서 역할은 참조문서가 담당) 때로는 정확성을 희생하곤 합니다.
랜딩 페이지
랜딩 페이지는 홈페이지의 교통경찰 역할을 합니다. 랜딩페이지의 목적을 명확히 인식하고 자세한 정보는 모두 다른 페이지를 가리키는 링크로 대체합니다. 랜딩페이지의 두가지 역할은 1)해당 팀 제품의 고객이나 API 사용자를 위한 goto 페이지 역할이고, 2)다른 하나는 팀의 홈페이지 역할입니다. 절대 두 역할을 한 페이지에서 수행하면 안됩니다.
코드 주석이 문서자료계의 단위 테스트라면, 개념 문서는 통합 테스트이다.
문서자료 역시 리뷰를 거쳐야 합니다. 기술 문서 리뷰에 효과적인 방식은 크게 세가지 입니다.
정확성 확인용 기술 리뷰
주로 해당 주제 전문가가 수행하며, 팀 동료인 경우가 많습니다. 코드 리뷰 과정에서 함께 다루곤 합니다.
명확성 확인용 독자 리뷰
주로 도메인을 잘 모르는 사람이 수행합니다. 팀에 새로 합류한 동료나 해당 API의 고객일 것입니다.
일관성 확인용 작문 리뷰
주로 테크니컬 라이터나 자원자가 수행합니다.
누가 / 무엇을 / 언제 / 어디서 / 왜
대부분의 기술 문서 자료는 HOW에 대한 답을 제시합니다. 하지만 다음 질문들에 답하는 것이 더 도움 될 것입니다.
WHAT: 문서의 목적
WHEN: 문서가 생성되고, 리뷰되고, 갱신된 날짜
WHERE: 문서가 존재해야 할 장소
WHY: 문서의 목적 (=요약, 문서의 소개 부분에 명시)
시작 / 중간 / 끝
문서에 절을 추가하면 내용 흐름을 논리적 조각으로 나눌 수 있습니다. 또한 독자에게 문서가 다루는 내용의 로드맵을 제시할 수 있습니다. 각 절의 도입 단락에서 핵심을 요약해 알려준 후, 해당 절의 나머지에 구체적으로 사례를 설명하는 방법이 좋습니다.
좋은 문서자료의 특징
완전성(Completeness), 정확성(Accuracy), 명확성(Clarity) 이 세가지가 좋은 문서의 특징이지만 하나의 문서에 세 특징을 다 담기는 어렵습니다. 결국 '좋은 문서'란 의도한 역할을 잘 수행하는 문서여야 합니다.
문서 폐기하기
본래의 목적을 더 이상 수행할 수 없다면 폐기하거나 '폐기 대상'으로 표시해야 합니다. 구글에서는 문서자료에 '신선도 보증 기간freshness date'을 붙여두곤 합니다.
구글은 예전에 중요하다고 생각되는 프로젝트에는 팀에 정말 필요한지와 상관없이 테크니컬 라이터를 배정하는 경향이 있었습니다. 하지만 이는 잘못된 가정으로 판명됐습니다. 엔지니어들은 팀에 필요한 문서자료를 스스로 완벽하게 작성할 수 있습니다. 테크니컬 라이터가 필요한 경우는 오직 팀원 외 독자를 위한 문서를 작성할 때뿐입니다.