앱을 개발할 때 오픈소스에 얼마나 의존해야 할까?

최근에 회사에서 주력으로 사용하는 Angular프레임웍 버전을 12에서 14로 마이그레이션했다. 17년 3월 6버전부터 쓰기 시작하여 지금까지 꾸준히 최신 버전 마이그레이션 작업을 해왔던 이유는 다음과 같다.

첫번째는 당연하지만 버전이 올라가며 개선된 부분을 서비스에 적용하기 위함이다. 번들 사이즈 최적화, 향상된 트리셰이킹, 최신 ECMAScript 적용 (주로 polyfill의 불가피한 성능 저하 코드 제거?), 개선된 기능들 등 마이그레이션을 하면 앱의 성능이 증가되고 사용자 경험의 개선으로 이어진다.

두번째는 최신버전과의 차이가 클 수록 마이그레이션 작업이 어려워질 것이기 때문이다. Angular는 ng-update 스크립트로 자체적으로 대부분의 Breaking Changes에 해당하는 코드를 마이그레이션 해 주긴 하지만 그것만 믿고 앱을 배포할 수는 없다. 6에서 14로 바로 올릴 수 밖에 없는 상황이었다면 지금까지 따라갈 수 없었을지도 모르겠다.

세번째는 개발자의 커리어 확장에 도움이 되기 위함이다. 특히 ECMAScript를 포함해 급변하는 툴들을 익히고 사용하는 과정에서 스터디나 개인 프로젝트로도 얻을 수 없는 값진 경험을 얻을 수 있다. 요즘 뉴스레터에서는 연일 Module Federation에 대해서 떠들어대고 있는데. webpack 4 버전에 머물러 node 버전이 올라가니 실행이 안되는 경험에 머물러 있다면 그것만한 비극이 없다.


이 글에서 마이그레이션 이야기를 하려는 것은 아니었다. 사실 Angular 14 버전의 브라우저 지원 범위 축소에 관련된 문제가 불거지며 문제를 해결하다 보니 외부 라이브러리에 대한 의존에 대해 다시 생각해보게 되었다.

외부 라이브러리를 사용하는 큰 이유는 압도적인 비용 절감 효과 때문이다. 앱을 개발할 때 필요한 모든 기능을 자체구현한다면 v1 배포하기까지 시간이 많이 걸릴것이다. 또 만들어진 코드를 유지보수하는 데 시간을 쓰다 보니 정작 수익으로 이어질 수 있는 기능을 개발하는 것에도 영향을 미친다.

그러다 보니 오랫동안 기능을 자체개발하는것에 대해 부정적인 시선으로 바라보았다. 개인적으로는 “개발에서 신토불이는 별로 안 좋은거 같다” 라는 비유를 들어가며 자체개발에 대한 의견에 대해 나의 의견을 조심스럽게 이야기하곤 했다.

그러다 Angular 14 의 브라우저 지원 범위 축소 이슈를 대응하게 되었는데. Angular 개발팀 측은 생각보다 철저히 브라우저 지원 범위를 축소하는 스탠스를 보였다. 하위 브라우저 지원에 대한 PR까지 올려가며 의견을 전달했지만 돌아오는 대답은 지원범위 축소에 대한 내용이었다.

맥락은 최신 브라우저를 사용하는 사용자가 하위 브라우저 지원으로 인해 불편함을 겪는 것도 문제라는 것이었다. 내가 올렸던 PR뿐만 아니라. 관련된 모든 이슈들에 대해서 같은 입장을 표명하고 있다.

그 의견이 틀린 말은 아니지만. 내가 만든 프레임웍을 많은 사람이 썼으면 좋겠다 하는 어떤 제품을 제공하는 입장에서는 사실 이해가 되지 않는다. 힘들더라도 적절한 지원 범위를 유지하는것이 프레임웍을 사용자들이 계속 사용하게 하고. 또 신규 사용자도 모집할 수 있는것 아닐까?

심지어 내가 올렸던 PR은 최신 브라우저를 사용하는 사람에 대해서는 최신 기술을 경험할 수 있게 해 주고. 옵션을 통해 하위 브라우저를 대응할 수도 있게 하는 수정 내용이었지만. 이마저도 지원범위 축소를 언급하며 받아들여지지 않았다.


그 동안 오픈소스 라이브러리를 사용하며 이런 경우를 겪지는 않았는데. 이번 상황을 겪다 보니 서비스에서 대체할 수 없는 코드에 대해서 메인테이너 쪽에서 크리티컬한 변경 사항을 업데이트 할 때 어떻게 되는지에 대해 크게 느꼈다.

결국 @angular-devkit/build-angular 패키지를 포크하고 위의 변경사항을 적용하여 하위 브라우저 지원을 유지하도록 수정해 사용하고 있다. 하지만 Angular 개발팀 측에서 폴리필도 없는 코드를 사용하고 업데이트를 하고 배포한다면 작게는 몇만에서 몇십만몇의 트래픽을 그대로 포기해야 한다. 그 버전에서 그냥 쭉 서비스를 개발해야 하고. 언젠가 다른 프레임웍으로 변경하지 않을까 싶다.