Skip to content

Library dependency

라이브러리 의존성 (종속성)

a relationship described in and managed by a software dependency manager tool to mitigate dependency hell

NIH(Not Invented Here)가 잘못된 의존성보다 훨씬 저렴함

의존성은 무료 기능처럼 보이지만, 실제로는 다양한 비용과 복잡성을 동반함

  • 잘못된 의존성은 러닝커브, 갑작스런 인터페이스 변경, 배포·설치 문제 등 다양한 리스크를 초래함
  • 대표 사례로 TigerBeetle은 보안·성능·운영 단순성을 위해 "제로 의존성" 정책을 지향함
  • 저자는 의존성 평가 프레임워크(보급성, 안정성, 깊이, 사용성, 완전성) 를 제안함
  • 좋은 의존성과 나쁜 의존성을 구별하는 비판적 사고와 의존성 선택 시 단기 생산성만이 아니라 전체 비용과 위험을 감안한 신중한 판단이 필수임

좋은 의존성 사례

  • POSIX 시스템 호출
    • 보편성: Linux, Android, macOS, BSD 등 거의 모든 플랫폼에서 사용 가능함
    • 안정성: 인터페이스 호환성이 매우 높고 변화 거의 없음
    • 깊이: 단일 API로 수십만 줄의 커널 코드 감춤
    • 사용성: 다소 전통적인 C 스타일이기는 하나 사용에 큰 무리는 없음
    • 완결성: 대부분 문제 없으나 저장 장치의 데이터 영속 처리 등 세부 이슈 있음
  • ECMA-48 터미널 제어 코드
    • 보편성: Windows의 cmd.exe를 제외하면 대부분의 터미널에서 지원함
    • 안정성: 1991년 이후 변경 없음
    • 깊이: 직접 표준을 만드는 것이 터무니없이 힘듦
    • 사용성: Esc 캐릭터로 인한 난독성을 제외하면 무난함
    • 완결성: 하드웨어 의존성 걱정이 매우 적음
  • 웹 플랫폼 (Web API, HTML, JS, CSS 등)
    • 보편성: 웹 브라우저가 전 세계 거의 모든 환경에 설치됨
    • 안정성: 강력한 하위 호환성 정책
    • 깊이: 자체 브라우저 제작은 현실적으로 불가능할 정도로 깊음
    • 사용성: 약간의 복잡함 있으나 문서화와 개발 도구 우수함
    • 완결성: 파일, 오디오, 비디오 등 특이 상황 제외하면 매우 완결성이 높음

See also