나의 삶

Node.js 기여해보기

꼰딩 2024. 9. 2. 13:49

7월부터 오픈소스 컨트리뷰션 아카데미 라는 프로그램에 참여하여 멘티로 활동하고 있습니다.

https://chss3339.tistory.com/28

 

오픈소스 컨트리뷰션 아카데미에서 Node.js 참여형 멘티로 참여하게 되었습니다. (OSSCA)

아카데미 소개 사이트https://www.contribution.ac/ OSS 사이트 내 아카데미 소개 페이지https://www.oss.kr/contribution_academy OSS 사이트 내 참여형 프로젝트 소개https://www.oss.kr/ossca_24_projects_2 OSS 사이트 내 Node

chss3339.tistory.com

 

초반에는 어려운 내용도 많이 기여를 해보고 싶다고 생각을 했는데, 이게 생각보다 만만치않았습니다.

웹개발에서 많이 사용되는 아키텍처, 패턴이 적용되지 않았고, 줄임말이 너무 많아 코드를 확실하게 이해하기가 쉽지 않더라구요.

그리고 내부적으로 특정 주제에 대해 찬성/반대파 여론도 있고, 이게 PR에도 드러났습니다.

 

생각보다 어려워서 어떻게 시작을 해야될까 하던 차에, 다른 멘티분이 TODO 목록을 찾아 PR을 올리셨고 Merge까지 된 것을 확인하고서TODO를 찾기 시작했습니다. 참고로 이분은 되게 유명하신 분입니다. https://velog.io/@surim014

마침 뭘 해야될지도 적혀있는 TODO를 찾아 수정하고 PR을 올렸고, 그 TODO 주석을 작성한 분을 cc로 태그했습니다.

그런데 그분이 이걸 꼭 해야하는지 의문이 든다는 댓글을 남기셨고, 너무 당황스러워서 이유를 물어보지도 않은채 PR을 닫았습니다.

https://github.com/nodejs/node/pull/54034

 

lib: use a cli options binding function instead of process by MCprotein · Pull Request #54034 · nodejs/node

change to use getOptionValue instead of the process object. cc. @joyeecheung

github.com

 

추후 멘토님께 이 얘기를 드렸는데, 이유라도 물어보고 닫을껄 하는 후회가 들었습니다.

그래도 이런 경험을 해서 TODO라고 무조건 해야되는게 아니라는 것을 알게 되었습니다.

 

그러고 또 다른 TODO를 찾아보았습니다.

일단 merge가 되서 contributor 뱃지를 다는게 목표였기때문에 하나만 걸려라 하는 마음으로 찾아보았고, 이번에도 해야할 일이 명확하게 적혀있는 TODO를 찾아서 고치고 PR을 올렸습니다.

그런데 CITGM이 필요하고, CITGM ci가 통과하는것을 전제로 approve를 받았습니다.

https://github.com/nodejs/node/pull/54032

 

stream: Relocate the status checking code in the onWriteComplete by MCprotein · Pull Request #54032 · nodejs/node

Modified the code to check the status before verifying if the stream is destroyed. error name refs: / / lib/internal/webstreams/adapter.js function onWriteComplete(status) { if (status < 0...

github.com

 

CITGM은 Canary In The Gold Mine의 약자로, Node.js 코드를 변경함으로 인해 Node.js 외부 코드에 영향을 미치는지 확인하는 working group입니다. 필요시 CITGM CI가 따로 실행됩니다.

하지만 CITGM 내부적으로 이슈가 있어서 CI가 정상적으로 실행되고 있지 않았고, 아직까지 CITGM이 안정화되기를 기다리고 있습니다.

 

아직도 contributor 뱃지를 달지 못해서 조바심이 났고, 놓친게 있나 싶어서 doc 폴더 내부에 있는 문서를 자세히 보기 시작했습니다.

그러다가 primodials.md 문서를 보게 되었는데, 흥미로운 내용이 있었습니다.

https://github.com/nodejs/node/blob/main/doc/contributing/primordials.md

 

node/doc/contributing/primordials.md at main · nodejs/node

Node.js JavaScript runtime ✨🐢🚀✨. Contribute to nodejs/node development by creating an account on GitHub.

github.com

 

primodials는 Node.js의 자바스크립트 레이어에서 C++에 바인딩하여 가져와서 사용하는 객체로, 유용한 함수들이 많이 들어있습니다.

(나중에 이 primodials가 성능적으로는 그닥 좋지 않아 찬성파와 반대파로 나뉜다는 것을 알게 되었습니다.)

이 문서 아래에 보면 array의 prototype이 사용자에 의해 변경되어 오염될 경우 의도하지 않은 작동을 할 수 있는 문법이 나와있습니다.

대표적으로 for of, slice, spread operator 등이 있는데 이것을 코드에 검색해보니 사용하고 있는곳이 꽤 많았습니다. 일단은 처음이기도하고, approve 될지도 몰라서 하나만 고쳐서 PR을 올렸는데 어떤 tsc (node.js의 technical steering committee) 에 속한 분이 롤백하지 않으려면 벤치마크 결과가 필요하다고 댓글을 달아주었습니다.

https://github.com/nodejs/node/pull/54053

 

lib: replace spread operator with primordials function by MCprotein · Pull Request #54053 · nodejs/node

replaced the spread operator with ArrayPrototypeSlice to avoid reliance on user-mutable methods and enhance the safety of array iteration Refs: https://github.com/nodejs/node/blob/main/doc/contribu...

github.com

 

그런데 수정한 코드에 대한 벤치마크 파일이 없어서 어떻게 해야될지 몰라 놔두고 있었는데, 어떤 친절하신 분이 벤치마크 파일을 추가해주셨고, 결국 approve를 받아 merge 될 수 있었습니다. 다음에도 이런 일이 발생한다면 제가 벤치마크 파일을 만들어볼 수 있겠다는 생각이 들었습니다.

 

문서부분도 수정할게 있는지 찾아봤는데, 생각보다 오타가 많았습니다. 그래서 아래 두 PR을 올려서 빠르게 approve, merge 되었습니다.

주석 오타: https://github.com/nodejs/node/pull/54093

 

lib: fix typos in comments within internal/streams by MCprotein · Pull Request #54093 · nodejs/node

fixed typos in comments within the internal/streams directory.

github.com

가이드문서 오타: https://github.com/nodejs/node/pull/54094

 

doc: fix typo in technical-priorities.md by MCprotein · Pull Request #54094 · nodejs/node

added a space between the two words. now

github.com

오타는 코드 수정에 비해 명확해서 굉장히 빠르게 approve 되었고, 특히 가이드 문서 오타는 fast-track 라벨을 받기도 했습니다.

node.js에서는 approve를 받고나서 2일? 인가 후에 깃허브 봇에 의해 자동으로 merge가 되는데, fast-track 라벨이 있으면 안기다리고 바로 merge 됩니다.

 

짜잘한것들을 수정해서 올리고 merge를 받으니, 이제는 좀 어려운 내용이나 많은 코드를 수정해보고 싶었습니다.

하지만 요즘에 코드잇에서 풀스택 부트캠프 스프린트2기 멘토로 활동을 하고 있어서 여유가 없어 node.js코드를 많이 보지못했습니다.

그래서 간단하게 할 수 있을만한것을 찾아보았는데, 납득하기 어려운 코드가 있었습니다.

for of 로 써놓고, i를 for 바깥에 let으로 선언해서 인덱스처럼 사용하고 있는걸 발견해서 for range로 바꿨습니다. 어차피 primodials 문서에 의하면 for of는 좋지 않은 선택이기때문에 바로 approve를 받을 수 있었습니다.

https://github.com/nodejs/node/pull/54258

 

lib: avoid for of loop and remove unnecessary variable in zlib by MCprotein · Pull Request #54258 · nodejs/node

removed the unnecessary declaration of 'i' in the _final method scope and changed the for of loop to a for loop Refs: https://github.com/nodejs/node/blob/main/doc/contributing/primordials.m...

github.com

 

위에서도 서술했듯 요즘 코드잇 멘토링으로 인해 node.js 기여 활동에 소극적으로 참여하고 있습니다.

node.js 코드 자체가 어렵고, 시간을 많이 투자해야 뭐가 좀 보이는거같은데 시간 투자하는게 잘 안되서 어떻게 해야할지 고민이 됩니다.

 

하지만 하나 확실한것은, 오픈소스 기여 활동 자체는 그렇게 어렵지 않다는 것입니다.

어려운 내용을 수정하는게 어려운거지, 오픈소스 기여 자체는 쉽습니다. 다만 우리나라에서는 오픈소스에 기여하는 분위기가 많이 형성되어있지 않아서 진입장벽이 있는거같습니다.

오픈소스 컨트리뷰션 아카데미 활동이 11월 초까지인데, 그래도 남은 기간 동안 좀더 시간 쏟으려고 노력해봐야겠습니다.