본문 바로가기

[기고] 오픈소스를 통해 진정한 개발자로 성장하기 위한 조언

support 게시글 작성 시각 2021-09-27 16:47:23 게시글 조회수 2434

오픈소스를 통해 진정한 개발자로 성장하기 위한 조언

 

이민석

이노베이션 아카데미

 

오픈소스는 이제 어디에나 있다. 컴퓨터와 스마트폰은 물론 소프트웨어의 입김이 닿는 모든 장치에도 예외 없이 오픈소스 소프트웨어가 사용되고 있다. 소프트웨어 개발자라면 오픈소스를 피해갈 수 없다는 뜻이다. 기왕 피해갈 수 없다면 그 안에 들어가자. 기여를 하자. 기여를 통해 진정한 개발자로 성장하자.

 

오픈소스 소프트웨어에 기여하는 방법은 매우 다양하다. 가장 쉬운 방법은 완성된 소프트웨어를 사용하는 것이다. 그 소프트웨어를 사용하면서 그 가치를 주변에 알리는 것이다. 다음 단계는 오픈소스 소프트웨어를 사용하다가 발견한 버그를 보고하고 내게 필요한 기능을 그 소프트웨어의 개발자 커뮤니티에 요구하는 일이다. 그 다음 단계는 적극적인 사용자로서 다른 사용자를 위해 매뉴얼을 만드는 일, 문서를 자신의 언어로 번역하는 일, 사용자 커뮤니티에서의 다양한 활동을 통해 개발자와 사용자 사이의 연결점을 만드는 일이다. 그리고 내가 개발자라면 사용자로서 기여하는 것 이외에 코드와 관련된 더 많은 일을 할 수 있다. 소프트웨어를 내가 가진 새로운 환경에서 설치하고 테스트하는 일, 버그를 수정하는 일, 새로운 기능을 추가하는 일, 다른 사람이 기여한 코드를 리뷰 하는 일, 그 코드를 다른 사람들이 더 잘 활용할 수 있도록 기술 블로그를 작성하는 일 등이 있다. 어느 하나 중요하지 않은 것이 없다.

 

오픈소스 기여의 좋은 점

 

많은 조사에서 오픈소스 기여자들이 오픈소스에 기여하는 이유 가운데 최고는 늘 재미와 배움이었다. 내가 만든 코드가 세상을 바꾸는 것을 관찰하는 것만큼 재미있는 일은 세상에 없을 것이다. 또 기여를 통해 개인으로는 경험하기 어려운 다양한 고객과 기술 경험을 얻을 수 있어 많은 것을 배울 수 있다. 최근에는 많은 회사들이 오픈소스 소프트웨어를 기반으로 자사의 IT 시스템, 제품 서비스를 구현하기 때문에, 업무로서 자사의 오픈소스 프로젝트 또는 사용하고 있는 오픈소스에 기여하는 개발자도 많아졌다.

 

오픈소스 기여의 장점을 인터넷에서 검색하면 같이 나오는 말들은 다음과 같다.

 

fun, lead to increased happiness, learn to code, improve coding skills, gain early experience, improve production level software experiences, train you in ways that other people aren't, provide a platform to do whatever you want, attract quality fellow developers, experiencing critical mass, stand on the shoulders of giants, involve in every design decision, build features you want, community and peer recognition, greater job prospects, good eyes on who is contributing what, it shows you're innovative, positions of public trust, direct democracy, trust enables cooperation, self-organization with shared goals, learn to communicate positively, learn respect other people's ideas, inspire passion, teaching the next generation,

 

그리고 idealistic it's the way of the future 도 있다. 요약하면 오픈소스 기여는 재미있을 뿐만 아니라, 소프트웨어 개발과 관련된 다양한 기술과 태도를 배우면서 성장하여 경력에 도움을 주는 이상적인 방식으로 앞으로도 계속된다는 것이다.

 

관점을 바꾸어, 오픈소스로 자사의 프로젝트를 유지하는 회사들 입장에서 생각을 해보면 오픈소스에 대한 기여가 가진 좋은 점을 명확하게 알 수 있다. 오픈소스는 회사가 개발에 투자하는 자원의 몇 배에 해당하는 성과를 만들어준다. 그래서 비용을 낮춘다. 소프트웨어로 만들어지는 기술의 최첨단에는 늘 오픈소스가 있다. 그래서 혁신의 비용을 낮춘다. 오픈소스는 새로운 프로젝트의 결과를 빠르게 검증할 수 있게 한다. 그래서 리스크에 따른 비용을 낮춘다. 오픈소스 프로젝트는 커뮤니티의 개발자, 어쩌면 경쟁사의 개발자도 우리 프로젝트의 개발자가 되도록 한다. 그래서 개발 비용을 낮춘다. 우리 개발자들이 오픈소스 프로젝트에 참여하면 개발자들의 역량이 높아진다. 그래서 교육 투자 비용을 낮춘다. 오픈소스 방식으로 프로젝트를 진행하면 소프트웨어의 품질이 높아진다. 그래서 유지보수 비용을 낮춘다. 오픈소스로 코드가 공개되면 커뮤니티에 의해 보안문제가 더 빨리 드러나고 패치된다. 그래서 보안 관리 비용을 낮춘다. 우리 회사가 오픈소스에 많은 기여를 하면 좋은 개발자들은 기회라고 생각하고 취업하기를 원한다. 그래서 리크루팅 비용을 낮춘다. 우리 회사가 오픈소스에 더 많은 기여를 하면 회사의 명성이 높아진다. 그래서 홍보비용을 낮춘다.

기업들이 오픈소스를 해서 얻어지는 이점은 대부분 그 안의 개발자들이 만들어내는 것이다. 그래서 오픈소스에 대한 기여를 기업들은 중요하게 생각할 수밖에 없고, 오픈소스 기여자들을 리크루트 순위의 높은 곳에 두게 되는 것이다.

 

개발자로서 오픈소스에 기여하기

 

당연히 제일 좋은 것은 내가 시작한 오픈소스 프로젝트가 큰 커뮤니티를 이루고 다른 기여자들과 함께 오픈소스로 프로젝트를 발전시켜 나가는 것이다. 누구나 언젠가는 그런 프로젝트를 만들 수 있겠지만, 처음부터 그렇게 되기는 어렵고, 이미 성공한 프로젝트 또는 새로 시작되는 프로젝트에의 참여라는 작은 활동에서 시작해야 한다. 자신의 프로젝트를 운영하고 있는 개발자들은 다른 프로젝트에도 기여하는 것이 보통이다. 이제는 무엇을 만든다 해도 소프트웨어가 계층적으로도 깊고, 한 계층에서도 많은 기능으로 다른 오픈소스 소프트웨어와도 밀접한 연결점이 반드시 존재하기 때문이다. 이제 독립적인 오픈소스 프로젝트는 거의 없다고 볼 수 있다. 그래서 자신의 프로젝트를 시작할 때도 연관된 다른 오픈소스와의 연결점을 고려하여야 하고 그 부분이 좋은 기여의 시작점이다.

 

소프트웨어 개발자라면 누구나 오픈소스를 사용한다. 개발도구, 리눅스와 같은 거대한 운영체제 또는 그 일부, 보통 프레임워크라 부르는 크고 작은 소프트웨어 모듈을 일상적으로 접한다. 그 중에 몇 가지는 자신의 업무나 개인 프로젝트의 중요한 기반이 되기 마련이다. 오픈소스에 기여를 하고 싶다면 자신의 업무나 프로젝트의 기반이 되는 곳에서 시작하는 것이 좋다. 이제는 웬만한 소프트웨어 프레임워크는 적어도 수만 라인을 넘기 때문에 그 전체를 공부하고 코드를 다 읽는 것은 거의 불가능하다. 쉬운 방법은 자신이 가장 많이 사용하고 있는 함수(또는 API)나 기능에 집중하는 것이다. 이미 구현된 기능의 오류가 있거나, 기능의 개선이나 변경 필요성이 있을 때 해당 기능을 중심으로 코드를 봄으로써 해당 부분을 실제 구현한 개발자에 빙의하여 해결하려던 문제의 본질도 이해할 수 있고, 나아가 프로젝트의 방향성도 가늠할 수 있게 된다. 코드가 이해가 되면 수정, 개선을 위한 역량도 발휘할 수 있다.

 

특정 또는 여러 기술에 매우 익숙한 소프트웨어 개발자라면, 해당 분야에서 떠오르고 있는 새로운 오픈소스 프로젝트에 주목할 필요가 있다. 아직 초기이기 때문에 조금 더 주도적으로 프로젝트에 참여하여 기여할 수가 있다. 많은 개발자들은 기술에 대한 호기심을 가지고 있기 때문에 다수의 개발자 커뮤니티에 참여하고 소통한다. 이를 통해 지금 뜨고 있는 기술과 관련된 초기 오픈소스 프로젝트를 어렵지 않게 찾아 자신의 역량을 해당 프로젝트에 담을 기회를 얻을 수도, 전혀 새로운 프로젝트를 다른 개발자들과 함께 시작할 수도 있다.

 

기여를 위한 절차

 

모든 활성화된 오픈소스 프로젝트는 인력 부족에 시달린다. 기능을 구현하고 수정할 개발자, 다양한 환경에서 테스트를 수행할 개발자/사용자/테스터, 문서를 만들 사람이 필요하다. 큰 프로젝트일수록 많은 기여자가 이미 있고, 더 많은 새로운 기여자를 찾고 있기 마련이다. 많은 기여자가 나름의 기여를 하면서 오픈소스 프로젝트 자체의 혁신을 이루어나가기 위해서는 프로젝트의 방향성을 결정하고 기여자들이 앞서 이야기한 기여의 장점을 온전히 누릴 수 있는 절차의 확립, 건전한 커뮤니티로서 참여자들이 서로를 존중하기 위한 최소한의 약속이 필요하다.

 

개발자가 한두 명인 작은 프로젝트에서는 개발자에게 직접 메일을 보내거나 githubPR(Pull Request)로 참여 의사 표명과 코드 기여가 가능하다. 하지만 규모가 큰 프로젝트에는 기여의 절차와 조건들이 필요하며, 그 내용들을 소스코드 최상위 폴더에 CONTRIBUTION 또는 유사한 이름의 파일로 명시하고 있다. 그 절차를 지키지 않는 기여는 기여 내용의 수월성과 상관없이 무시되기 십상이다. 그 절차에는 코딩 스타일에 대한 안내, 프로젝트의 모든 사안에 대한 논의 채널(메일링 리스트, 포럼, IRC )과 의사 결정 방법, 버그 리포팅 (또는 issue 등록) 방법, 구체적인 기여의 기술적 방법 (patch를 어떻게 만들어야 하는지, PR 메시지에는 어떤 내용이 담겨있어야 하는지 등), 그리고 기여가 처리되는 과정, 그리고 커뮤니티로서의 행동 강령 (COD, code of conduct) 등이 포함되어 있다. 반드시 먼저 읽어봐야 한다.

 

기여자에게 특정한 문서 또는 명시적 선언을 요구하는 경우도 있다. 오픈소스 소프트웨어는 누군가 코드를 기여하고, 그 기여된 코드가 누구에게나 조건 없이 공개되고 활용되고 수정될 수 있다. 그래서 개발자인 기여자에게 그 기여에 따른 법률적 책임을 기술한 문서에 동의할 것을 요구하는 프로젝트들이 점차 많아지고 있다. CLA(Contributor License Agreement), DCO(Developer Certificate of Origin)가 그 문서이다. 기업 또는 여러 기업의 연합체가 주도하는 오픈소스 프로젝트는 개발자들이 첫 번째 기여를 할 때, CLA를 요구하는 것이 보통이다. CLA는 표준화된 문서는 아니고 프로젝트마다 약간씩 조건이 다른 법률 문서이다. 보통은 기여자가 해당 코드를 기여할 권리가 있다는 것, 그 코드가 그 오픈소스 프로젝트에서 사용 가능하다는 것, 그리고 그 코드에 내재된 특허나 다른 지적재산에 대한 사용권을 같이 제공한다는 것을 포함한다. DCO2004Linux 재단이 도입한 방식인데 기여자가 이 코드는 내가 만들었고, 사용을 허가한다는 간단한 선언으로 기여자들이 어려운 법률 문서에의 사인없이 좀 더 가벼운 마음으로 기여할 수 있도록 만든 것이다.

 

오픈소스에의 기여는 소중하지만, 이미 있던 커뮤니티의 경우 그들의 문화와 거버넌스 체계를 존중하여야 한다.

 

요약

 

오픈소스는 모든 곳에 사용된다. 그래서 오픈소스는 모두에게 소중하다. 오픈소스는 기여를 먹고 산다. 그래서 오픈소스 기여자는 소중하다. 오픈소스에의 기여는 재미있고, 개발자가 소프트웨어로 세상을 바꿀 수 있는 가장 빠른 길이다. 덤으로 개발자의 성장과 커리어에도 큰 도움이 된다. 작은 것으로부터 기여를 시작하고, 내가 사용하는 오픈소스에서부터 시작하자.

 

 

 

이민석 이노베이션 아카데미 학장 이민석 이노베이션 아카데미 학장

現 이노베이션 아카데미 학장
現 국민대학교 소프트웨어학부 교수
前 NHN NEXT 학장

 

.
.
2021
공개SW 가이드/보고서 - 번호, 제목, 작성자, 조회수, 작성
번호 제목 작성자 조회수 작성
공지 [2024년] 오픈소스SW 라이선스 가이드 개정판 발간 file support 3549 2024-01-03
공지 [2024년] 기업 오픈소스SW 거버넌스 가이드 개정판 발간 file support 2975 2024-01-03
공지 [2024년] 공공 오픈소스SW 거버넌스 가이드 개정판 발간 file support 2915 2024-01-03
공지 공개 소프트웨어 연구개발(R&D) 실무 가이드라인 배포 file support 15368 2022-07-28
공지 공개소프트웨어 연구개발 수행 가이드라인 file OSS 15271 2018-04-26
408 [12월 월간브리핑] 과기정통부, '아파치 로그4j 2' 긴급 보안업데이트 권고 및 점검 실시 support 2258 2021-12-21
407 [11월 월간브리핑] '공개소프트웨어 활용 가이드 4종' 발간으로 오픈소스의 안전한 활용⋅확산 기대 support 2594 2021-11-23
406 [2021년] 개방형OS 도입 가이드 발간 2 file support 15238 2021-11-23
405 [2021년] 공공 공개소프트웨어 거버넌스 가이드 개정판 발간 file support 13863 2021-11-23
404 [2021년] 기업 공개소프트웨어 거버넌스 가이드 발간 file support 14265 2021-11-23
403 [2021년] 공개소프트웨어 라이선스 가이드 개정판 발간 file support 15730 2021-11-23
402 [10월 월간브리핑] 국내 기업의 오픈소스 거버넌스 현황 support 3203 2021-10-26
401 기업의 오픈소스 나침반, OSPO support 2996 2021-10-26
400 [9월 월간브리핑]국내외 오픈소스 동향 및 개발자·기여 활동 현황 support 1883 2021-09-29
399 [기고] 오픈소스를 통해 진정한 개발자로 성장하기 위한 조언 support 2434 2021-09-27
맨 위로
맨 위로