API(Application Programming Interface) 사용자가 충분히 많아지면, 계약에 무엇을 적었든 시스템의 관찰 가능한 모든 동작에 누군가는 의존하게 된다는 법칙. 구글의 하이럼 라이트(Hyrum Wright)가 라이브러리 변경 경험에서 관찰했고, 『Software Engineering at Google』에 소개됐다.
- 공식 명세뿐 아니라 응답 시간, 에러 메시지 문구, 결과의 정렬 순서, 버그까지 의존 대상이 된다
- 그래서 실질적인 계약은 문서가 아니라 실제로 관찰되는 동작 전체다
- 운영체제가 문서화되지 않은 동작에 기대는 오래된 프로그램을 위해 옛 동작을 남겨 두는 것이 대표적인 예다
설계에 주는 교훈
- 공개하는 동작을 처음부터 좁게 잡는다. 순서를 보장하지 않는다면 일부러 섞어서 내보내는 라이브러리도 있다
- 바꿀 때는 한 번에 깨지 말고 새 것과 옛 것을 함께 두는 단계를 거친다(병렬 수정 (팽창-수축))
- 더하기는 쉽고 빼기는 어렵다: 기능이나 옵션은 한번 내보내면 누군가 쓰기 시작해 거둬들이기 어렵다. 추가하기 전에 정말 필요한지 따져 보는 이유다
- 놀랍지 않은 동작을 고르면 나중에 바꿀 일도 줄어든다(최소 놀람의 원칙)
받는 쪽에 관대하라는 포스텔의 법칙는 이 문제를 키울 수 있다. 관대하게 받아 준 잘못된 입력이 곧 의존 대상이 되기 때문이다.
출처: Laws of Software Engineering: Hyrum's Law · Hyrum's Law 하이럼 라이트