오픈소스 라이브러리 리스크 관리
2022년 초 발생한 faker.js와 colors.js 사태는 오픈소스 생태계의 구조적 취약점을 드러낸 대표 사례다. 두 라이브러리의 개발자 Marak Squires는 대기업들이 자신이 만든 라이브러리를 무상으로 사용하면서도 금전적 지원을 하지 않는 데 대한 불만으로, faker.js는 GitHub 저장소의 코드를 전부 삭제했고 colors.js에는 무한 루프와 "LIBERTY! LIBERTY! LIBERTY!" 문구를 출력하는 코드를 의도적으로 추가해 두 라이브러리에 의존하던 수천 개 프로젝트에 장애를 일으켰다. 이후 문제 버전의 colors.js는 npm에서 삭제됐고, faker.js는 사용자 개발자 8명이 메인테이너로 참여하는 커뮤니티 프로젝트로 전환됐으며, GitHub는 Marak Squires 계정을 일시 정지했다가 이후 복원했다.
이 사건은 오픈소스의 양면성을 상징적으로 보여준다. 비용 절감, 코드 접근을 통한 확장성, 전 세계 개발자 기여로 인한 빠른 기능 추가·버그 수정, 커뮤니티 지원이라는 장점 이면에는 소스 공개로 인한 보안 취약점 노출 가능성, 메인테이너 개인의 사정에 좌우되는 유지관리 중단 위험, 라이선스 오해에 따른 법적 문제, 라이브러리 간 의존성 충돌 같은 단점이 함께 존재한다. 특히 이 사태는 단 한 명의 개인 개발자의 의사결정이 이를 의존하는 조직 전체의 안정성을 흔들 수 있다는 공급망 리스크를 실증했다.
실무에서는 이런 리스크를 낮추기 위한 몇 가지 원칙이 제안된다. 첫째, 의존성 버전을 관리할 때 `^`·`~` 같은 자동 업데이트 범위 지정을 지양하고 실제로 검증된 안정 버전을 고정해 사용한다. 둘째, 사용 중인 오픈소스 프로젝트의 커뮤니티·이슈를 주기적으로 확인해 보안 취약점이나 유지관리 중단 징후를 조기에 파악한다. 셋째, 자주 쓰는 라이브러리마다 대체 가능한 후보를 미리 파악해 두어 이슈 발생 시 빠르게 전환할 수 있도록 대비한다. 넷째, 실제로 유용하게 사용하는 오픈소스에는 후원(donation)이나 코드 기여로 메인테이너를 지원하는 것도 장기적으로 생태계의 지속가능성을 높이는 방법이다.
핵심 내용
- faker.js·colors.js 사태(2022): 메인테이너 Marak Squires가 경제적 불만으로 라이브러리를 의도적으로 훼손
- faker.js는 코드 전체 삭제 후 커뮤니티(8인 메인테이너) 프로젝트로 전환, colors.js 문제 버전은 npm에서 삭제
- 오픈소스의 장점(비용 절감·확장성·속도·커뮤니티)과 단점(보안 취약·유지관리 중단·라이선스·호환성)이 동시에 존재
- 개인 메인테이너 의사결정에 좌우되는 공급망 리스크를 실증한 사례
- 대응 원칙: `^`/`~` 버전 범위 지양(검증된 버전 고정), 주기적 이슈 모니터링, 대체 라이브러리 사전 파악, 후원·기여를 통한 생태계 지원
관련 개념
출처
- faker.js와 colors.js 사태를 통해 살펴보는 오픈소스의 양면성 — 2024-08-12, Byul.Kim