본문 바로가기
Cowork

[구글 엔지니어는 이렇게 일한다] 하이럼의 법칙, Hyrum's Law

by 너드나무 2024. 11. 24.
반응형

하이럼의 법칙, Hyrum's Law

API의 명시적 계약 외에도, 외부 사용자들은
API가 제공하는 모든 관찰 가능한 동작의존하게 될 것이다.

 

구글의 소프트웨어 엔지니어 하이럼 라이트(Hyrum Wright)가 제시한 개념으로, API나 인터페이스에서 의도적으로 문서화되지 않거나, 내부적으로만 사용할 것으로 설계된 동작이라 하더라도 사용자(특히, 외부 사용자)는 이를 활용하게 되고, 결국 해당 동작이 사실상의 계약(작동할 수 있는 모든 행위에 대한 정의)처럼 작용하게 됩니다.

하이럼의 법칙이 중요한 이유

  • API 안정성의 필요성
    • 사용자들이 의존하는 동작이 예상치 못한 방식으로 사용될 가능성인정해야 합니다.
    • 이를 통해, 안정적인 API 설계가 이루어질 수 있습니다.
  • 버전 관리와 하위 호환성의 중요성
    • API의 관찰 가능한 모든 동작이 계약으로 작용합니다.
    • API를 변경할 때 하위 호환성을 유지하지 않으면 사용자들에게 큰 영향을 미칠 수 있습니다.
  • 테스트의 필요성
    • 문서화된 계약뿐 아니라, 관찰 가능한 모든 동작테스트하여 예상치 못한 변경으로 인한 영향을 최소화해야 합니다.

하이럼의 법칙을 고려한 API 설계 원칙

  • 문서화를 철저히 할 것
    • API의 명시적인 계약뿐 아니라, 비공식적으로 관찰 가능한 동작도 문서화하여 사용자가 이를 명확히 이해할 수 있도록 해야 합니다.
  • 구현 세부사항 노출 최소화
    • 의도치 않은 동작이 계약처럼 여겨지는 것을 방지하기 위해, 내부 구현 세부사항은 최대한 캡슐화해야 합니다.
  • 하위 호환성을 고려한 변경
    • API를 변경할 때 기존 사용자들이 의존하고 있을 수 있는 모든 동작(명시적/비명시적)을 고려해야 합니다.
  • 사용자 행동 분석
    • API 사용 패턴을 분석하여, 사용자가 문서화되지 않은 어떤 동작에 의존하고 있는지 파악해야 합니다.

실제 사례

  • JavaScript의 Array.sort()
    • 초기 Array.sort() 메서드정렬 알고리즘의 안정성(같은 값의 상대 순서 유지)을 보장하지 않았습니다.
    • 그러나 개발자들이 이를 안정적인 알고리즘으로 간주하고 사용했으며, 이를 수정하려는 시도가 많은 문제를 야기했습니다.
  • Linux 커널 인터페이스
    • Linux 커널은 내부 인터페이스의 세부사항에 대한 문서를 제공하지 않았지만, 많은 외부 소프트웨어관찰된 동작에 의존해 개발되었습니다.
    • 이후 커널 내부 동작 변경으로 인해 여러 드라이버와 소프트웨어가 고장난 사례가 있었습니다.
  • 웹 브라우저의 CSS 동작
    • 특정 브라우저의 CSS 해석 방식에 의존하여 개발된 웹사이트가 많습니다.
    • 브라우저가 이를 수정하거나 표준 준수를 강화했을 때, 기존 사이트가 작동하지 않는 문제가 발생했습니다.

 

728x90
반응형