이번 게시글은 어쩌다가 깃헙오픈소스에 코드기여한 썰입니다.
제가 경험했던 경험담과 프로세스에 대한 내용을 담고있습니다.
오픈소스 찾기
혹시 Notion 에 대해 알고계신가요?
Notion 은 개발생산성에 관련된 서비스인데요, 이와 관련된 오픈소스 프로젝트들이 Github에 꽤나 올라가있습니다.
그 중, 하나는 notion-sdk-py 입니다.
https://github.com/ramnes/notion-sdk-py
notion-sdk-py 는 Notion 을 Python으로 개발하게하는 오픈소스 SDK 프로젝트입니다.
서드파티 프로젝트라고 생각하면 적절할것 같습니다.
제가 기여할만한 내용이 있을까요?
개발자라면 누구나 오픈소스 기여에 대한 열망이 있을거라고 생각합니다.
그러나, 오픈소스의 진입장벽 때문에 많은사람들이 기여하려는 시도조차 하지 못한다고 생각합니다.
저 또한 그랬습니다.
저는 이전에 오픈소스 기여를 하기위한 다양한 시도를 하였고, 번번히 실패하였습니다.
그래서, 저에게 오픈소스 기여 시 가장 중요한 것은 ‘내가 기여할 수 있을 정도로 진입장벽이 낮은가?’ 이었습니다.
이건 해볼만 하겠는데?
Github 이슈탭을 유심히 확인하던중, 아래의 이슈를 확인하게되었습니다.
링크: https://github.com/ramnes/notion-sdk-py/issues/233
상황을 설명하면 다음과같습니다.
- Notion developer docs 에서 Change log(2024-04)의 안내사항에 특정 Property 가 추가되었고, 이를 notion-sdk-py 에서도 반영해주어야합니다.
@jeromegit
는 특정파일의 특정코드라인에in_trash
라는 단어를 수정하면 된다고 합니다.
저는 위의 대화가 2024.05.17 까지 진행되었으나, PR - merged 되어있지 않다는것을 알아차렸고,
어떤 코드를 작성해야하는지, 어떻게 수정해야하는지 알고있으나, 메인테이너분들께서 직접수정하지 않은 상태로 놔뒀다는것을 확인했습니다.
어떻게 해야 Contribute 할수 있을까?
위 상황이면 충분히 Contribute 해볼만하다는 생각을 했습니다.
이전에 Contribute 를 해본경험이 없기때문에 우선 가이드문서를 찾았습니다.
- 일반적으로 오픈소스는
contributing.md
파일에 컨트리뷰트 가이드를 명세합니다.
notion-sdk-py
는 .github/CONTRIBUTING.md
에 적어놓았고, 아래의 프로세스를 따릅니다.
1. 현재 Repository 를 Fork 한다.
2. Fork 한 문서에서 이슈로 checkout 한다.
3. 다음의 커맨드를 실행하여 기여환경을 구성한다.
python -m venv .venv
source .venv/bin/activate
pip install -r requirements/dev.txt
pre-commit install
4. 이후 코드 수정을 하고, pytest 의 coverage 가 100% 라면 PR을 작성한다.
pytest
첫번째 커밋
위에서 메인테이너분들이 이슈에 대한 설명을 해놓았지만, 제가 조금 더 찾아보니 이상한점이 있었습니다.
Changelog 를 확인해보면 in_trash
, archvived
를 함께 지원한다고 공지하고 있습니다.
그러나, 이번에 코드 수정을 하는 endpoint 인 page properties 의 경우 parameter 로 in_trash
만 사용하고 있었습니다.
그래서 archived
파라미터를 제거한 in_trash
파라미터를 사용하는 소스코드로 변경하였습니다.
pytest
를 진행하였을때도 coverage 가 100% 를 달성하였기에, 성공적인 코드수정이라고 생각하였습니다.
두번재 커밋
오픈소스 기여을 처음해보는 입장이었기에, 진행중인 Issue 탭에서 확실하게 절차 및 코드를 확인받고 PR을 하고자하였습니다.
그래서 관련된 질문을 하였습니다.
한글로 번역하면 아래내용입니다.
- 코드
archived
를in_trash
로 변경하였습니다. pytest
coverage가 100% 입니다.- 이제 PR 하면 될까요?
메인테이너에게 질문에 대한 답변이 달렸습니다.
한글로 번역하면 아래내용입니다.
- 왜
archived
를 제거했나요? changelog 에서archived
와in_trash
는 함께사용가능하다고 안내되었습니다. pytest
coverage가 100% 라면 PR 하면 됩니다.
그래서 저는 코드를 수정한 이유를 답변하였습니다.
한글말로 번역하면 아래내용입니다.
- Notion API Docs 에서 patch-page 는
in_trash
property를 사용중이고, update-a-block 은 여전히 archived 를 사용중입니다. - 지금 수정하려는 코드는
PageEndpoint
라는 클래스이며, Notion API Docs 의 page 항목은in_trash
를 사용중입니다. archived
와in_trash
를 함께 사용했을때pytest
coverage는 100% 입니다.- 어떻게할까요?
그리고 메인테이너가 지침을 알려주었으며, 저는 확인이후에 답변하였습니다.
한글말로 번역하면 ‘notion-sdk-js
’ 라는 오픈소스 프로젝트가 있으니, 해당 프로젝트에서 진행한 내용으로 동일하게 진행하자는 내용입니다.
notion-sdk-js
는 notion에서 공식 지원하는js
오픈소스 프로젝트입니다.
(링크: https://github.com/makenotion/notion-sdk-js)
그리고 notion-sdk-js
는 아래처럼 되어있습니다.
Page 관련 소스코드에서 archived
와 in_trash
를 함께 사용하고 있엇습니다.
그래서 저는 관련내용을 첨부하며 진행내용을 공유하였습니다.
PR 작성하기
코드를 수정한 이후에 할 것은 PR(Pull Request)를 작성하는것입니다.
Issue 탭에서 이미 메인테이너 분과 많은 대화를 나눈상태로 PR을 작성하는거라 큰 부담감은 없었으나
Merged된 다른 PR 은 어떻게작성했는지 내용을 먼저 확인했습니다.
적당한 템플릿이 있는지 확인하기 위함이었으나, 그런것은 없었으며
적당히 만들어서 PR올리면 되겠다고 생각하였습니다.
그리고 시간이 지났습니다
알림확인
PR 이후에 이메일로 알림이 도착했으며, 제목은 PR run failed 이었습니다.
자세한 내용을 확인해보니 Github actions 에서 Test 목적으로 CI를 구성하였는데
그 부분에서 에러가 발생한것이었습니다.
이슈 발견
위에서 에러 알림을 받은 이후, 메인테이너에게 아래의 답변이 달렸습니다.
- CI에 버그가 생겨서 에러알림이 발생한것 같고, CI 와 상관없이 코드PR은 수정해도될것같다. 코드기여에 감사하다.
라는 내용이었습니다.
그리고 메인테이너 분께서 PR 을 승인하였습니다.
기여성공
이렇게 notion-sdk-py 프로젝트의 Contributor 명단에 제 이름이 들어가게되었습니다.
후기
이번경험을 통해서 opensource contribute가 어떤프로세스로 진행되는지 알게되었습니다.
이슈생성 → 메인테이너분들과 티키타카 → 코드수정 → PR 생성 ⇒ Merge
라는 일련의 프로세스를 알게되었고, 일반적으로 많은 오픈소스들이 위의프로세스를 사용한다는것도 알게되었습니다.
이번 contribute 는 기존 메인테이너분들께서 이미 만들어놓은 이슈, 제공한 코드를 사용하여
제가 적절히 의견종합하여 Contribute 하였기 때문에, 크나큰 기여는 아니라고 생각합니다.
그러나, 생각보다 많은 메인테이너분들께서 뉴비개발자에게 기회를 주려고 하고계시다는 점을 알게되었습니다.
적절한 사진인거같아서 가져와봤는데… 이 짤이 너무 적절한것 같습니다.
저도 실력좀 쌓고 많이 기여해봐야겠어요
'외부활동' 카테고리의 다른 글
[T101] 4기 스터디: OpenTofu (1) | 2024.08.03 |
---|---|
[T101] 4기 스터디: AWS EKS Blueprints 로 ArgoCD 배포 (0) | 2024.07.28 |
[T101] 4기 스터디: Module (3) | 2024.07.14 |
[T101] 4기 스터디: Confluent Cloud with Terraform (0) | 2024.06.29 |
[AEWS] 2기 스터디: Terraform (0) | 2024.04.28 |