- Rust 생태계에서는 유지보수 중단 의존성이 RUSTSEC에 오르는 순간, 직접 문제가 없던 라이브러리도 사용자와 CI를 통해 기술 부채가 됨
insta가 의존하던yaml-rust는 원 작성자의 관심이 줄어든 뒤 기능 요청과 버그가 쌓인 상태였음- RUSTSEC 등록 이후 직접·간접 사용자들의 CI가 실패했고, 금융 비유로는 등급 하락과 마진콜이 발생한 셈임
- 대체 라이브러리나 포크도 뚜렷한 해법이 아니어서, 의존성을 바꿔도 유지보수 부담과 새 의존성 위험이 남음
- 최종 대응은
yaml-rust코드를insta안에 벤더링하는 것이었고, 부실 기술 부채를AAA로 포장한 CDO에 가깝다는 비판으로 이어짐
yaml-rust 의존성이 기술 부채로 드러난 과정
insta는yaml-rust에 의존하고 있었고,yaml-rust는 원 작성자가 관심을 잃은 뒤 이슈가 계속 쌓인 상태였음- 일부는 기능 요청이고, 일부는 실제 버그였음
insta유지보수자는 해당 문제를 직접 겪지 않았지만, 유지보수 중단 의존성이라는 점에서 기술 부채였음
yaml-rust가 RUSTSEC 데이터베이스에 추가되는 논의에 오르면서 상황이 바뀜- RUSTSEC는 금융 비유에서 등급 평가 기관 역할을 함
- 등록 이후
yaml-rust를 직접 또는 간접으로 쓰는 많은 프로젝트의 CI가 몇 분 안에 실패하기 시작함 - 사용자들이
insta유지보수자에게yaml-rust사용 문제를 지적하면서, 금융 비유상 마진콜이 발생한 셈이 됨
선택지와 실제 대응
- 대안으로 갈아타는 방식은 매력적이지 않았음
- 한 대안은
yaml-rust의 포크이고, 유지보수자가 1명뿐이며 의존성 3개를 추가함 - 그중 하나는 이미 “B-” 등급을 받은 상태였음
- 생태계의 다른 선택지는 지적받기 전에 기본값을 바꾸는 결정을 했음
- 한 대안은
- 직접 포크하는 방식도 근본 해결책이 아니었음
- 포크한 라이브러리에는 같은 유지보수 요구가 따라옴
- 버그 리포트에 대응하지 않으면 결국 기존
yaml-rust처럼 지적받게 됨 - 따라서 포크는 시간을 벌 수는 있지만 문제를 없애지는 못함
- 실제 대응은
yaml-rust코드를insta안으로 합치는 벤더링이었음insta는 이제insta코드와yaml-rust가 합쳐진 형태가 됨- 이는 부실 기술 부채를
AAA로 격상한 것 같은 구조임 - 제목의 CDO는 2007년 금융위기 때 악명 높아진 부채담보부증권을 가리킴
- 최종 평가는 “아무도 이기지 못했다”에 가까움
- 문제 코드는 사라지지 않았고, 위치만
insta내부로 옮겨짐 - 외부 의존성으로 보일 때의 압박은 줄었지만, 유지보수 부담 자체는 남아 있음
- 문제 코드는 사라지지 않았고, 위치만