soulee.dev
오픈소스 컨트리뷰션 아카데미(2/2)

오픈소스 컨트리뷰션 아카데미 - (2) Node.js 후기

· 10 min read

2026 오픈소스 컨트리뷰션 아카데미(OSSCA)에 Node.js 팀으로 참여해 PR 12개 중 11개를 머지시키고, 최종 대상(과학기술정보통신부장관상)을 받았다.

다시, OSSCA

나는 오픈소스 기여를 정말 좋아한다. 2023년에도 OSSCA에서 python-mysql-replication 프로젝트로 리드 멘티와 발표를 맡아 우수상을 받았다.

올해는 회사에 들어온 지 6개월이 채 안 됐지만, 남는 시간에 더 도전해 보고 싶어서 지원서가 열린 첫날 바로 지원했고, 그렇게 Node.js 팀에 합류했다.

Node.js는 써보기만 했지, 기여는 물론 소스 코드를 열어본 적도 없었다. 다행히 멘토님이 빌드 방법부터 모듈을 추가하는 방법까지 체계적으로 알려주셨다. 바로바로 이해하지는 못했지만, 덕분에 어디를 봐야 할지 길잡이를 얻을 수 있었다.

FFI 발제와 스터디

그러다 더 주도적으로 기여해 보고 싶어져서, Node.js에 새로 들어온 node:ffi 모듈을 주제로 발제를 던지고 스터디를 모집했다.

node:ffi 스터디 모집글

모집글을 보고 여러 사람이 모였고, 우선 FFI 모듈에서 부족한 부분들을 함께 채워 나가기로 했다.

그 과정에서 내가 나서서 FFI 모듈의 내부 구조를 발표했다. 사실 FFI는 이름만 들어 봤지 써본 적도 없어서, 발표를 준비하면서 공부하고 그걸 다시 발표하는 식으로 진행했다.

node:ffi 스터디 첫 모임

libffi 레지스터 매핑 발표

Node.js FFI 전체 호출 흐름

ffi_call_unix64 어셈블리 코드

2023년처럼 리드 멘티도 해보고 싶었지만, 당시 회사에서 바쁜 개발 건들을 쳐내야 해서 같이 하기는 어렵겠다고 생각해 지원하지 않았다.

퇴근 후의 기여

OSSCA 기간 동안 Node.js에 PR 12개를 올렸고, 그중 11개가 머지되었다. 회사를 다니면서 퇴근하자마자 기여할 거리를 찾았는데, 무엇을 할지 아이디어를 내는 게 어려웠다.

그래서 AI를 활용해 기여할 거리를 찾았다. 문서에 걸린 URL이 제대로 동작하는지, 문서 내용과 테스트가 서로 맞는지 확인하게 하고, 전체 흐름을 테스트해 보면서 잘못된 부분이 없는지 살펴보게 했다. 특히 FFI는 새로 들어와 기여가 활발히 이루어지는 모듈이라 코드가 계속 바뀌고 있었고, 그만큼 버그나 실수에서 나오는 기여 거리도 많았다.

처음에는 여러 곳에 흩어져 있는 로직을 공통 함수로 쓰도록 바꾸는 리팩터링과 문서 수정부터 시작했다. Masters1 기간부터는 FFI의 검증 로직을 고치고 벤치마크와 성능을 개선했다.

구현 자체는 AI 덕분에 어렵지 않았다. 이미 같은 기여가 있지는 않은지, 누가 해결하고 있거나 논의 중인 건 아닌지, 무엇보다 내가 이 코드를 정말 이해하고 있는지 고민하는 데 가장 많은 시간을 썼다.

AI 시대의 오픈소스

OSSCA 기간 중에는 이슈를 AI 에이전트로 자동 해결해 PR을 쉴 새 없이 올리던 사람이 있었는데, 결국 Node.js에서 정지된 것으로 보였다.

2023년 python-mysql-replication 때는 리뷰를 활발하게 주고받았는데, 이번에는 코드 리뷰도 대부분 별다른 코멘트 없이 승인만 받고 머지되었다.

특히 기억에 남는 건 Bun이었다. Bun에서는 PR 대부분을 robobun이라는 봇이 자동으로 작성하고, 그 코드마저 CodeRabbit과 Claude가 리뷰하고 있었다. 마치 다크팩토리 같았다.

다크팩토리(Dark Factory): 사람이 없어 불을 꺼둔 채로 돌아가는 완전 자동화 공장

Deno에 구현된 FFI에도 관심이 생겨 Deno에도 기여하려고 했지만, 메인 컨트리뷰터들이 Cloudflare에 인수되면서 개발이 중지되었다는 소식에 아쉬웠다.

물론 나도 회사에서든 개인적으로든 AI를 많이 쓰고 있다. 하지만 AI 시대에도 오픈소스에서 사람이 할 일은 남아 있다고 생각한다. 코드는 AI가 얼마든지 써줄 수 있지만, 어떤 문제를 풀고 무엇을 만들지 기획하는 일, 그리고 그 결과를 끝까지 책임지는 일은 여전히 사람의 몫이다. 이번에 구조체 지원을 준비하면서도, 다른 프로젝트의 구현을 비교하고 방향을 정해 커뮤니티와 맞춰 가는 과정은 결국 사람이 해야 하는 일이었다.

최종 발표

최종 발표 전부터는 발표에 전념해서 오프라인으로 2번, 온라인으로 2번 만나면서 발표자료와 스크립트를 계속 다듬고, 발표 연습을 했다.

특히 발표 전날에는 같이 발표하는 멘티분과 새벽 1시까지 스크립트를 다듬었다.

발표는 꽤 많이 해봤다고 생각했는데도 여전히 떨렸다.

어쩌다 보니 OSSCA 기간 동안 Node.js에 머지된 PR의 약 10%가 우리 팀이 올린 PR이었다.

OSSCA 2026 성과공유회 최종 발표

우리 팀은 팀원들의 기여 활동을 한눈에 볼 수 있도록 Board라는 웹 페이지도 만들었다. 2024년부터 연도별로 참여자들이 올린 PR과 활동 기록, 기여 노트를 한곳에서 볼 수 있다.

심사위원분들은 Challenges와 Masters 기간 사이의 변화와, 우리가 만든 Board 웹 페이지의 지식 그래프를 좋게 봐주셨다. 이 커뮤니티 지식을 앞으로 어떻게 유지할지에 대한 질문도 나왔는데, 잘 답변했다고 생각한다. 발표가 끝나고 나니 참 시원섭섭했다.

결과

어떤 결과가 나올지 걱정 반 기대 반이었다. 그렇게 기다리다가 오후 4시, 회사에서 일하던 중에 대상이라는 연락을 받았다. 처음 받아보는 장관상이라 정말 기뻤다.

2026 오픈소스 컨트리뷰션 아카데미 최종 수상팀 발표

OSSCA를 고민하는 사람에게

OSSCA에 관심 있는 사람이라면 꼭 추천한다. 회사를 병행하다 보니 작업은 주로 주말이나 퇴근 후 저녁에 해야 했고, 개인 시간을 많이 써야 하는 건 사실이다.

Challenges 기간(7/11 ~ 8/14)에는 발대식과 팀 모임 3번에 참여했고, Masters 기간에는 팀 미팅 7번 중 6번에 참석하면서 주말에 4번, 한 번에 3~4시간씩 오프라인 스터디를 했다.

그래도 그만큼 성장할 수 있고, 많은 사람을 만날 수 있는 기회다. 무엇보다 내가 하는 만큼 배워 갈 수 있으니, 기회를 놓치지 말고 열심히 해서 전부 내 것으로 가져갔으면 좋겠다.

앞으로

OSSCA가 끝나고 Node.js 기여는 잠시 쉬고 있지만, 남은 구조체 관련 기여를 마저 하고 V8 엔진 공부도 시작해서, 궁극적으로는 Node.js의 일원이 되고 싶다.

Footnotes

  1. OSSCA 참여형 프로그램은 두 단계로 나뉜다. 7월 11일부터 8월 14일까지는 Challenges 기간이고, 이후 선발된 멘티들이 10월 성과공유회까지 Masters 기간을 이어간다. ↩