React 메인 레포에 이슈를 던졌는데 PR을 뺏겨버렸다..
최근 개인 프로젝트로 커스텀 ESLint 플러그인을 개발하던 중, 문득 궁금해졌습니다.
업계 표준인 React 팀은 플러그인을 어떻게 관리하고 있을까?
참고를 위해 facebook/react 레포지토리를 파헤치던 저는, 생각지도 못한 '빈틈'을 발견하게 됩니다.
어쩌다 발견했는지?
제가 개발 중인 플러그인에 반영할 모범 사례를 찾기 위해 eslint-plugin-react-hooks의 소스 코드를 뜯어보고 있었습니다. 그런데 제 눈에 띈 의아한 코드 한 줄
// packages/eslint-plugin-react-hooks/src/index.ts const plugin = { meta: { name: 'eslint-plugin-react-hooks', version: '7.0.0', // 너 왜 여기 하드코딩 되어 있니? }, // ... };
보통 패키지 버전은 package.json에서 통합 관리하는 것이 정석입니다. 원칙이라고 하죠. 그런데 React 같은 대형 프로젝트에서 버전 정보를 소스 코드에 문자열로 박아두고 있다니 신기했습니다.
이대로라면 나중에 package.json의 버전은 올라가는데 소스 코드의 버전은 그대로 남는 '버전 불일치' 휴먼 에러가 발생할 가능성이 다분해 보였습니다.
커밋 기록을 확인해보니 실제로 사람이 해당 버전을 올린 흔적을 발견하고 이건 의도된게 아닌 진짜 하드 코딩된것이라고 히스토리를 파악했습니다
이건 못참지~ 바로 이슈올리기
이건 명백한 개선 포인트라고 확신했습니다. 저는 곧장 이슈를 작성했죠. 단순히 "고쳐주세요"가 아니라, 왜 이게 문제인지 논리적으로 설명했습니다.

문제점: 버전 정보가 하드코딩되어 유지보수성을 해칠 수 있음
리스크: 릴리스 프로세스에서 메타데이터 불일치 발생 가능성.
해결책: Node.js/ESM 환경에 맞게 package.json에서 동적으로 버전을 import 하는 방식 제안.
AI로 한국어를 열심히 영어로 번역해 이슈를 투척하고, 내심 "나도 이제 React 컨트리뷰터가 되는 건가?" 하는 설렘에 부풀어 있었습니다.
그리고 눈 뜨고 코 베인 사연
솔직히 말하면 저는 이슈를 올리고 메인테이너 체크 후 PR작업을 진행하는 과정인 줄 알았습니다.. 그러던 중
Arktomson linked a pull request that will close this issue (#35783)
"어..?"
제가 올린 이슈를 보고 다른 개발자가 PR(Pull Request)을 날려버린 겁니다. 제가 코드를 고쳐서 올리기도 전에, 제 이슈에 적힌 해결 방안을 그대로 구현해서 말이죠.
오픈소스 세계가 빠르다는 건 알았지만, 이 정도일 줄은 몰랐습니다. 제 아이디어와 논리는 채택되었지만, 정작 코드 커밋 로그에는 제 이름이 남지 않게 된 것이죠.
이번 경험으로 배운 것들
비록 공식적인 'Contributor' 배지는 놓쳤을지 몰라도, 얻은 것은 많습니다.
비록 아직 머지된건 아니지만 현재 pr이 올라와있습니다
다음에는 이슈를 올림과 동시에 "내가 작업 중이야" 라고 깃발을 꽂거나, 아예 PR부터 날려야 한다는 귀중한 교훈을 얻었습니다.
마무리
코어 로직 수정이나, 버그 수정 등 엄청난 기여는 아니지만 초 대규모 오픈소스에 이슈를 투척하는 경험은 참 짜릿한 것 같습니다.
제가 PR을 올리지 못해서 좀 억울하긴 해요...
내가 올린 이슈: https://github.com/facebook/react/issues/35722#event-4745973050
가져가버린 PR 링크 ㅠ: https://github.com/facebook/react/pull/35783
이번엔 '아이디어 제공자'에 머물렀지만, 다음번엔 반드시 '코드 기여자'로 이름을 남겨보겠습니다.