결정-0056: 정적 분석 도구의 역할을 셋으로 나눈다
상태
Accepted
맥락
코딩 표준을 문서로 적으면 지켜지지 않습니다. 검토자가 포맷과 명명을 지적하는 데 리뷰 시간을 쓰게 되고, 정작 설계에 대한 논의는 뒤로 밀립니다.
도구를 도입할 때 흔히 하나에 전부 맡깁니다. 그러면 자동으로 고칠 수 있는 항목이 개발자에게 오류로 전달됩니다. 들여쓰기가 틀렸다는 메시지를 받고 사람이 손으로 고치는 상황이 되며, 도구가 해 줄 일을 사람이 합니다.
결정
도구 세 종을 도입하고 역할을 겹치지 않게 나눕니다.
| 역할 | 하는 일 | 원본 |
|---|---|---|
| 포맷터 | 포맷을 기계가 재작성합니다. 개발자가 포맷을 관리하지 않습니다 | 빌드 설정 |
| 컨벤션 검사기 | 명명 규칙과 금지 패턴을 빌드 오류로 처리합니다 | 규칙 설정 파일 |
| 버그 패턴 탐지기 | 바이트코드를 분석해 결함 패턴을 찾습니다 | 빌드 설정 |
컨벤션 검사기에 포맷 규칙을 넣지 않습니다. 두 도구가 같은 항목을 다루면 한쪽은 고쳐 주고 다른 쪽은 실패시키는 상태가 됩니다.
규칙의 원본은 설정 파일입니다. 문서가 규칙을 옮겨 적지 않고 파일을 참조합니다. 정당한 예외는 억제 목록에 사유 주석과 함께 등록하며, 그 목록이 표준 이탈 위치와 사유의 등록부 역할을 합니다.
검토한 대안
도구 하나로 통합한다
| 구분 | 내용 |
|---|---|
| 장점 | 설정이 한 곳입니다. 도입과 학습 비용이 낮습니다 |
| 단점 | 자동 수정 가능한 항목이 오류로 전달됩니다. 포맷 규칙과 컨벤션 규칙의 성격 차이가 사라집니다 |
| 기각 사유 | 포맷은 협의 대상이 아니라 기계가 정하는 것이라는 전제가 무너집니다 |
문서와 리뷰로 관리한다
| 구분 | 내용 |
|---|---|
| 장점 | 도구 도입 비용이 없습니다 |
| 단점 | 리뷰 시간이 포맷과 명명에 쓰입니다 |
| 기각 사유 | 문서상의 규약은 준수를 보장하지 못합니다 |
결과
리뷰에서 포맷과 명명 지적이 사라지고 설계 논의만 남습니다. 표준이 사람의 기억이 아니라 파일에 있습니다.
감수하는 것은 도구 세 개의 설정을 유지해야 한다는 점입니다. 버전이 올라가며 기본 규칙이 바뀌면 기존 코드가 갑자기 실패할 수 있으므로, 버전 상향은 별도 커밋으로 다루고 그때 발생한 위반을 함께 정리합니다.
생성 코드는 세 도구 모두에서 제외합니다. 우리가 쓰지 않은 코드에 우리 표준을 적용할 이유가 없습니다.