전 세계적으로 알려진 기술에서 버그가 발생해 당황한 적이 있으세요? 그럴 때 어떻게 하셨나요?
Web GDE인 Erick Wendel은 직접 나서서 빅테크 기업을 괴롭혀온 버그에 대한 해결책을 찾습니다.
Erick은 커뮤니티 중심의 개발자로, 모국인 브라질에서 무료 강좌를 제공하던 소프트웨어 커뮤니티를 통해 이 분야에 발을 들여놓게 되었습니다. 커뮤니티에서의 경험으로 오픈소스 프로젝트와 협업에 대한 열정에 불이 붙어 런타임에서 하위 프로세스가 작동하는 방식에 영향을 미치는 Node.js 내의 문제를 해결할 수 있었습니다. Erick은 자세한 과정을 보여주는 YouTube 동영상(포르투갈어)에서 버그를 해결한 방법을 정확히 설명함으로써 지식 공유의 정신을 이어갔습니다.
Node.js에는 백그라운드에서 데이터를 처리하도록 다른 함수에서 작업을 생성할 수 있는 하위 프로세스라는 모듈이 있습니다. 이 프로세스는 컴퓨터와 웹 페이지에서 더 높은 성능을 제공하여 페이지를 더 빠르게 로드할 수 있습니다. JavaScript에서 모듈을 가져오려고 할 때 이런 모듈을 로드하는 다음 두 가지 주요 방법이 있습니다.
Erick은 학생을 대상으로 한 교육 강좌를 만드는 동안 Node.js의 하위 프로세스 모듈을 사용하고 백그라운드에서 실행될 함수를 예약하려고 했습니다. 상위 프로세스가 올바르게 작동한다면 함수를 호출하는 즉시 백그라운드에서 실행 중인 프로그램으로 메시지를 보냈어야 합니다. 이를 수행하는 동안 Erick은 오류가 발생했고 심지어는 코드를 여러 차례 다시 작성했습니다. Erick은 코드가 올바로 작동했어야 한다고 100% 확신했지만, 그러한 확신에도 불구하고 계속해서 오류가 발생했습니다. 그래서 이런 생각을 했습니다. '여기에 setTimeout 함수를 넣고 조금 기다린 다음 이벤트를 요청하면 어떨까?' 과연 그 생각대로 드디어 코드가 작동했습니다! Erick은 이것이 사실은 실제 버그라는 점을 깨닫고 Node.js의 GitHub 리포지토리로 바로 가서 문제를 공개하고 다른 기여자와 협력하여 최선의 해결책을 찾았습니다.
Erick은 이런 것을 알게 된 이후에 이 문제가 자신에게만 영향을 주는 것이 아니라는 점을 확인하고 싶었습니다. Erick은 "Google에서 이 문제를 검색해 보니 Facebook Jest, Yarn 그리고 JavaScript를 실행하는 누구라도 사용할 수 있는 다른 대규모 라이브러리에서 이러한 문제를 발견했어요."라고 합니다. 오픈소스 프로젝트와 협업의 옹호자로서 Erick은 Node.js의 GitHub에서 이 문제를 제기하여 논의했으며 다른 기여자들도 참여했습니다.
이 버그를 수정하는 데 사용한 리소스에 대해 묻자 Erick은 망설임 없이 오픈소스 커뮤니티를 언급했습니다. Erick은 가장 중요한 Node.js 기여자 중 한 명이라 생각하는 Anna Henningsen과 대화를 나누었습니다. Erick이 제안한 아이디어는 이벤트가 '준비'되었을 때 사용자에게 알리는 새로운 이벤트를 하위 프로세스 모듈에 도입하는 것이었습니다. 그러나 Anna가 지적했듯이, 이것은 커뮤니티가 이 새로운 프로세스를 사용하는 방법을 배워야 하는 변화로 이어졌을 것입니다. 그래서 Anna는 대신 "모든 메시지를 그냥 큐에 넣고 하위 프로세스가 준비되었을 때 모두 보내면 어떨까요?"라고 제안했습니다. 이것이 바로 Erick이 추구하는 협업이었고 Anna의 이 해결책은 Node.js를 사용하는 모든 애플리케이션에 영향을 주지 않고 버그를 수정하는 방안이었습니다.
Anna는 엄청난 지원을 제공했으며 GitHub에서 논의를 시작한 직후 커뮤니티 구성원들이 프로젝트에 대한 댓글을 추가하고 각자의 의견을 제시했습니다. Erick은 당시의 일을 이렇게 회상합니다. “제 솔루션의 첫 번째 버전을 제출한 후 도움을 주신 많은 분들이 코드를 검토한 다음 ‘아니요, 이건 올바른 방법이 아니에요, 이걸 수정해야 해요, 이건 성능 문제입니다.’ 등 많은 피드백을 해주셨어요. 많은 점을 배우면서 코드를 수정했고 마침내 코드가 승인되었습니다!" 오픈소스 커뮤니티의 도움이 없었다면 더 많은 문제를 일으켰을 해결책을 붙잡고 시간을 허비했을 겁니다. 그런데 커뮤니티에서는 Erick이 놓친 점들을 지적해 주었고, 이러한 협업을 통해 원활한 해결책을 찾을 수 있었습니다.
Erick의 해결책으로 Node.js는 ECMAScript 모듈을 사용하여 백그라운드 작업을 효과적으로 실행할 수 있으며 대기업들은 Erick과 오픈소스 커뮤니티 덕분에 Node.js가 시작된 이래로 계속 문제가 되었던 부분을 해결하게 되었습니다.
이 문제를 해결한 이후 Erick은 pull 요청을 검토하고 토론에 참석하며 해당 분야에서 영향력 있는 개발자로 여겨지는 Node.js 핵심 구성원이 되었습니다. Erick은 또한 전 세계 컨퍼런스에 초대되어 오픈소스 개발과 관련 경험을 주제로 발표했습니다.
Erick은 오픈소스 프로젝트가 주목을 받기를 원하고 학생과 전문가에게 모두 오픈소스에 도움을 달라고 간청합니다. 이러한 프로젝트는 Erick의 세상에 무엇인가 남기겠다는 목표에 대해 도움이 되었고 “저는 사람들이 오래 기억할 무언가에 이름을 남기고 싶어요. 이것이 오픈소스의 힘이라고 말하고 싶군요. 아이디어를 추가하거나 무언가를 해결하려고 노력하여 더 나은 개발자 그리고 더 나은 사람이 될 수 있어요.”라고 설명합니다.
Erick은 계속해서 여러 가지 문제를 해결하고(그가 가장 최근에 해결한 문제는 Node.js의 한 버그를 코드 한 줄로 수정한 일이었음) 새로운 것을 배우고 YouTube 채널을 통해 교육하면서 다음 큰 도전을 기대하고 있습니다.
Erick은 오픈소스 커뮤니티, 특히 이 해결책에 대한 Anna Henningsen과 Rich Trott의 지원과 기여에 감사합니다. Erick은 "경험이 풍부한 Node.js 공동작업자라면 이 버그를 단 몇 분 만에 수정했을 거라는 점을 잘 알아요. 그분들은 제가 최선을 다하도록 도와주셨죠. 항상 기억에 남을 교훈이랍니다.”라고 말했습니다.
You can find Erick on Twitter, GitHub and YouTube where he published a step-by-step tutorial (in Brazilian Portuguese) on how he fixed this bug and also gave a summarized tech talk sharing his journey.
Google Developer Experts(GDE) 프로그램은 경험이 매우 풍부한 기술 전문가, 인플루언서 및 사고 리더로 구성된 글로벌 네트워크로서 각종 이벤트에서의 발표 및 콘텐츠 게시를 통해 개발자, 기업 및 기술 커뮤니티를 활발하게 지원합니다.