커뮤니티의 목소리, 이슈 트래커와 첫 기여자들
제14화
발행일: 2025년 05월 12일
Concurrent Mode라는 거대한 폭풍우를 헤쳐나온 Zustand 호(號). 그 항해는 이전보다 훨씬 안정적으로 변했다. React의 미래와의 호환성이라는 가장 큰 불안 요소가 해결되자, 그동안 관망하던 개발자들이 하나둘씩 Zustand에 발을 담그기 시작했다. 마치 폭풍우가 지나간 뒤 조심스럽게 항구로 모여드는 배들처럼.
이 변화는 다이시 카토가 매일같이 확인하는 GitHub 이슈 트래커에서 가장 먼저 감지되었다. 이전에는 주로 의심과 검증 요청, 혹은 버그 리포트가 주를 이루었다면, 이제는 그 양상이 훨씬 다채로워졌다.
“이슈 트래커가… 살아 움직이기 시작했어.”
카토는 모니터 화면을 보며 중얼거렸다. 그곳은 더 이상 단순한 버그 신고 게시판이 아니었다. 다양한 목소리들이 뒤섞여 활발하게 논의가 오가는, 마치 고대 그리스의 아고라 같은 디지털 광장이 되어가고 있었다.
“작은 버그를 발견했습니다. 이 부분 코드를 이렇게 수정하면 어떨까요?” - 꼼꼼한 사용자의 날카로운 지적.
“이런 기능이 추가되면 정말 좋을 것 같아요! 예를 들면…” - Zustand의 가능성을 보고 더 많은 것을 기대하는 열정적인 제안.
“Zustand를 TypeScript와 함께 사용하려는데, 타입 정의가 조금 아쉽네요.” - 특정 기술 스택에서의 사용 경험을 공유하는 구체적인 피드백.
“persist
미들웨어 사용법이 헷갈리는데, 혹시 예제를 더 추가해주실 수 있나요?” - 이제 막 Zustand를 배우기 시작한 초심자의 솔직한 질문.
질문과 제안, 버그 리포트가 쉴 새 없이 밀려들었다. 처음에는 이 모든 목소리에 응답하는 것이 부담스럽기도 했다. 하지만 카토는 이내 깨달았다. 이것이야말로 오픈소스가 살아 숨 쉬고 있다는 증거라는 것을. 사용자들의 관심과 참여가 없다면, 아무리 잘 만든 라이브러리라도 결국은 외딴 섬처럼 고립될 뿐이었다.
그는 다시 밤낮없이 키보드를 두드렸다. 버그 리포트에는 감사 인사를 전하고 수정 계획을 알렸고, 기능 제안에는 그 필요성과 구현 가능성을 함께 고민하며 답변했다. 사용법 질문에는 친절한 설명과 함께 코드 예제를 덧붙였다. 그의 성실한 소통은 커뮤니티에 긍정적인 에너지를 불어넣었다.
그러던 어느 날, 카토의 메일함에 익숙하면서도 낯선 알림 하나가 도착했다.
[zustand] New Pull Request: Fix typo in README example (#27)
‘Pull Request(PR)?’
이슈 등록이 아닌, PR 알림이었다. 누군가가 단순히 문제를 제기하는 것을 넘어, 직접 코드를 수정하여 ‘이 코드를 받아들여 달라’고 요청한 것이다!
카토는 떨리는 마음으로 PR 링크를 클릭했다. 화면에는 변경된 파일 목록과 함께, 제안된 코드 수정 내용이 녹색과 붉은색으로 명확하게 표시되어 있었다. README 파일의 아주 사소한 오타 하나를 수정한, 정말 작은 변경 사항이었다.
하지만 카토에게는 그 어떤 거창한 기능 추가보다 더 큰 의미로 다가왔다.
‘혼자가… 아니었어.’
Zustand를 만들고, 세상에 내놓고, 문제에 부딪히고 해결하는 이 모든 과정을 그는 외롭게 헤쳐왔다고 생각했다. 하지만 아니었다. 이름도 얼굴도 모르는 누군가가, 지구 반대편 어딘가에 있을지도 모르는 개발자가, Zustand에 관심을 가지고, 시간을 내어 코드를 살펴보고, 심지어 더 나은 방향으로 개선하기 위해 직접 손을 내민 것이다.
이것은 단순한 오타 수정이 아니었다. Zustand 커뮤니티에서 발생한 첫 번째 외부 기여(Contribution)였다. 마치 척박한 땅에 처음으로 돋아난 작은 새싹처럼, 그 PR은 무한한 가능성을 내포하고 있었다.
카토는 잠시 벅차오르는 감정을 누르고, PR 내용을 꼼꼼히 검토했다. 명백히 올바른 수정이었다. 그는 감사 메시지와 함께 ‘Merge’ 버튼을 눌렀다. 자신의 코드가 아닌, 다른 개발자의 코드가 처음으로 Zustand의 공식 코드베이스에 합쳐지는 역사적인 순간이었다.
그 작은 PR을 시작으로, 점차 더 많은 기여자들이 나타나기 시작했다. 어떤 이는 타입 정의를 개선했고, 어떤 이는 테스트 코드를 보강했으며, 또 어떤 이는 새로운 미들웨어 아이디어를 제안하며 직접 코드를 작성해오기도 했다.
이슈 트래커는 이제 카토 혼자 지키는 성벽이 아니었다. 수많은 익명의 동지들이 함께 버그를 찾고, 기능을 제안하며, 때로는 서로의 질문에 답해주기도 하는, 살아 숨 쉬는 협업의 공간으로 변모하고 있었다.
카토는 오픈소스 협업의 힘을 온몸으로 느끼고 있었다. 혼자서는 결코 해낼 수 없었을 발전. 다양한 시각과 경험이 모여 라이브러리를 더욱 풍성하고 견고하게 만들어가고 있었다.
물론, 모든 제안을 수용할 수는 없었다. 때로는 Zustand의 철학과 맞지 않는 기능 요청도 있었고, 격렬한 기술적 토론이 벌어지기도 했다. 하지만 그 과정 자체가 Zustand를 더욱 단단하게 만드는 담금질이 되었다.
Zustand는 더 이상 다이시 카토 한 사람의 창조물이 아니었다. 커뮤니티와 함께 호흡하고 성장하는, 살아있는 유기체로 진화하고 있었다. 그리고 이 성장의 과정은, 또 다른 흥미로운 논쟁과 질문들을 수면 위로 끌어올리고 있었다. 바야흐로, Zustand의 정체성에 대한 본격적인 논의가 시작될 시간이 다가오고 있었다.