대부분의 설계 검토는 첫 질문에서 멈춘다. 요청이 결정이 아니라 제품을 설명하기 때문이다. 흐름, 소유자, 실패 시 동작을 명시한 브리프는 한 번의 회의로 답할 수 있다. 안전한 VPN을 구축하라는 브리프에는 아예 답할 수 없다. 무엇이든 보내기 전에 아래 여섯 가지 점검을 거치면 검토는 논쟁이 아니라 비교가 된다.

첫째, 그 질문은 결정인가 바람인가

결정에는 대안과 그 사이를 고를 관찰이 있다. 하나를 고르기 위해 무엇을 볼지 말할 수 없다면 그 질문은 아직 바람이다. 먼저 대안을 적는다. 목록이 두 항목뿐이어도 괜찮다. 그다음 그것을 가르는 절충을 적는다.

바람은 독자도 숨기는 경향이 있다. 설계를 누가 승인해야 하는지 말한다. 같은 브리프라도 네트워크 소유자, 보안 검토자, 재무 승인자에게는 다르게 읽힌다.

답이 아무도 아니라면 여기서 멈춘다. 소유자 없는 결정은 가장 크게 불평하는 사람이 다시 만들기 때문이다. 그것은 설계 문제가 아니라 거버넌스 문제다.

둘째, 흐름과 거부를 명시한다

작동해야 하는 모든 흐름에 대해 출발지, 목적지, 애플리케이션을 나열한다. 그다음 계속 실패해야 하는 흐름을 나열한다. 조용히 허용하는 설계는 그렇게 말하지 않고 요구사항을 바꾼 것이다. 주소 중복과 상류 도달성은 놀라움이 아니라 제약으로 이 목록에 들어간다.

방향에 대해 구체적으로 쓴다. 본사로 연결을 시작할 수 있는 사이트는 그것을 받아들일 수만 있는 사이트와 다른 설계이며, 그 차이는 이후 쓰는 모든 규칙에 나타난다.

에이전트가 있는 관리 기기는 사용자가 가져온 노트북이 할 수 없는 일을 할 수 있으므로 클라이언트와 그 관리 상태도 적는다.

목록은 검증할 수 있을 만큼 짧게 유지한다. 검증할 수 있는 흐름 열 개가 검증할 수 없는 마흔 개보다 낫다.

점검 3: 사실과 가정을 분리한다

검증한 모든 진술을 표시하고, 검증하지 않은 것도 표시한다. 공인 주소 지정, 사용 가능한 처리량, 관리자 접근이 답을 가장 자주 바꾸는 세 가지 가정이다. 그중 하나가 알려지지 않았다면 어느 쪽으로 드러나든 설계가 어떻게 바뀌는지 말한다.

예시 네트워크는 라벨을 붙이면 괜찮다. 문제는 한 번도 가져본 적 없는 두 번째 상류 회선이나 공인 주소 블록을 조용히 얻는 가상의 지사다.

측정된 사실 하나가 논의의 가지 전체를 없애므로, 검토 전에 확인할 수 있는 가정을 확인한다.

ip route get 10.50.0.10
traceroute -n -m 6 10.50.0.10
nc -vz 10.50.0.10 443

넷째, 실패 계약을 쓴다

터널이 내려갔을 때 무슨 일이 일어나는지 말하고, 두 가지 다른 약속에 대해 분명히 한다. 재연결 후 새 연결을 복구하는 것은 약속하기 쉽다. 실패를 넘어 이미 설정된 세션을 유지하는 것은 훨씬 강한 요구이며 기술 선택을 제약한다.

그다음 대체 경로를 정한다. 트래픽을 차단하거나, 다른 승인된 경로로 보내거나, 애플리케이션별로 다르게 한다. 직접 경로로 조용히 되돌아가는 것도 아무도 적지 않았더라도 설계 결정이다.

지사가 열화 상태로 운영될 수 있는 시간과 사고를 누가 선언하는지 같은 복구 목표를 쉬운 말로 추가한다.

점검 5와 6: 이음매를 고르고 변경을 기록한다

모든 것을 해결하려는 검토는 아무것도 해결하지 못하므로, 논쟁할 이음매 하나를 고른다. 라우팅, 권한 부여, 암호화는 서로 다른 세 이음매이며, 브리프는 질문이 어느 것에 관한지 말해야 한다. RFC 4301은 여기서 유용한 상기다. 정책 결정, 보호된 트래픽, 보안 연관을 하나의 객체로 취급하지 않고 분리하기 때문이다.

그다음 결정 이후 무엇이 바뀌었는지, 수정된 가정을 포함해 기록한다. 그 기록이 다음 검토를 더 짧게 만든다.

git diff --stat design/vpn-brief.md
grep -n 'assumption' design/vpn-brief.md
ip route get 10.50.0.10

여섯 가지 점검을 모두 통과한 브리프는 답이 있는 질문을 만든다. 설계가 명시된 흐름과 실패 계약을 충족하거나, 명시된 제약이 그것을 막는다. 나중에 제약이 바뀌면 기록은 어느 결정을 다시 볼지, 어느 것이 유지될 수 있는지 보여준다. 그래서 이 연습은 일회성 논쟁이 아니라 재사용 가능한 것이 된다.

관련 글