brunch

You can make anything
by writing

C.S.Lewis

by Extreme Code Jan 26. 2021

오픈소스를 함부로 사용하면 안되는 이유

어떤 기술이든 잘 이해하고 사용해야 한다.

  업계에서 일을 하다 보면 일반적인 개발자와 비교되는 뛰어난 개발자들이 있습니다. 그런 개발자들의 특징은 여러 가지를 꼽을 수 있겠지만, 문제해결력이 뛰어나며 다른 개발자들이 하지 못하는 것을 실현 해 내곤 합니다. 그래서 SW업계에서는 개발자 몸값도 극과 극으로 나뉘는 것이라고 생각합니다.


뛰어난 개발자의 특징 중 한 가지로 저는 오픈소스 활용을 꼽고 싶습니다. "오픈소스는 다 공개되어 있으니 그냥 가져다 쓰면 되는 것 아니야?" 라고 생각하는 경우도 있지만, 제가 말하는 오픈소스 활용은 해당 기술에 대한 깊은 이해를 하고 사용을 하는 것인지, 아니면 그냥 메뉴얼만 보고 가져다 쓰는 것인지를 의미합니다.


유명한 오픈소스들은 메뉴얼이나 튜토리얼이 잘 되어 있기 때문에, 누구나 쉽게 가져다 쓸 수 있습니다. 대학생 개발자들도 오픈소스를 많이 활용하여 프로젝트를 하고 포트폴리오를 만들곤 하지요. 단순히 가져다 쓰는건 어렵지 않습니다. 정말 어려운 것은 문제가 발생했을 때 그것을 해결할 수 있는가 입니다.


현업에서 일 하다 보면, 많은 오픈소스를 활용하게 되는데 이 때 오픈소스 자체에서 문제가 발생하는 경우가 꽤 있습니다. 아니면 해당 라이브러리에서 제공하지 않는 기능을 구현해야 하는 경우도 있구요. 이런 경우 오픈소스 라이브러리 자체를 수정하거나 기능을 추가하거나 내부 코드를 분석하는 등의 작업이 필요한 경우가 많습니다. 지금까지 제가 경험해 본 바로는 이런 부분에서 개발자의 실력이 갈리게 됩니다.


또한, 단순히 프로토타입이 아닌 사용자가 있는 제품/서비스를 만들 때는, 오픈소스를 사용하더라도 잘 살펴보고 사용해야 합니다. 단지 요즘 트렌드라서, 인기가 많아서 사용하는 것은 나중에 큰 문제를 야기할 수 있습니다.


회사에서 겪은 경험

실제로 회사에서 겪었던 일입니다. 어느 날 갑자기 개발 서버에서 새로 배포된 시스템이 제대로 동작하지 않았습니다. 시스템은 docker container로 배포되어 런타임은 동일하고, 사용되는 라이브러리 버전은 동일했는데 왜 안되는지 분석을 진행했습니다.


원인은 tensorflow에서 사용되는 h5py 라이브러리 문제였습니다. tensorflow 버전은 명시되어 있지만, 해당 버전에서 의존성을 가진 h5py 버전이 명시되지 않아서 pip 에 배포된 h5py 버전이 올라가면서 에러가 발생했던 것이었습니다. 이런 문제는 h5py의 버전을 명시해서 쉽게 해결할 수 있었습니다. 그리고 실서버 배포 전 미리 다 확인이 되는 시스템이 갖추어져 있기 때문에 별 문제 없이 넘어갈 수 있었습니다.


여기서 중요한 것은 github star 가 15만개가 넘어가는 tensorflow와 같은 유명한 라이브러리도 이러한 문제가 생길 수 있다는 점이고, 그렇기 때문에 주의해서 사용 할 필요가 있다는 것입니다. 그리고 현업에서 다양한 라이브러리를 활용해서 개발하다 보면 꽤나 다양한 문제들을 경험할 수 있습니다.


위의 문제는 꽤나 사소한 문제이고, 실제로 서비스를 운영하는데 필수적인 오픈소스에서 특정 상황에서 버그가 발생한다거나, 특정 상황을 커버하지 못한다고 하면 큰 문제가 발생하게 됩니다. (그리고 실제로 많은 회사에서 이런 케이스는 꽤 많이 발생합니다)



오픈소스를 잘 활용하려면

그러면, 오픈소스를 어떻게 잘 활용할 수 있을까요?

"나는 xx를 사용해 봤다" 가 중요한 게 아니라, "나는 xx의 코드와 아키텍쳐를 분석 해 봤다" 가 중요한 것입니다.

물론 모든 오픈소스를 다 살펴볼 수는 없습니다. 다만, 자신이 잘 활용하는 라이브러리 중 유명한 것들에 관해서는 해당 라이브러리의 구조를 설명한 글을 읽어보고 이해하거나, 내부 코드를 살펴보는 등의 노력은 해 보는 것이 좋습니다. 물론 개발자는 항상 공부할 게 많고 바쁘기 때문에 이렇게 하기는 쉽지 않습니다. 보통은 문제가 발생해서 수정이 필요하거나, 새로 추가할 기능이 있거나 하면 해당 오픈소스를 분석하게 됩니다. 이런 접근 방식도 좋은 방향이라고 생각됩니다.

어찌 되었건 중요한 것은, 단순히 라이브러리를 쓰는 게 아니라 그 구조나 알고리즘을 이해할 필요가 있다는 점입니다.


실용적인 관점에서 보자면,

- 기술을 선택할 때 트렌드가 아니라 해당 라이브러리를 디테일하게 분석하고 선택

- 운영 시에는 배포 프로세스를 체계화

- 테스트를 꼼꼼히 잘 작성

같은 개발 프로세스를 통해서 라이브러리 활용에서 발생하는 문제를 줄일 수 있을 것입니다.








매거진의 이전글 지금까지 개발을 하며 느낀 생각들
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari