GSoC 여정: Chrome 확장 프로그램에 기여하기

Harsh Singh
Harsh Singh

게시일: 2025년 10월 28일

저는 IIT (ISM) Dhanbad에서 화학 공학을 전공하는 마지막 학년 B.Tech 학생인 Harsh Singh입니다. 2025년에 Google Summer of Code (GSOC)에 참여했습니다. 이 게시물에서는 GSoC에 참여하기 위한 여정과 참여하면서 배운 내용을 공유합니다.

GSoC 전: 확장 프로그램 개발 알아보기

1학년 때 다른 많은 학생들처럼 저도 대학의 공식 기술 동아리인 CyberLabs에 가입하고 싶었습니다. 준비를 위해 클럽에 들어가기 위해 만든 Chrome 확장 프로그램을 보여준 선배를 찾아갔습니다. 제가 알고 있던 표준 웹 개발과는 완전히 달랐습니다. 자체 브라우저에서 스크립트를 삽입하고 웹사이트를 수정하는 멋진 방법인 것 같았습니다.

Manifest V2에서 V3로의 전환을 직접 목격하는 등 다양한 확장 프로그램 API를 사용해 보았습니다. 이러한 도구를 사용하여 작은 프로젝트를 빌드하고 CyberLabs에 참여한 후 대학 생활로 바빠져 한동안 확장 프로그램 개발을 하지 않았습니다.

최근 Google Summer of Code (GSoC) 신청을 고려하던 중 Chrome 확장 프로그램 API에 관한 프로젝트를 발견했습니다. 향수에 젖어 '이번에는 미래에 2학년이 CyberLabs에 입장하는 데 사용할 API를 만들어 보면 어떨까?'라는 생각이 들었습니다. 그게 가장 멋진 자랑이 될 거야'라고 말했습니다. 이전 업무를 통해 대부분의 확장 프로그램 용어를 이미 이해하고 있으므로 이 프로젝트가 저에게 딱 맞는 것 같습니다.

신청 준비

나는 충동적으로 Chrome 확장 프로그램팀의 개발자 관계 엔지니어인 Oliver에게 연락하기로 결정했습니다. Chromium의 GSoC 프로그램에 지원하여 합격하려면 어떻게 해야 하는지 물었습니다. 며칠 이내에 답장을 보내 주셨어요. 이메일은 매우 격려적이었고, 코드베이스를 탐색하고 C++을 작성할 수 있는지 확인하고 싶다고 했습니다.

먼저 내 머신에 Chromium을 설정했습니다. 정말 힘들었습니다. 대규모 코드베이스를 설정하고 빌드를 성공적으로 완료하는 데 4일이 걸렸고 수많은 시도를 했습니다. 온라인에서 간단한 문제(사용자 동작이 없는 sidePanel.open())를 발견하고 이를 수정하는 패치를 제출했습니다. (돌아보면 아주 작은 변화였어요 🙂) 진행 상황에 대해 Oliver에게 이메일을 보냈습니다. 지원할 계획이 없다고 말했지만, 제가 한 작업이 진지함을 보여주기에 충분하다고도 말했습니다. 그런 다음 측면 패널의 getPosition 메서드를 작업하라고 제안했습니다. 문제를 해결한 후 다시 이메일을 보냈고, 그는 내 접근 방식이 팀에서 논의한 내용과 일치한다고 말하며 매우 기뻐했습니다. 이를 통해 코드를 이해하고 변경할 수 있다는 것을 알게 되어 프로젝트를 진행할 수 있었습니다.

내 GSoC 제안서

다음은 GSoC 제안서였습니다. 초기 프로젝트 설명인 'SidePanel API 및 DNR API'가 매우 광범위해서 제안서에 어떤 구체적인 작업을 나열해야 하는지, 타임라인을 어떻게 만들어야 하는지 잘 모르겠어요. 이 문제에 관해 Oliver에게 이메일을 보냈고, 그는 프로젝트 설명을 업데이트했다고 답장했습니다. 기쁘게도 그가 이미 작업 중이던 sidePanel.getPosition API를 비롯한 여러 API를 추가했습니다.

제안서의 핵심 구성요소는 프로젝트에 대한 이해, 디자인 아이디어, 제안 전 작업, 결과물 일정입니다. 관련 작업에 대한 철저한 이해를 보여주었기 때문에 작업의 크기를 정확하게 파악했습니다. 제안서를 작성하고 두 번 검토했습니다.

후보자에게 큰 도움이 될 만한 후회되는 점은 빌드할 계획인 기능에 대한 적절한 설계 사양을 포함하지 않았다는 것입니다. 예를 들어 측면 패널을 닫는 API를 제안할 때 매개변수를 간략하게 설명하고, 선택을 정당화하고, 특이 사례를 처리하는 방법을 설명하고, 모든 브라우저에서 API를 표준화하는 방법을 설명해야 했습니다. 이렇게 하면 훨씬 더 깊은 수준의 이해를 보여줄 수 있습니다.

Chromium 확장 프로그램 프로젝트의 맥락에서 핵심 기관은 WECG (WebExtensions Community Group, '위-C-G'라고 발음)로, 여기서 새로운 API 설계가 공식적으로 논의됩니다. GSoC 기간 동안 참여자는 이 그룹에 API 제안을 발표해야 할 수 있습니다. 따라서 GSoC 제안서에 디자인 아이디어를 준비해 두면 멘토에게 이 중요한 단계를 준비하고 GSoC 기간 동안 잘 해낼 수 있음을 보여주므로 큰 이점이 됩니다.

5월 초에 합격 통지 이메일을 받았습니다. 🙂

GSoC 기간 동안의 내 참여

GSoC 기간은 정말 좋았습니다. 멘토인 솔로몬은 정말 친절했고, 매주 생산적인 회의를 통해 제가 목표를 달성할 수 있도록 도와주었습니다. 또한 제가 답답할 때마다 큰 도움을 준 동료 기여자 Amit P도 알게 되었습니다. WECG 회의에 참석하면서 그 수준에서 어떻게 일이 진행되는지 알게 되었고 경험이 왜 그렇게 중요한지 이해하게 되었습니다. 거기에서 API 제안을 논의했고 다른 브라우저 공급업체로부터 승인을 받았습니다.

처음에 CL (변경 목록)을 여러 개 열었습니다. 코드 검토를 왔다 갔다 하면서 나중에 진행 속도가 느려졌지만 계속해서 진행할 수 있어서 좋았습니다. 병합된 주요 기여는 측면 패널 API에 대한 것이었습니다.

Commands API에 관한 다른 CL은 아직 진행 중입니다 (GSoC 이후 얼마나 활발하게 활동하는지에 따라 달라짐 🙂). 자세한 내용은 GSoC 프로젝트 페이지의 '코드 보기' 링크에서 확인할 수 있는 최종 보고서를 참고하세요.

거의 모든 CL을 검토해 준 Oliver Dunk, Solomon Kinard, Kelvin Jiang, Devlin Cronin, Tom Lukaszewicz, Andrea Orru에게 특별히 감사드립니다. 내 코드가 Chrome의 일부가 되는 것을 보니 정말 기분이 좋습니다. 멘토들은 제가 '주인의식'이 강하다고 칭찬해 주셨는데, 저에게는 큰 칭찬이었습니다.

요약

GSoC에서 무엇을 얻었는지 묻는다면 기술 지식 그 이상이라고 답할 수 있습니다. 이 프로그램 덕분에 중요한 논의가 이루어지는 자리에 참여할 수 있었고, 이 논의는 여러 확장 프로그램 개발자에게 영향을 미칠 것입니다. 실제 애플리케이션에 적용된 첫 번째 작업이었습니다. 저를 안내하고 많은 것을 가르쳐 준 환자 멘토를 만나면서 전체 경험이 매우 풍부해졌습니다.

제 이야기가 Chromium에 기여하거나 Google Summer of Code에 참여하려는 다른 분들에게 도움이 되기를 바랍니다.

GSoC에 지원하는 사용자를 위한 도움말

  1. 진심으로 좋아하는 아이디어를 선택하세요. 관심사가 최우선순위여야 합니다. 기술은 언제든지 개선할 수 있지만, 힘든 상황에서도 계속 나아갈 수 있게 해 주는 것은 열정입니다. 저는 양쪽 입장을 모두 경험해 봤습니다. 관심 없는 일을 하면 문제가 발생했을 때 다른 사람을 탓하게 됩니다. 하지만 이 일을 좋아한다면 극복해야 할 도전으로 여길 것입니다.
  2. 경쟁을 두려워하지 마세요. 커뮤니티 채널에서 다른 지원자를 확인한 후 의욕을 잃는 사람들을 많이 봤습니다. 모든 좋은 프로젝트에는 경쟁이 있습니다. 강점에 집중하세요. 이전에 라이브러리를 사용한 적이 있다면 해당 라이브러리를 사용하는 프로젝트를 찾습니다. 고유한 경험을 활용할 수 있으므로 유리한 위치에 서게 됩니다.
  3. 행운을 인정하고 소통에 집중하세요. 솔직히 말해 GSoC에는 약간의 운이 필요합니다. 일부 인기 프로젝트는 1~2개의 슬롯에 300개가 넘는 제안을 받습니다. 멘토가 모든 질문을 자세히 읽을 수 있을지는 의문입니다. 따라서 조기 커뮤니케이션이 중요합니다. 프로젝트에 미리 참여하여 제안서가 확실하고 요점을 파악할 수 있도록 하세요.
  4. 선정되지 않더라도 끝이 아닙니다. 이제 이력서에 가치 있는 오픈소스 참여 내역이 있습니다. 이를 사용하여 다른 여름 기회에 지원하세요. 이미 어려운 작업은 완료하셨습니다.

마지막으로

'모든 사람은 어떤 특정한 일을 하도록 만들어졌으며, 그 일을 하고자 하는 욕망이 모든 사람의 마음속에 심어져 있습니다.' — 루미

읽어 주셔서 감사합니다.