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 스타일이기는 하나 사용에 큰 무리는 없음
- 완결성: 대부분 문제 없으나 저장 장치의 데이터 영속 처리 등 세부 이슈 있음
- 보편성: Windows의 cmd.exe를 제외하면 대부분의 터미널에서 지원함
- 안정성: 1991년 이후 변경 없음
- 깊이: 직접 표준을 만드는 것이 터무니없이 힘듦
- 사용성: Esc 캐릭터로 인한 난독성을 제외하면 무난함
- 완결성: 하드웨어 의존성 걱정이 매우 적음
- 보편성: 웹 브라우저가 전 세계 거의 모든 환경에 설치됨
- 안정성: 강력한 하위 호환성 정책
- 깊이: 자체 브라우저 제작은 현실적으로 불가능할 정도로 깊음
- 사용성: 약간의 복잡함 있으나 문서화와 개발 도구 우수함
- 완결성: 파일, 오디오, 비디오 등 특이 상황 제외하면 매우 완결성이 높음
Dependency cooldown
의존성 쿨다운(dependency cooldown) 은 오픈소스 공급망 공격의 대부분을 완화할 수 있는 간단하고 효과적인 보안 기법
- 공격자는 보통 인기 오픈소스 프로젝트를 탈취해 악성 코드를 배포하지만, 대부분의 공격 노출 기간이 일주일 이하로 짧음
- 새 버전 공개 후 일정 기간(예: 7일) 대기하는 쿨다운을 설정하면, 자동 업데이트로 인한 감염 위험을 크게 줄일 수 있음
- Dependabot, Renovate, pnpm 등은 이미 쿨다운 기능을 기본 지원하며, 설정이 쉽고 추가 비용이 없음
- 패키지 관리자 수준에서 쿨다운을 기본 제공하면, 공급망 보안 강화와 불필요한 경보 감소에 기여 가능