최근에 오픈소스 컨트리뷰션에 참가하게되면서 TypeScript
번역을 집중적으로 하고있다. (관련해서는 활동이 끝나면 글을 써볼까 한다.) TypeScript로 개발하다보니, type definition은 이제 나에겐 없어서는 안될 존재가 되었고, 마침! 사용하던 패키지에서 타입을 고쳐야함을 발견했다.
node-schedule
이라는 패키지를 사용하고있는데 워낙 패키지가 업데이트도 느리고 (글 쓴 시점 기준, 가장 최근 버전 업데이트가 2019년 2월...) PR과 issue는 쌓여가는데 메인테이너들이 잘 안봐주는 것 같다. 아무튼, 이걸 쓰다가 타입을 고쳐야함을 알게되었는데, 타입을 고쳐 PR을 받아내기까지에는 시간이 걸릴 것 같아서 해당 코드에서는 일단 내가 타입을 직접 따로 정의해서 사용했었다. 그렇게 잊고 지내다가 다른 프로젝트 Pull Request를 보내면서 갑자기 생각나서 DefinitelyTyped
레포에는 어떻게 기여하는지 찾아보았다.
이 레포에 기여를 하는 방법은 아주 간단하다. README를 읽어보면, contribute 하는 방법에 대해 친절히 알려주고있다. (심지어 한국어 번역 버전도 있다.) 크게 두 가지 경우로 나뉘는데 1. 기존의 패키지 타입을 수정하거나 2. 없는 패키지의 타입을 새로 생성하거나 이다. 나는 1번, 기존에 있는 타입을 수정하는 방식이었다.
1. DefinitelyTyped fork 하기
레포 맨 상단에 보면 watch
, star
, fork
버튼이 있는데 fork
버튼을 눌러 내 깃헙에 포크를 뜨자! 그리고 clone
을 받자.
2. 브랜치 만들기
master 브랜치에서 진행해도 되고, 브랜치를 새로 생성해도 좋다. 나는 브랜치를 새로 생성했다.
그 후, 터미널에서 npm install
을 실행한다.
3. 타입 수정하기!
이 프로젝트의 본 목적인 타입을 수정한다. 패키지의 버전이 엄청 다르지 않는 이상, 고칠 부분은 그다지 많지 않다. 어떻게 보면, 초심자가 오픈소스에 기여하기 가장 좋은 프로젝트중 하나일 수도 있다는 말이 이런 점에서 나오는 것 같기도 하다.
4. 수정한 타입에 대한 테스트 코드 추가/수정하기 (optional)
이 부분이 optional인 이유는, 테스트 코드를 추가해야하는 경우에만 하면 되기 때문이다.
5. 내가 수정한 부분 테스트하기
npm run lint {{package-name}}
{{package-name}}에는 내가 수정한 패키지명을 적어주면된다. 만약 이때, 내가 수정한 부분에 문제가 있으면 error message가 터미널 창을 가득 채울 것이고, 문제가 없다면 아래와 같이 뜰 것이다. (버전을 다를 수 있다.)
> definitely-typed@0.0.3 lint 프로젝트/경로
> dtslint types "내가-수정한-패키지명"
문제가 없다면, 변경 사항을 commmit
하고 push
해보자.
6. Pull Request 요청
DefinitelyTyped
Pull Request 페이지에 가면, 어? 너 뭐 수정했네! PR 날려볼래? 와 같은 안내 버튼이 하나 생긴다. 그 버튼을 누르면, 간단한 코멘트를 남길 수 있는 창이 나온다. 거기에 내가 수정한 내용에 대해 간략하게 작성하고, 기본적으로 채워달라고하는 템플릿이 있다. 해당 템플릿에 맞게 잘 채워주면 이제 PR을 날릴 수 있다!
PR을 요청하면, 얼마 지나지않아, typescript-bot
이라는 봇이 갑자기 등장하면서, 향후 일정(?)에 대해서 알려준다.
해당 PR에 몇 개의 패키지가 변경되었는지, 누가 코드리뷰를 해줄 것인지, 현재 PR의 상태는 어떤지 알려준다. 그리고 몇 분을 기다리면, 해당 패키지의 타입 contributor들에게 이 PR 리뷰 좀 해줘~~ 라고 자동으로 멘션해준다.
7. 결과 및 느낀점
나는 해당 PR을 2020년 9월 5일에 올렸다.
아직 오픈소스 컨트리뷰트에 10%도 안해봤다고 생각하는데 그래도 조금씩 성장하는 느낌이 있어서 매우 기분이 좋다. 좀 더 적응하면 내가 자주 사용하는 패키지를 직접 고쳐보는 컨트리뷰션도 해봐야겠다. 세상에 다양한 개발자들이랑 소통하는게 생각보다 재밌다!
이 글을 9월 중순에 쓰고 Merge되기만을 기다렸는데 드디어! 10월 14일 새벽에 Merge되었다. 사실 1~2주안에 리뷰된다고 적혀있어서 기대를 좀 했는데, 몇 주가 지나도 리뷰가 없길래 내가 뭘 잘못했나 싶었다. 근데 이렇게 길고 긴 기다림끝에 Merge 받고나니까 기분이 좋다. 내가 쓰는 다른 패키지들도 열심히 컨트리뷰트해봐야겠다.
npm package에 내 이름 들어가니까 신기하다!
'Programming > TypeScript, JavaScript' 카테고리의 다른 글
애플리케이션 렌더링 전략 (CSR, SSR) (0) | 2023.03.26 |
---|---|
JavaScript의 Eventing이란? Eventing 전파를 막는 세 가지 기법 (1) | 2022.09.25 |
[ESLint] imports/exports 구문의 순서 자동 정렬하기 (2) | 2021.08.26 |