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