목차
0. 오픈소스에 기여하게 된 계기
1. 이런 걸로도 오픈소스에 기여할 수 있다고?
2. 기여는 개발자의 불편한 부분에서부터 시작된다.
3. 유저로서 고쳐지길 원하는 부분을 기여하다.
4. 기여를 통해 제대로 알게 된 개념들
5. 기여를 하여 얻은 것은 바로 보람과 사람
0. 오픈소스에 기여하게 된 계기
필자의 첫 오픈소스 기여에 대해 회고하는 마음으로 작성해본다.
개발자라면 한 번쯤은 오픈소스에 기여해보고 싶은 마음이 있을 것이다.
오픈소스를 통해 개발 생태계 자체가 건강하게 발전한 점에서 ‘나도 기여해보고 싶다!’라는 생각을 가지고 있었고 마침 오픈소스 컨트리뷰션 아카데미(OSSCA)가 진행된다는 얘기를 들었다.
OSSCA 참여 프로젝트는 Apache Zeppelin, ArgoCD, Node.js 등등이 있었지만 그 중 필자는 웹에서 동작하는 프로젝트에 기여하고 싶었고 Notion, Google Docs 같은 실시간 협업 어플리케이션을 쉽게 구현할 수 있는 Yorkie에 기여해보고 싶었다. 지원 당시 선호하는 프로젝트를 1순위, 2순위를 작성해서 내야했고 yorkie를 하고 싶어서 둘 다 yorkie를 작성했던 걸로 기억한다.
아래는 기술적인 부분을 설명하는 것보다 내가 어떤 과정에서 어떤 마음(휘발될지도 모르는 기억)을 가지고 기여했는지를 기록하고자 한다.
1. 이런 걸로도 오픈소스에 기여할 수 있다고?
나의 첫 기여는 Fix typo in README and Contributing Guide
https://github.com/yorkie-team/codepair/pull/245
활동 초반에는 이 오픈소스에 대한 전반적인 파악을 필요로 했고, Contribute Guide를 보면 어떤 식으로 기여할 수 있는지에 대해 학습이 필요하다. yorkie 프로젝트 전반이 한국어가 아닌 영어를 사용하기 때문에 어느 정도 허들이 있을 수 있다.
README와 Contributing Guide를 읽던 중 ‘엇 이거 아닌 것 같은데’하는 부분이 있었고, 바로 그 부분이 내가 기여할 수 있는 부분이었다. 문서 내 수정이 필요한 부분을 수정함으로써 첫 번째에 기여를 할 수 있었다..!
이상한 점을 캐치하여 발견하게 된 기여는 Remove unnecssary package-lock.json file
https://github.com/yorkie-team/codepair/pull/277
Codepair는 Yorkie를 기반으로 개발된 실시간 마크다운 동시 편집 에디터 서비스이다. 이 레포지토리의 구조는 루트 디렉토리에 frontend와 backend 폴더가 위치한 형태이다. 다른 부분을 기여하고 있던 중, 루트 디렉토리에 존재하는 이상한 package-lock.json을 발견하였다. 이는 잘못 업로드된 파일로 확인되어 package-lock.json 파일을 삭제했다.
package-lock.json은 프로젝트의 종속성 트리를 정확히 기록하여 의도치 않은 버전 변경을 방지하고, 동일한 종속성을 설치할 수 있도록 보장하는 파일이다. 그렇기에 package.json 과 함께 특정 프로젝트 폴더 안에서만 유효하다. 따라서 루트 디렉토리에서는 package-lock.json 이 필요하지 않으며, frontend와 backend 폴더에만 package.json과 package-lock.json이 필요로 한다.
2. 기여는 개발자의 불편한 부분에서부터 시작된다.
나의 개발자 경험을 높이기 위해 시작한 Add pre-commit hook using husky for linting and formatting
https://github.com/yorkie-team/codepair/pull/281
Fix 'Additional Users' Popover Display Logic for Profile Clicks PR을 해결하면서 lint와 format이 제대로 적용되지 않아 CI가 실패하는 문제가 있었다. 다른 사람들이 만든 PR을 확인했을 때도 PR을 올린 후 CI에 통과하지 못해 추가적으로 format 명령어를 실행하는 작업을 하는 것을 보아 나만 불편한 것이 아님을 알게 되었고, 이를 해결하고자 husky를 적용하였다.
해당 시점은 Codepair를 모노레포로 전환하기 전이었기 때문에 frontend 디렉토리와 backend 디렉토리 각각의 package.json에서 husky가 실행되어야 했다. pre-commit 스크립트를 작성할 때 staged에 있는 파일이 frontend 디렉토리에 속하는지, backend 디렉토리에 속하는지 혹은 두 디렉토리 모두에서 속하는지에 따라 lint와 format이 작동되도록 yaml 파일을 수정했다.
자세한 부분은 해당 포스팅에서 작성하였다. https://bo5mi.tistory.com/263
과정에서 흔쾌히 도와주신 멘토님과 멘티님과 함께 페어프로그래밍을 진행했었고, 다들 이 문제를 같이 해결하고자 하는게 모니터 너머로 느껴져 너무 재밌었던 기억으로 남아있다.
3. 유저로서 고쳐지길 원하는 부분을 기여하다.
OSSCA 활동하면서 Yorkie는 매주 토요일마다 Weekly Sync를 하였고 이는 각각의 기여자들이 어떤 기여를 진행하고 있는지 공유하는 시간이다. Weekly Sync에서의 모든 기록은 Codepair에 문서로 작성되었다. 그렇다보니 매주 Codepair를 사용하였고, 과정에서 개선되었으면 하는 여러 부분들이 있었다. 아래 기록은 시간순으로 기존 이슈를 해결하거나 새로운 이슈를 등록하여 해결한 PR들이다.
Fix 'Additional Users' Popover Display Logic for Profile Clicks
https://github.com/yorkie-team/codepair/pull/270
첫 번째 개발 이슈로 Add Feature to Move Cursor to User's Profile when Profile is Clicked 를 할당받고 추가적인 작업이 필요하여 진행한 PR이다. 유저의 프로필을 클릭하면 해당 유저의 위치로 이동하는 기능을 구현하기 위해서는 구현 전에 각 프로필을 클릭하는 시나리오를 고려해야 했다. 이전에는 추가 사용자가 없는 경우에도 프로필을 클릭하면 ‘추가 사용자’ 팝업창이 표시되었다.
유저가 4명 이상인 경우 + n 컴포넌트를 추가적으로 구성함으로써 추가 팝업창이 4명 이상인 경우에만 클릭되도록 구성하였다.
Add scroll navigation to user's location from profile view
https://github.com/yorkie-team/codepair/pull/316
이 PR은 codepair의 문서가 길어졌을 경우 유저들의 위치를 찾기 어려운 문제가 있어 유저의 프로필을 클릭하여 해당 유저의 cursor 위치로 화면을 이동하는 기능을 구현하였다.
Add hyperlink creation feature
https://github.com/yorkie-team/codepair/pull/332
보통 슬랙이나 노션 같은 경우 선택한 글자에 클립보드에 복사된 링크가 있다면 하이퍼링크로 만들 수 있는 기능이 있다. 별 생각없이 잘 쓰는 기능이었지만 Codepair에서는 기능을 구현이 필요했다..!
기존에는 문자에 하이퍼링크를 달기 위해 공수가 많이 들었다.
1. 먼저, 하이퍼링크을 달고 싶은 문자의 첫 번째에 [ 와 마지막에 ] 을 명시한다.
2. 그런 다음 () 을 생성한 다음 괄호 내부에 복사한 링크를 붙여넣는다. 문제는 없지만 굉장히 불편한 과정이었기에 수정해야만 했다.
Ensure correct representation of logged-in users in shared document view
https://github.com/yorkie-team/codepair/pull/333
Codepair에 사용자가 로그인했음에도 불구하고 공유 문서에서 익명(Anonymous)으로 잘못 식별되는 문제가 있었고, 매주 진행하는 Weekly Sync에서 항상 어떤 참여자가 공유된 문서를 보고 있는지를 확인할 수 없었다.
해당 이슈를 확인한 뒤, 로그인한 후에 공유된 문서로 접속했을 때, Anonymous가 아닌 실제 사용자 이름을 확인 가능하도록 수정했다.
Add Vim binding support for CodePair using CodeMirror 6
https://github.com/yorkie-team/codepair/pull/340
CodeMirror 코드 에디터를 사용했기에 당연히 vim 기능을 구현할 수 있었고, CodeMirror 6의 plugin을 사용하여 추가할 수 있었다. 과정에서 화면 내 어떤 부분에 이 UI를 넣어야하는 고민도 해보고 다른 레퍼런스를 참고해서 구성해보았다. 필자도 VSCode에서(만) vim을 사용하기에 Codepair 작성하면서 vim을 쓸 수 있어서 좋았다. 메인테이너 분의 후기가 아주 즐거웠다..
Prevent dragging selection of identical characters in CodeMirror
https://github.com/yorkie-team/codepair/pull/345
CodeMirror 코드 에디터를 사용했기에 드래그 동작 시 동일한 문자를 선택(selection)되도록 기본 설정이 되어있었다. Codepair에서는 필요하지 않으며 헷갈렸던 부분이 많았기에 이를 수정했다.
필자가 불편했던 부분들을 하나씩 개선되어가는 과정에서 보람을 느껴 계속 진행할 수 있었던 것 같다.
다음 https://codepair.yorkie.dev/에서 확인해볼 수 있다. (여전히 개발 중이기에 기여를 원한다면 언제든 ..!)
4. 기여를 통해 제대로 알게 된 개념들
모노레포를 도입함으로써 제대로 알게 된 모노레포 - Introduce mono repo
https://github.com/yorkie-team/codepair/pull/361
CodePair는 frontend와 backend 두 개의 독립적인 프로젝트를 하나의 레포지토리에서 관리되고 있었지만, 두 프로젝트가 각각 독립된 환경을 가지고 있어 다음과 같은 비효율적인 문제가 있었다.
1. 의존성 중복 설치
두 프로젝트가 공통으로 사용하는 의존성이 있었지만, 환경이 분리되어 이를 중복으로 설치해야 했다.
2. 명령어 관리의 불편함
두 프로젝트를 한 번에 빌드하거나 테스트하는 명령어를 사용할 수 없었으며, 각 프로젝트의 명령어는 해당 프로젝트의 경로로 이동한 뒤 실행해야 했다.
이러한 문제를 해결하기 위해 pnpm을 활용해 모노레포 구조를 도입했다.
공통 의존성을 한 번만 설치하도록 변경하면서 의존성 용량이 약 10% 줄어들었고, (기존: 1102 MB → pnpm 적용 후: 983 MB)
두 프로젝트를 하나의 명령어로 관리할 수 있게 되었으며, 루트 디렉토리에서 모든 명령어를 실행할 수 있게 되었다...!
yorkie-team 프로젝트 중 yorkie-js-sdk도 pnpm을 사용해 모노레포를 관리하고 있었기에 일관성으로 유지하고자하는 목적도 있었다. 모노레포 도입은 단순히 구조를 통합하는 것에 그치지 않고, 개발 과정 전반을 효율적으로 개선하는데 기여할 수 있었다.
개발 과정에서 문제가 되었던 부분은 추후 더 자세하게 블로그에 적어보고자 한다.
5. 기여를 하여 얻은 것은 바로 보람과 사람
오픈소스에 기여해본 적이 없어 처음에는 걱정이 많았다. 어떤 크기와 난이도에 대한 문제를 할당받아야 하는지 혹은 할당받아도 감당할 수 있는지에 대해 잘 몰랐기 때문이다. 결국에는 해결할 수 있는 작은 문제부터 하나씩 해결하면서 이런 부분도 기여를 할 수 있구나에 대한 판단을 할 수 있었다. 하나의 유저로서 여러 문제를 만나면서 개선되었으면 하는 부분을 이슈를 만들고, 개발하면서 기여하는 과정이 정말 재밌었고 테스크를 하나씩 끝내면서 기능들이 개선되는 점이 필자의 보람이 되었던 것 같다.
또 다양한 개발자들을 만나면서 여러 문제에 대한 접근법이나 해결법들을 배울 수 있었고 여러 이슈들이 모여 있어 frontend, backend, ai, crdt 모든 카테고리에서 yorkie라는 공통의 주제로 개발하는 과정을 보는 것 자체도 재밌었다. 위의 모든 내용은 멘토들의 무조건적인 도움과 멘티들로부터 강하게 받은 동기부여로 인해 이뤄질 수 있었다.
사실 필자가 처음에 OSSCA를 통해 오픈소스를 기여하는 목적도 있었지만 결국 사람을 얻은 것 같다. 위 내용에서는 다루지 않았지만 5개월이라는 시간동안 사람들과 다양하고 알찬 경험을 하였다. (매주 이뤄진 모각코와 페어코딩, 같이 먹은 맛있는 음식들, 셀 수 없는 새벽 온라인 모각코, 한강 보트 위에서 노트북 키는 사람... 멋진 사람들 .. 마지막 상까지!)
단순히 경험과 재미, 그 이상의 시간을 보냈기에 필자가 얻은 것은 바로 보람과 사람이다.
'why and yes > 기록결산' 카테고리의 다른 글
[기록결산][글또] 회고를 곁들인 다짐글 (0) | 2024.10.13 |
---|---|
[기록결산] 내 것으로 만들기 (1) | 2024.08.11 |
[기록결산] 애쓴 것은 언젠가 정산된다. (4) | 2024.01.31 |