마스터스 과정 시작 이후 도전했던 커밋과 과정을 정리해보려고 한다.
test_runner의 mock timer 버그
- 상태: Merged (링크)
Node.js에 내장된 테스트 프레임워크인 test_runner가 있다. test_runner 의 이슈도 찾아보고, 스터디하며 여러 기능을 써보다가, 타이머 기능을 목킹하는 mock timer 가 setInterval 함수의 콜백 내부에서 timer를 clear 한 경우에 제대로 동작하지 않는 점을 확인했다. clearTimer 함수 내부에 interval 을 undefined로 세팅하는 코드와 테스트 코드를 추가하였고, 별다른 논의 없이 머지가 되었다. 그리고 그동안 별 생각 없이 다른 사람들의 PR을 보고 lib: XXX 으로 커밋 메시지를 작성했는데, 특정 모듈에 관련된 경우에는 모듈명을 작성해야 한다고 콜라보레이터가 리뷰를 달아주어서 알게 되었다!
TransfromStream의 tranfer 시 멤버(Readable/Writable Stream) 중복 체크
- 상태: Change requested 후 방향 고민 (링크)
Node.js는 서버 뿐 아니라 웹 호환성 지원 범위를 늘려가고 있다. test/wpt(Web Platform Test)에 Whatwg 명세에 따른 테스트파일과 그 중 expected fail인 목록을 정리한 json파일이 있다. 이 중 TransformStream을 다른 프로세스 또는 스레드 간 메시징을 통해 전송할때, 그 멤버인 Readable 또는 Writable stream을 함께 전송하려고 시도하면 (Transform을 전송할때 이미 그 멤버는 전송이 되기 때문에, 중복으로 인하여) DataCloneError을 던져야 한다는 테스트가 있었고, 이 테스트를 Pass하도록 수정하는 것에 도전해보았다. 처음에는 테스트 코드를 pass하는 것을 목적으로 structuredClone 함수에 TranformStream 여부와 멤버 여부를 확인하는 로직을 추가했다. 그런데 Web Platform 쪽에서 활발히 활동중인 콜라보레이터가 Change Request를 하며 이유를 자세히 설명해주었다. 요약하자면 스펙을 따르지 않는다는 이유였다. 스펙에 따르면 structuredClone 함수는 edge case를 처리하는 로직을 갖지 않는다는 것이다.
리뷰에 달린 WebStreams와 sturcuredClone 관련 스펙 문서를 여러 번 읽고, 기존 코드와 스펙을 비교하고, 코드를 이렇게 저렇게 고치고 테스트하며 일주일 정도를 투자했는데, 이 테스트가 통과되면 다른 테스트가 실패하는 등 난관에 봉착하여, 아직 갈피를 못잡은 상태이다. 리뷰에는 현재 Node.js의 TransformStream의 전송 구현이 불완전하다고 하기도 했고, 스펙에 멤버 스트림이 전송되었다는 여부를 처리하는 부분은 structuredSerializeWithTransfer인데, 이부분을 Node.js에서 찾을 수가 없어서, 혼란스러웠고 다소 복잡한 주제라고 느껴졌다. 그래서 우선 다른 주제를 찾아보기로 하였다.
Single Executable Application 모드의 argv 설정파일 지원
- 상태: Open (링크)
안정된 기능을 스터디하는 것 이외에, 활발히 개발 중인 기능에도 참여해보고 싶어서 Single Executable Application(SEA)을 살펴보았다. SEA는 js파일과 Node.js를 바이너리파일로 배포함으로써 Node.js 를 설치하지 않고도 실행가능하고, 보안 측면에서 유리하다. 현재 지원되는 옵션 중 snapshot이 있다. snapshot은 애플리케이션을 실행하기 전에 미리 Node.js 런타임 상태(메모리, 모듈 로딩 상태, 초기화 결과 등)를 저장해 둔 이미지로서, 이걸 포함해서 빌드하면 초기 실행속도가 빠르고, 고정된 동작을 보장할 수 있다. 코드를 살펴보다 argv를 런타임에 제공되는 것 이외에 JSON 또는 프로그래마틱한 방식으로 configurable 하게 해보자는 TODO 코멘트를 발견하여, 기존의 execArgv (Node.js-specific 아규먼트)를 참고하여 구현해보았다. 테스트 코드를 작성하여 PR을 올렸는데 컨플릭이 나서 확인해보니 아규먼트 전달 경로(env, runtime cli 등) 관련한 커밋이 추가로 머지되어, 내 작업에 영향이 있을 수 있을 것 같다.
test.py결과 all tests passed의 모호함 개선
- 상태: Merged (링크)
PR을 올리기 전에 lint 와 함께 테스트를 돌려보는데, 너무 오래걸려서 ctrl + c 로 실행취소를 했는데도 all tests passed가 출력되어 test.py 를 살펴보니 fail 이 없으면 해당 문자열이 출력되는 것을 확인했다. 출력 조건에 keyboard interrupted 되지 않음을 조건에 추가하였고, 많은 어프루브와 함께 빠르게 머지되었다.
'활동 > 오픈소스 컨트리뷰션 아카데미' 카테고리의 다른 글
| 2025 오픈소스 컨트리뷰션 아카데미 Challenges 회고 (4) | 2025.08.09 |
|---|---|
| 오픈소스 컨트리뷰션 아카데미 2025 참여형 멘티 선발 후기 (0) | 2025.07.06 |