이번학기 “오픈소스개발 기초” 과목을 통해 참여한 주된 과정은
참여하기 - Issue 남기고 테스트하기 에 있습니다.

서론

설레는 첫발.

그동안 Github을 직접 관리하기도 하고, 다양한 오픈스소 프로젝트들을 이용해서 개인 작품을 만들어 본 적은 많았지만, 해당 소스들의 개발에 직접 참여하고 제 의견을 게시한 적은 거의 없었습니다.

단순히 공개되어있는 소스들을 잘 이용할 줄만 알았지, 커뮤니티의 일원으로써 활동하는 법을 몰랐던 것 같네요.

처음 오픈소스 커뮤니티에 직접적으로 참여한 것은 작년 가을 즈음 이었습니다.
제가 참여하고 있는 학회에서 오픈소스에 기여하기 라는 주제로 그룹 스터디가 열려 가입하게 되었던게 직접적인 계기가 되었습니다.
사실, 그 이전엔 Git 조차 제대로 쓸 줄 몰랐었는데요, 해당 스터디활동을 하면서 비로소 Git 에 대하여 조금이나마 눈을 뜨게 되었고, 다양한 오픈소스 커뮤니티의 존재를 알게 되었습니다.

그때 그룹스터디의 목표는 직접 프로젝트를 선택하고, 커뮤니티 활동을 하면서 컨트리뷰팅까지 하는 것을 목표로 하였습니다.
그때 제가 첫번째로 남긴 PR은 PHP_MY_ADMIN 레포에서 Inline CSS 들을 별도의 CSS 로 분리하는 작업 일부를 진행했습니다.

첫번째PR
image

오픈소스 커뮤니티로 가는 지도

탐험하기

그때 배운 오픈소스의 세계로 가는 첫번째 방법은 Github 탐험하기 였습니다.
지금도 종종 여유있으면 이용하는 기능인데 Github 의 Explorer 라는 곳에 가면 최근 뜨고있는 “핫한” 레포들을 모아서 볼 수 있습니다.

개인별 맞춤 추천도 해주고, 언어별, 기간별로 다양하게 선별된 오픈소스들을 고를 수 있는데요, 스터디를 진행하면서 이곳에서 재미있어 보이는 프로젝트를 찾아 둘러보면서 본인이 기여할 만한 부분이 있는지 둘러보는 법을 배울 수 있었습니다.

여기서 오픈소스 프로젝트에 기여 한다는 것은 프로젝트에 나의 소스코드를 직접 남긴다는것이 전부가 아닙니다.
사용자로써 직접 프로젝트를 이용해 보고, 필요한 개선점을 알려주거나, 문제점을 게시하고, 비슷한 어려움을 겪고 있는 다른 누군가에게 해결책을 제시하는 등 다양한 커뮤니티 활동이 모두 오픈소스 프로젝트에 기여하는 활동입니다.

Github Explore 기능을 통해 둘러보면 생각보다 규모가 큰 프로젝트들이 많습니다. 요즘 뜨는 Tensorflow 나, Nginx, NodeJS 와 같은 쟁쟁한 프로젝트들도 있지만, 완전 생소한 분야의 프로젝트들도 많습니다.
제가 처음 Explorer 를 둘러봤을 때 느낀 점은, 이렇게 큰 프로젝트들에 내가 어떻게 끼어들 수 있지…(쭈글) 하는 생각이었습니다. 실제로 이런 프로젝트들의 소스코드나 이슈를 들여다보면 내가 실제로 할 수 있는 것이 거의 없다고 느껴질 겁니다.

특히 겨우 학부생 수준에서는 다루기도 힘든 로직과 알고리즘들이 넘처나고있었고, Maintainer 가 아닌이상 프로젝트의 모든 소스코드들을 이해하고 있을수는 없겠죠.

참여하기 - 코드를 직접 기여해보자

이럴 때 도움이 될 만한 치침은 만만한 것 부터 시작하기 입니다.
오픈소스 세계로 가는 지도가 있어도 지도를 볼 줄 모르는 상황에서, 범례가 되어줄 수 있는 것이, 바로 내 경험 입니다.

그동안 프로젝트를 진행해 오면서 알게모르게 사용한 수많은 오픈소스들을 찾아서 도전해 보는것도 좋은 시도라고 생각합니다.
제가 첫 PR 을 남긴 PHP_MY_ADMIN 의 경우, 군복무 당시 SW 개발병으로 근무하면서 처음 PHP 를 접하고, MySQL 을 다루면서 알게 되었습니다. 그 당시에 php + MySQL 기반 의 서비스를 구축하면서 간단한 DB 관리는 해당 프로젝트를 이용했던 기억이 있어 좀 더 친근하게 다가갈 수 있었습니다.

그리고 무엇보다 해당 프로젝트가 제가 알고있는 언어인 php 로 만들어져 있었기 때문에 어느정도 로직을 부분부분 이해 할 수 있었다는 것도 하나의 이점으로 작용했던것 같네요.
단순히 오픈소스에 기여하겠어!! 라는 포부 하나만 가지고서 새로운 언어를 배워서 PR을 남기는건 상당히 피곤한 일이 될 수도 있습니다.

때문에 자신있는 분야(언어) 를 골라, 내가 써본(익숙한) 프로젝트를 하나 하나 들여다본다면 꽤나 괜찮은 오픈소스를 찾을 수 있을 겁니다.

참여하기 - 번역

위에서 말한 것 처럼 꼭 코드로써 기여하는 것 뿐만 아니라 이슈를 남기거나 질문에 답변을 해주고, 테스트를 해보거나, 심지어는 문서를 번역하는 작업 또한(!!) 오픈소스프로젝트의 활동이라고 할 수 있습니다.

제가 남긴 또 다른 PR 은 바로 문서를 번역하는 것 이었습니다.
Microsoft 의 개발문서들은 모두 Github 를 통해서 관리됩니다.
대부분의 문서들은 이미 각 나라의 언어로 번역이 되어있지만, 알고보면 봇이 번역한게 상당수라 어법에 맞지 않는 부분이 꽤 많습니다. Azure 같은 인기있는 프로젝트들은 많은 Maintainer 들이 유지보수를 해주고 있지만, Nuget 같이 생소한 프로젝트들의 문서들은 아직 봇이 번역한 채로 어색하게 남아있는 경우가 꽤 많습니다.

제가 남긴 PR이 바로 이 Nuget 의 온라인 도큐먼트를 우리말에 맞게 수정하고 번역한 것입니다.

Microsoft Nuget PR
image

또한 PR과정에서 프로젝트 관리자와 소통하면서 추가적으로 보완할 점에 대해 물어보는 등 피드백을 주기적으로 받았습니다.

이때 제가 남긴 번역은 성공적으로 컨펌받고 정식 문서로 Merge 됩니다. 또, Microsoft 공식문서를 번역하면서 배운 것 중 하나가 내 커밋에 서명하기였습니다. Microsoft의 레포는 본인의 커밋에 GPG 키를 이용해 서명이 되어있지 않으면 PR을 받아주지 않는 제도를 운영하고 있습니다. 저 프로젝트를 번역하면서 처음으로 제 GPG 키를 발급하고 커밋에 서명하는 법을 배우게 됩니다. 저때 배운 GPG Signing 은 지금까지도 매 커밋마다 계속하고 있습니다.

참여하기 - Issue 남기기

이번학기에 제가 관심을 가지게 된 오픈소스 프로젝트는 CodeServer 입니다. 제가 주로 사용하는 에디터인 VSCode 를 인스톨 할 필요 없이 웹 브라우저에서 구동할 수 있게 만든 프로젝트 입니다. VSCode 자체가 Type Script 로 만들어져 있어 따로 서버를 구축하여 띄워두면 웹 브라우저를 통해서도 실행시킬 수 있는데, 이 프로젝트는 좀 더 쉽게 배포가능하도록 Docker Image 로 만들고 있는 프로젝트 입니다. 국산 웹 IDE 인 구름IDE 를 생각하시면 될 것 같네요.

이번해 들어서 DevOps에 관심을 갖게되어 오픈스택, 도커, 그리고 CI/CD 등에 대해 공부하다보니 우연히 알게 된 프로젝트입니다.
마침 제가 활동하고 있는 학회의 서버에 도커 컨테이너로 띄운다면 노트북을 사용하기 어려운 환경에서도 웹을 통해 손쉽게 개발이 가능하고, 태블릿 등에서도 간단한 코딩이 가능할 것으로 기대해서 직접 설치해 보았습니다.

Docker 컨테이너로 직접 올려 가동한 결과 몇 가지 문제점을 찾을 수 있었는데요, 먼저 학교 내부망에 물려있는 서버다 보니 외부에서 접속하기 위해서는 NginX 를 이용해 리버스프록시를 걸고 SubDomain 을 설정하여 접속하도록 했습니다.

이렇게 했을 때, 학교 내부에서는 문제없이 잘 페이지가 열렸으나, 외부망에서 접근할때는 랜덤하게 페이지 로드가 실패하는 증상이 발생함을 확인할 수 있었습니다.

사실 제가 사용하는 환경이 상당히 특이한 방식이어서 지금까지 이슈로 보고가 되지 않았던 것 같아 몇 번의 추가 테스트 끝에 첫 이슈를 등록하기로 합니다.
https://github.com/cdr/code-server/issues/773

image

이슈를 등록할때 먼저 제가 처한 상황과 시도해본 것들을 최대한 상세히 적도록 노력했습니다.

  • 내가 처한 상황
  • 컨테이너를 실행시킨 명령어
  • 컨테이너를 구동한 환경
  • 에러상황 당시의 로그(NginX 접속 로그, Docker 컨테이너 로그)
  • 내가 시도해본 해결방법

을 언급해 주었습니다. 최대한 자세히 적어야 다른 사람들이 이슈를 보고 재현해서 트러블슈팅이 가능하기 때문이죠. 덕분에 👍 를 두분이나 남겨주셨네요. 첫 이슈라 그런지 저 이모지를 보고 제 이슈에 공감하시는 분들이 있어 마음이 놓였습니다.

그 뒤로도 저와 비슷한 문제를 겪고 있는 분들이 다양하게 댓글을 달아주셨습니다. GCP 에서 구동하고 계신분의 경우도 있었고, Ipad OS 에서 접속하신 분의 경우에도 댓글을 달아주셨네요. Collaborator 도 직접 댓글로 NginX 환경설정을 확인해 볼 것과, Browser 접근 환경을 물어보아 주었습니다.

이 이슈는 826번 PR을 남겨주신분 께서도 직접 언급하며 Fix를 위한 다양한 시도를 했다고 합니다.

하지만 안타깝게도 완벽하게 원인을 찾지 못하고 구조적으로 새로 짜여진 V2 에서야 해결되었다고 하네요.

image

참여하기 - Test 해보기

최근에는 직접 테스트 해보고 나온 결과를 커뮤니티에 공유하고 있습니다. 위에서 나온 V2 버전을 직접 설치해 보았는데요, Docker 컨테이너를 빌드하는 과정에서 User Privileges 문제로 Root 권한이 필요한 디렉토리에 정상적으로 올라가지 못하는 현상이 종종 발생하고 있어 제가 직접 설치해보고 결과를 리포팅했습니다. 링크

image

처음엔 설치에 실패했다는 오류보고에 그쳤지만, 이슈에 남겨진 다른 댓글들을 확인하여 도커 실행 커맨드에 --user 1000:1000 옵션을 주었더니 문제없이 컨테이너 생성에 성공했고, 결과를 댓글로 공유했습니다.

관련 내용을 PR로 남기면 더 좋겠지만 아쉽게도 벌써 관련 PR이 열려서 활발하게 대화가 진행중이었습니다. 첫 PR은 4월에 열렸는데, 이때도 비슷한 문제가 있었다는걸 언급된 이슈넘버를 통해 확인할 수 있었습니다.PR 링크
다만 아직 이해가 잘 가지 않는 부분은 해당 PR이 아직도 Request review 상태로 남아 머지가 되고 있지 않고 있는 부분이었습니다.
지난달 까지도 Member 의 댓글이 달려있는 것을 보아 내부적으로 리뷰가 진행되고 있는 것 같습니다.

마무리

처음 오픈소스 활동을 시작했을 때 느낌은 지도없이 망망대해를 해쳐나가는 느낌이었습니다. 수많은 깃헙 레포들 중에서 내가 할 수 있는게 무엇인지 많은 고민을 하고나니 작은 것 부터 눈에 들어오기 시작했습니다.
제가 남긴 이슈 템플릿에 :thumbup: 이모지로 공감해주는 유저들이 있다는 걸 보면서 가장 큰 자신감을 얻게 된 것 같습니다.
이제 다음 목표는 직접 오픈소스 프로젝트를 만들어보는 것입니다. 그동안 진행했던 다양한 프로젝트 경험을 기반으로 하여 재미있는 프로젝트를 만들고 많은 사람들과 함께 소통하며 개발해나가길 소망합니다.