Google 프로그래밍 경진대회(Summer of Code) 및 크롬 확장 프로그램

저는 중국 2학년 학생이며 웹 개발에 관심이 많습니다. 첫해에는 대학의 기술 클럽에 가입했습니다. 이 클럽은 제가 코딩과 오픈소스를 익힌 곳이었습니다. 클럽에서 코딩을 좋아하는 비슷한 생각을 가진 파트너를 만났습니다. 저는 2023년 초에 Google 프로그래밍 경진대회(Summer of Code)에 대해 알게 되었습니다. Google에서 주관하는 이 글로벌 프로그램은 학생들을 오픈소스 조직과 연결해 주고, 학생들이 오픈소스 활동에 참여하여 여름을 잘 활용하도록 안내합니다.

시험 삼아 신청서를 제출했습니다. 운 좋게도 승인이 됐습니다. 여름에 내가 Chrome 확장 프로그램 샘플 저장소에 참여했던 기억에 남는 소중한 경험을 했습니다. 물론 효과적인 커뮤니케이션, 코딩 기술, 계획 능력 등 많은 것을 배웠습니다.

GSoC 2023이 얼마 남지 않았습니다. 제가 경험한 GSoC를 공유해 드리고자 합니다. 이 게시물에서는 여러분께 도움이 되기를 바라며 제가 직접 참여하여 GSoC의 일반적인 절차를 간략하게 소개합니다.

GSoC에 어떻게 기여했는지에 대한 스토리

저는 Chromium GSoC 2023 프로젝트에 지원했습니다. 주요 작업은 일부 관련 스크립트와 문서를 포함하여 Manifest V3에서 작동하도록 기존 Chrome 확장 프로그램 샘플을 업그레이드하는 것입니다.

도입부

2023년 2월에 GSoC에 대해 처음 알게 되었는데 아직 지원할지 확신이 서지 않았습니다. 당시에는 몇 가지 우려사항이 있었습니다.

  • 저는 내향적인데 영어가 제 모국어가 아니기 때문에 멘토와의 의사소통이 어려울 수도 있어요.
  • GSoC 커뮤니티는 전 세계에서 모이며 시간대 차이를 처리하는 것이 어려울 수 있습니다.
  • GSoC는 경쟁이 치열할 정도로 유명한 프로그램이므로 기회가 별로 없습니다.

하지만 모두 문제가 되지 않았다고 자신 있게 말씀드릴 수 있습니다.

이야기를 나누기 전에 2022년 초에 저에게 일어난 일에 대해 이야기하고 싶습니다. 이 사건은 제가 GSoC에 참여할 기회이기도 했습니다. Manifest V2 기반의 브라우저 확장 프로그램을 Manifest V3로 이전하고 싶었습니다. 이전을 완료하기 위해 문서를 참고해야 했고 모든 API 변경사항을 이해해야 했습니다. 참조할 수 있는 관련 샘플이 있는지도 검색해야 했습니다. 저에게는 새 API를 이해하고 코드를 전송하기가 매우 어렵습니다.

그래서 GSoC 프로젝트 목록을 살펴보고 MV3와 관련된 아이디어를 발견하고 매우 기뻤습니다. Manifest V3 확장 프로그램 샘플을 개선하는 데 기여하고 미래의 개발자에게 편의시설을 제공하고 싶었습니다.

지난 3월 저는 멘토 중 한 명인 Oliver에게 이메일을 보내 저의 목표에 대한 간단한 이메일을 보냈습니다.

GSoC 프로젝트 참여 신청서

안녕하세요.

저는 중국에서 컴퓨터 공학 학부생입니다. GSoC에서 Chrome 확장 프로그램 샘플 관련 프로젝트에 관해 알게 되었고 Manifest V3 샘플을 개선하고 싶었습니다. API 샘플 작업을 해 본 경험이 많지 않지만 웹 개발 및 MV3 확장 프로그램 개발 (https://github.com/daidr/paimon-webext) 경험이 있어서 MV3 API 샘플의 중요성을 깨닫게 되었고 둘 다 배우고 기여하고 싶습니다. 그래도 이 프로젝트를 신청할 수 있나요?

감사합니다.

얼마 지나지 않아 올리버와 알리 (올리버의 상사)로부터 답장을 받았습니다. 질문에 답하고 GSoC의 구체적인 규칙과 일정에 관한 자세한 정보를 제공했습니다. 또한 중요한 참고 자료도 많이 공유했습니다.

마치 팔에 찔린 것처럼 앞으로 나아갈 결심을 하게 되었죠. GSoC 2024와 같이 예정된 오픈소스 이벤트에 참여하는 데 관심이 있다면 첫 번째 조치를 취하는 것이 무엇보다 중요합니다. 망설이지 말고 용감하게 도전해 보세요.

적용하기 전에 프로젝트의 코드를 확인하고 문서를 훑어 보았습니다. GSoC는 참여자가 커뮤니티에 익숙해질 수 있도록 거의 한 달간의 커뮤니티 유대감을 제공하지만 사전 지식을 통해 부담을 줄이고 보다 타겟팅된 제안서를 작성할 수 있었습니다.

프로젝트에서 제공한 시작 버그를 해결하려고 했습니다. 이러한 문제들은 비교적 간단해서 프로젝트를 빠르게 이해하는 데 도움이 되었습니다. 제 멘토 올리버에게 고마워요. (그때는 제 멘토는 아니었어요.) 설명이 필요할 때마다 즉시 이메일에 답장했고 인내심을 갖고 문제를 해결했습니다. 제안서를 작성하는 동안 문제가 발생하면 멘토에게 전송하여 개선이 필요한 영역이 있는지 확인할 수도 있습니다.

승인받기

제안서 작성은 신청 전에 해야 할 마지막 일입니다. 제안서에는 신청서 양식 외에 아이디어, 목표, 일정도 포함해야 합니다. 작업하려는 프로젝트에 따라 제안서용 템플릿이 추가로 제공될 수 있습니다. 바로 활용할 수 있는 다양한 제안서 예시가 온라인에서 참고할 수 있습니다.

초안을 작성한 후 의견을 구하기 위해 멘토에게 보냈습니다. 신청서가 제출되면 오래 기다려야 합니다. 그리고 5월 초에 승인되었다는 알림을 받았습니다.

코드 작업

초기 연결 기간 동안 저는 먼저 남아 있는 스타터 버그를 처리하고, 새로 배워야 할 기술이 있는지 확인했습니다. 그리고 나머지 시간은 문서를 읽는 데 사용합니다.

멘토와 논의한 후 업무에 더 적절한 시간을 배정할 수 있도록 몇 가지 목표를 조정했습니다. 또한 모든 API 샘플을 나열하고 개발자가 필요한 샘플을 빠르게 찾을 수 있도록 기본 필터를 제공하는 새로운 developer.chrome.com 페이지를 만드는 방법에 대한 아이디어도 살펴보았습니다. 저에게는 다소 복잡한 작업이었고, 멘토와 저에게는 프로젝트를 정의하고 제품 요구사항 문서 (PRD)를 작성하는 데 상당한 시간이 걸렸습니다.

이 대규모 작업의 경우, 우리는 샘플 리포지토리에 리포지토리를 순회하고 확장 프로그램 샘플 목록과 이 샘플에서 사용하는 API 목록을 포함하는 JSON 파일을 생성하기 위해 자동화된 스크립트가 필요하다고 결정했습니다. 이제 developer.chrome.com 문서 저장소에서 이 파일을 사용하여 페이지를 빌드합니다.

저는 먼저 Babel을 사용하여 샘플 코드의 추상 구문 트리를 분석하고 사용된 API를 식별해 보았습니다. 멘토와 이 아이디어를 공유한 후, 멘토가 이전에 비슷한 일을 했던 적이 있다는 사실을 알게 되어 이 접근 방식이 실현 가능하다는 것을 확인했습니다. 코드를 완성한 후, 멘토와 팀원들이 코드 세분화 주의, 코드 스타일 표준화, 함수 적절한 문서화 등 중요한 제안을 해주었습니다.

여러 번 크고 작은 검토 끝에 코드를 성공적으로 병합했습니다. GitHub에서 전체 대화목록을 찾거나 라이브 페이지를 확인하세요.

결론

GSoC를 통해 무엇을 얻었는지 물어보면 무엇보다도 브라우저 확장 API와 관련된 지식을 이해해야 합니다. 문서를 읽고 새로운 샘플을 작성하면서 다양한 브라우저 확장 프로그램 API를 자세히 파악할 수 있었습니다.

또한 GSoC에 입사하기 전에는 접할 수 없었던 많은 기술을 습득했습니다. 예를 들어 포괄적인 코드 검토 프로세스를 따르고 PRD를 만드는 등의 역량을 갖추게 되었습니다. 또한 GitHub 작업을 사용하여 워크플로를 자동화하기 시작했고, Babel을 사용하여 모든 확장 프로그램 샘플을 순회하고 사용된 API를 추적하는 방법을 배웠습니다. 게다가 Nunjucks 템플릿 엔진을 처음 사용하기도 했습니다. 이러한 능력은 프로그래밍에 필수적인 능력인데, 배울 수 있어서 기쁩니다. 오픈소스 커뮤니티에 참여하면서 즐거움을 느낍니다.

올 여름은 제게 수많은 잊을 수 없는 추억을 선사했습니다. 코딩을 많이 하면 콘텐츠를 더 많이 즐길 수 있어요. 저를 지도하고 흥미로운 지식을 가르쳐주고 더 많은 경험을 해준 환자 멘토를 만날 수 있었습니다.

컴퓨터 공학 분야의 지식은 무한합니다. 다른 사람들과 비교해 보니 오픈소스에 대한 저의 이해는 빙산의 일각에 불과하다는 사실을 깨달았습니다. 하지만 작은 실천이 도움이 됩니다. GSoC는 오픈소스에 참여하기 위한 훌륭한 출발점이라고 생각합니다.

또한 이러한 경험이 향후 오픈소스 활동에 참여할 때 참고할 수 있는 참고 자료가 되길 바랍니다.

Google 프로그래밍 경진대회(Summer of Code)에 참가하려는 분들을 위해 몇 가지 제안을 드립니다.

  1. 나에게 맞는 아이디어를 선택하세요. 아이디어를 찾을 때는 관심분야, 기술 순으로 해야 한다고 생각합니다. 이 전략을 사용하면 후원 절차가 진행되는 동안 계속 관심을 유지할 수 있습니다.
  2. 양보다 질: GSoC에 채택될 가능성을 높이기 위해 여러 제안서를 제출할 수 있습니다. 하지만 인간의 에너지는 제한되어 있기 때문에 아마 품질이 더 중요하다고 생각합니다. 2~3가지 아이디어에 집중하는 것이 결국에는 더 도움이 될 수 있습니다.
  3. 새로운 것을 두려워하지 마세요. 프로젝트에서 작업하지 않은 기술을 사용하는 것을 주저하지 마세요. 거의 한 달 동안 커뮤니티 유대감을 형성하여 익숙하지 않은 기술에 익숙해지고 여름에는 이러한 기술을 구현하는 시간을 가졌습니다. 도전해 보세요!
  4. 프로젝트에 관해 미리 숙지합니다. 예를 들어 개발 문서를 꼼꼼히 읽고, 이전 커밋 기록과 문제를 살펴보고, 과거의 pull 요청을 훑어봅니다. 사전에 프로젝트를 전반적으로 이해하면 보다 포괄적인 제안서를 작성하는 데 도움이 됩니다.
  5. 의사소통 유지: 멘토와 정기적으로 소통하고, 신청 전이든, 수락이든 상관없이 문제가 발생했을 때는 주저하지 말고 질문하세요. 대부분의 멘토는 기꺼이 문제를 해결하도록 도와주며, 이런 식으로 진행 상황을 추적할 수도 있습니다.

읽어주셔서 감사합니다.