Google Summer of Code 2022 결과
Google Summer of Code 2022 결과
Google Summer of Code(GSoC) 프로그램은 전 세계의 새로운 개발자를 오픈 소스 소프트웨어 개발에 참여시키는 데 초점을 맞춰요. Google은 학생들이 여름 동안 12주짜리 프로그래밍 프로젝트로 멘토링 오픈 소스 조직과 함께 일하도록 후원해요. 지난 17년 동안 18,000명이 넘는 기여자가 Google Summer of Code에 참여했어요.
본문
Google Summer of Code(GSoC) 프로그램은 전 세계의 새로운 개발자를 오픈 소스 소프트웨어 개발에 참여시키는 데 초점을 맞춰요. Google은 학생들이 여름 동안 12주짜리 프로그래밍 프로젝트로 멘토링 오픈 소스 조직과 함께 일하도록 후원해요. 지난 17년 동안 18,000명이 넘는 기여자가 Google Summer of Code에 참여했어요.
2022년에 Dart는 Google Summer of Code에 3년 연속으로 멘토링 조직으로 참여했어요. 3월의 제안서 모집에 이어 전 세계의 예비 참가자들로부터 프로젝트 제안서 50개를 받았어요. 오늘은 이 여름에 우리가 멘토링한 프로젝트 몇 가지를 조명해요. 기여자들이 이 게시물에서 자신의 프로젝트를 설명해요.
Dart용 JNI Interop
Mahesh Hegde 작성
Android 플랫폼은 공식 언어로 Java를 사용해요. 그 풍부한 생태계에 접근하는 것은 Dart에 큰 가치를 더할 거라서, 저는 GSoC 프로젝트로 Dart용 Java Native Interface(JNI) interop을 개발했어요.
package:jnigen은 Dart에서 Java 클래스와 메서드를 사용할 수 있게 하는 바인딩을 생성해요. jnigen은 Java 라이브러리를 감싸는 C 바인딩과, 그 C 바인딩을 호출하는 Dart 바인딩을 생성해요. 지원 라이브러리 package:jni는 JNI를 초기화하고 접근하는 공통 함수를 제공해요.
Java와 JNI 모두의 복잡성을 고려할 때, Dart용 JNI interop은 실험 단계로 남아 있어요. 이 interop은 생성자, 정적·인스턴스 메서드, 필드 getter 같은 Java 언어의 기본 기능을 감쌀 수 있어요. Java의 예외는 원래 스택 트레이스와 함께 Dart에서 "다시 던져져요"(rethrow). interop은 Dart에서 Java 클래스를 서브클래싱하거나 콜백을 전달할 수는 없어요. GSoC 이후에는 바인딩 생성 파이프라인을 개선하고 더 많은 Java 언어 기능을 구현할 계획이에요.
이 프로젝트의 기술적 복잡성은 도전적이었어요. JNI를 사용해 네이티브 컴파일되는 고수준 언어를 위한 Java interop 시도가 전혀 없었다는 걸 알고 있었어요. 동적 라이브러리 로딩이나 JNI 예외처럼 기대대로 작동하지 않을 때 우회 방법을 찾아야 하는 경우가 많았어요. 프로젝트를 돕기 위해 결국 여러 도구를 작성하게 됐어요. 그중에는 maven에서 Java 소스를 가져오는 도구와 공유 라이브러리를 빌드하는 도구도 있었어요. 시간 관리, 우선순위 정하기, 테스팅, 깔끔하고 읽기 쉽고 이해하기 쉬운 코드 작성에 대해 많이 배웠어요.
Flutter Community 관리자 대시보드
Abdelrahman Amer 작성
GSoC’22 동안 저는 GitHub의 Flutter Community 저장소를 위한 관리자 대시보드를 설계하고 구축했어요. 이 대시보드는 저장소, 관리자, 접근 수준 등에 대한 최신 활동을 집계해서 Flutter Community 관리자들을 도와줘요. pub.dev에 빌드·배포하는 트리거도 포함돼 있어요. 프론트엔드는 Flutter, 백엔드는 Firebase로 구현했어요.
프로젝트를 진행하면서 다음을 포함한 흥미로운 재사용 가능한 컴포넌트를 개발했어요.
- Firebase 추상화 레이어
- 어떤 필드로든 정렬 가능한 표 형식 정보를 표시하는 MVC 위젯과 관련 데이터 구조 클래스
- 2D 그래픽 데이터를 표시하는 MVC 위젯과 데이터 구조 클래스
관리자 대시보드에 몇 가지 기능이 빠져 있지만, 핵심 기능은 구현됐어요. GSoC 기간이 끝난 뒤에도 더 많은 기능을 계속 개발하길 기대하고 있어요.
GSoC 경험은 특히 Flutter에서 소중한 개발 스킬을 가르쳐 줬어요. 이 기회, 훌륭한 작업 환경, 얻은 경험, Majid로부터 받은 멘토링에 아주 감사해요.
잘못된 버전 제약 감지
Arseny Uskov 작성
패키지 관리자는 각 Dart 패키지 릴리스에 적절한 버전을 할당해야 해요. 그들은 자신의 패키지에 의존하는 사용자에게 파괴적 변경을 도입했는지 결정해야 해요. 의존 패키지도 각 의존성에 대해 적절한 버전 범위가 무엇일지 가정해요.
이런 영역의 잘못된 가정에서 버그가 발생할 수 있어요. 제 프로젝트는 이런 버그의 한 부분집합을 식별하고 조사하는 것을 목표로 했어요.
이 프로젝트는 주어진 패키지의 주어진 버전의 공개 API 일부를 요약하는 도구를 제공해요. 이 요약은 주어진 패키지에 의존하며 잘못된 버전 제약을 가질 수 있는 다른 패키지를 식별해 줘요. 우리의 사용 사례는, 패키지가 의존성 중 하나에 정의된 심볼을 사용했는데 그 심볼이 그 의존성의 허용된 최저 버전에는 포함되지 않는 경우를 다뤘어요.
공개 API 요약 모델은 다양한 다른 흥미로운 정적 분석 응용을 가능하게 해요. GSoC 기간 동안 그걸 탐구할 시간은 없었어요. 더 자세히 알아보려면, 프로젝트, 겪은 도전 과제, pub.dev 생태계 분석 실행에서 얻은 결과, 실제 패키지에서 찾은 버그, 그리고 직접 해킹을 시작하기 위한 출발점에 관한 API Analysis 블로그 글을 참고해요.
Dart와 함께 Google Summer of Code 2022에 지원해 주신 모든 분, 올해 프로젝트를 완료한 기여자들, 그리고 이 여름을 멋진 summer of code로 만드는 데 도움을 주신 멘토들께 크게 감사드려요. Google Summer of Code에서의 Dart에 대해 더 들어보고 싶다면 우리의 2021 게시물을 확인해 보세요.
더 알아보기
package:jnigen과package:jni로 Dart에서 Java 클래스와 메서드를 사용할 수 있어요(실험 단계).- Flutter Community 관리자 대시보드는 Flutter와 Firebase로 구현됐어요.
- 잘못된 버전 제약을 감지하는 공개 API 요약 도구가 만들었어요.