okinawaaRESUMEGITHUB

오픈소스와 함께 성장하기

2023년 8월 5일

오픈소스에 정말로 관심이 많은 내가 오픈소스를 통해 성장한 과정을 정리하려고 한다. 기술적 성장에 목마른, 그리고 더 나은 개발 생태계를 만드는것을 꿈꾸는분들이 읽어주시면 좋을 것 같다.

불과 1년전까지만 해도 오픈소스가 무엇인지도 몰랐고, npm 에서 라이브러리를 설치하여 다른 사람이 만들어둔 도구를 사용하기에만 급급했던 시절이 있었다. 그 모든 도구들이 누군가의 폭죽이자 그 속에서 잔치가 열리고 있던 것도 몰랐었다.

목차

  1. 오픈소스에 관심을 갖게 된 이유
  2. 내가 오픈소스를 체화하는 방법
  3. 좋은 오픈소스란?
  4. 오픈소스를 통해 성장하기
  5. 더 나은 생태계

오픈소스에 관심을 갖게 된 이유

내가 다녔던 첫 회사는 열정적인 개발자들로 이루어진 작은 팀이었다. 그 팀에서 많은 프로젝트를 진행하였고 프로젝트를 점점 진행하자, 입사 초반에 가진 실력 성장 기울기가 점점 완만해진다고 생각했다. 실무에 처음 들어와서 초반에는 다양한 지식을 습득했지만, 점점 내가 익숙한 방식 내가 아는 범위 내에서 개발하는 데 익숙해지는 나를 발견했다. 아무래도 Comfort Zone에 빠졌었던 것 같다. 내 방식대로 서비스를 구현해도, 작동되었기 때문이다. 그때 마침 더 잘 구현할 수 없을까? 더 기술적으로 성장할 수 없을까? 라는 물음을 자기 자신에게 했던 것 같다.

완만해진 성장 기울기에 두려움을 느꼈을 수도 있다. 그 당시에 팀 내 구성원들끼리는 항상 코드 리뷰를 하고, 서로가 아는 기술적 지식 레벨이 비슷해지는 시기까지 도달했다고 생각해서 팀 내적이 아닌, 팀 외부에서 성장의 발판을 찾아 팀 내부의 성장에 기여할 수 있다고 생각했다. 그때 오픈소스라는 개념을 알게 되었고, 세계 각지에서 오픈소스 잔치가 열린다는 느낌을 강하게 받았다.

여러 오픈소스가 추구하는 방향, 동기, 구현 방법 등 모든 것이 공개되어 있고 그들이 더 자신들의 오픈소스를 성장시키기 위해 소통하는 모습들이 생생히 기록되어 있었다. 이것은 교과서 이상의 지식적 가치를 제공해 줄 것이라고 깨달았다.

내가 오픈소스를 체화하는 방법

  1. 오픈소스 발견하기
  2. 코드 구현방식 살펴보기
  3. PR, Issue 살펴보기
  4. 실제 기여하기
  5. 특정 오픈소스를 트래킹하며 지속해 maintain하기

오픈소스를 발견하는 과정은 크게 2가지가 있는 것 같다. 첫 번째로는 내가 필요로 하는 기능을 가진 라이브러리를 찾는 경우, 두 번째로는 깃허브에서 추천으로 뜨는 레포지토리를 탐방하다가 찾는 경우가 있다. 내가 흥미를 느낄 만한 오픈소스를 발견하면 그 오픈소스가 추구하는 방향이나 나오게 된 목적을 주로 살펴보는 편이다. 개인적으로는 개발자들의 경험을 향상하기 위해서 탄생한 라이브러리들(react-hook-form, @toss/emotion-utils) 등에 호감을 느끼는 것 같다.

오픈소스가 가진 방향성을 살펴본 뒤 코드 구현방식을 살펴본다. 폴더구조는 어떻게 구성되어있으며, 설계는 어떻게 이루어져 있는지, 내부적으로 참조하고 있는 다른 라이브러리는 어떤것이 있는지를 살펴본다. 이 단계에서 가장 많이 배울 수 있는 부분이라고 생각한다. 코드는 대부분 사람이 구현하는 것이기 때문에 같은 기능이라도 누구나 다르게 작성할 수 있고, 같은 기능이라도 누구는 성능관점에서 코드를 구현하고, 다른 누구는 개발자 경험 관점에서 코드를 구현하는 경우가 있다. 이 때 나였으면 이렇게 구현했을 텐데 왜 이 오픈소스에서는 이렇게 구현했지? 무엇이 다르지? 이러한 방식을 채택한 다른 라이브러리는 또 무엇이 있지? 하는 반복적인 프로세스를 거친다. 아무리 분석해도 잘 이해가 안 된다면 나는 오픈소스 메인테이너에게 이메일로 정중하게 여쭤보는 경우가 많다. 이 과정을 절대 부끄럽다고 생각하면 안 된다. 메인테이너는 몇 날 며칠을 고민해서 만든 코드인데 내가 하루아침에 코드를 이해한다는 것 자체가 비약이다.

코드 구현을 살펴본 뒤, 오픈소스의 관리가 어떻게 진행되고 있는지 또한 과거에 어떠한 발자취를 남겼는지를 살펴보는 편이다. 깃허브라는 서비스 기반의 오픈소스라면 과거의 PR과 Issue들을 모두 확인할 수 있으며, 과거의 의사결정까지도 볼 수 있다는 점에서 엄청난 지식을 습득할 수 있는 기회라고 생각했다. 그들은 왜 과거에 이런 선택을 했는지? 를 아는 것은 많은 도움이 된다. 실무에서 의사결정을 해야 할 순간에 이러한 과거의 역사가 빛을 발할 것이다.

이 단계에서는 어느 정도 라이브러리의 코드 구조, 그들이 추구하는 방향 및 과거의 히스토리등을 파악했기 때문에 거의 수정해야 할 부분, 개선해야 할 부분이 보이곤 한다. 오히려 maintainer들은 당연하게 여겨와서 발견하지 못한 버그들도 새로운 시각으로 오픈소스를 바라보는 제삼자가 찾을 확률이 어느 정도 있다고 생각한다. 단순히 개선해야 할 부분을 생각만 하고 넘어가는 것이 아닌 정확히 이슈 레이징을 한 뒤, PR을 통해 코드 수정까지 이뤄지면 엄청난 성장을 할 수 있다. 이 단계에서 실력 성장은 당연하고, 그 뒤에 따라오는 자신감 향상의 측면이 더 크다고 생각한다. 내가 사용하기만 했던, 우러러보기만 했던 라이브러리에 내 손으로 작성한 코드 한 줄 추가하는 게 얼마나 가슴뛰는 일인가? 나는 그랬었다. 실제 기여하는 단계에서 주의해야 할 점은 오픈소스별 기여하는 방법이 각각 다르므로, Readme 혹은 Contribute guide에 작성된 가이드를 준수한 뒤 기여해야 한다.

한번 기여하면 두 번 세 번은 쉽다. 왜냐하면 자신감이 생겼기 때문이다. 이후 기여에서 그치는 것이 아닌, 실제로 오픈소스가 어떻게 운영되고 유지보수 되는지 관찰하는 것은 큰 도움이 될 수 있다. 그들만의 운영 방식은 어떻게 되는지 BREAKING CHANGE 등은 어떻게 관리하는지를 살펴보면 점점 배울 점이 보이기 시작한다. 이 과정중 잘 운영되는 라이브러리를 잘 톺아본다면 내가 새로운 라이브러리를 만들때 스캐폴딩 하는 과정에서 큰 도움이 될 수 있다.

좋은 오픈소스란?

오픈소스란 정해진 정답이 없기 때문에 더 재밌는 것 같다. 예를 들어 react의 hook과 관련된 라이브러리만 해도 1,000개가 넘는데 그중에 어떻게 좋고 나쁨을 따질 수 있을지는 모르겠다. 또한 github star가 많다, 다운로드 수가 많다가 좋은 오픈소스를 나타내는 지표라고 생각하지도 않는다.

내 기준에 좋고 호감이 가는 오픈소스는 이 개발 생태계를 더 나은 방향으로 인도하기 위해 선한 영향력을 발휘하는 오픈소스들이었다.

오픈소스는 크게 2가지 부류로 나눌 수 있다. 코드에 중점을 둔 오픈소스, 서비스에 중점을 둔 오픈소스로 나뉜다. 코드에 중점을 둔 라이브러리는 suspensive, h6s, react-hook-form 등이 있고 서비스에 중점을 둔 오픈소스는 supabase codecov 등을 예로들 수 있다.

자신이 더 분석하기 재밌는 부류를 찾아서 오픈소스 여정을 즐기면 좋을 것 같다.

오픈소스를 통해 성장하기

내가 알고 있는 지식을 확장하고 내가 몰랐던 부분을 알게 된다는 것은 충분히 값진 일이다. 내가 과거에 느꼈던 것처럼 성장의 곡선이 완만해지신 분들이나, Comfort Zone에 빠진 것 같다고 생각이 드시는 분들은 다른 사람의 코드를 보면서 성장할 기회를 잡으면 좋을 것 같다. 지구 반대편의 사람들과 하나의 관심사를 두고 소통한다는 것은 기술적인 성장뿐만 아닌 개발자가 가져야 할 소프트 스킬을 증진하는 데에도 큰 역할을 한다. 오픈소스란 모든 정보가 공개되어 있기 때문에 내가 볼 수 있는것처럼 누군가가 내가 작성한 코드나, 글들을 볼 수 있다고 생각하면 같은 질문을 하는 경우라도 조금 더 신경 써서 하는 경우가 많기 때문이다.

사소한 수정이라도, 심지어 잘못 연결된 링크나 오타 수정이라도 그것을 수정하는 내가 작성한 코드가 단 한 줄이라도 그 오픈소스에 기여한다면, 라포가 형성됨과 동시에 더 많은 관심을 갖게 되고 그것을 발판으로 더 커다란 도전도 할 수 있다. 그렇기 때문에 지금이라도 자신이 관심 있는 오픈소스를 찾아본 뒤 실제 기여까지 하는 것을 강력 추천한다.

더 나은 생태계

더 나은 생태계를 만들기 위해서 우리는 모두 작은 기여도 소중하게 여기고, 커뮤니티와 협업하여 성장하고 발전하는 오픈소스 생태계에 기여하는 것이 중요하다. 오픈소스는 개발자들의 열정과 노력으로 이루어지는 힘찬 여정이며, 더 나은 미래를 위한 가치 있는 잔치이다. 이러한 오픈소스 생태계를 지지하고 함께 성장하는 것은 우리 모두에게 큰 보람을 가져다줄 것이라고 생각한다.