Google Summer of Code 2020 결과

Google Summer of Code 2020 결과

Dart 팀은 GSoC 2020의 일환으로 이번 여름에 학생 개발자 5명을 멘토링했어요. 학생 프로젝트들을 소개합니다.

출처: Google Summer of Code 2020 results

본문

Google Summer of Code(GSoC)는 학생 개발자를 오픈소스 소프트웨어 개발로 이끄는 데 초점을 맞춘 글로벌 프로그램이에요. 학생들은 Google의 후원을 받아 여름 동안 3개월짜리 프로그래밍 프로젝트를 멘토링 오픈소스 기관과 함께 진행해요. 2월에 우리는 Dart 팀이 GSoC 2020의 멘토링 기관이 된다는 소식을 기쁘게 발표했어요. 전 세계 학생들의 170개 이상의 지원서 중에서 우리는 결국 5개 프로젝트를 멘토링하게 됐어요. 오늘 우리는 그 결과를 기쁘게 공유해요. 프로젝트에서 일한 학생들이 직접 쓴 내용이에요.

package:ffigen으로 dart:ffi 바인딩 생성, Dart-C 상호운용

By Prerak Mann

package:ffigen은 FFI 생성기로, C 헤더 파일(.h)에서 Dart 바인딩을 생성해서 dart:ffi를 쓰는 수고를 크게 줄여 줘요. 이 도구의 필요성을 이해하려면 LibClang(Clang의 C 인터페이스)을 생각해 보세요. LibClang의 API는 약 8,000줄(LOC)이에요. LibClang용 Dart 바인딩을 손으로 작성한다면 거의 4,500줄이 필요해요. package:ffigen을 쓰면 20줄 미만의 작은 YAML 설정 파일만 넘기면 바인딩을 생성할 수 있어요. 생성할 C 함수를 제어할 수 있고, 간단한 정규식으로 매크로, enum, 개별 구조체 멤버를 이름 바꿀 수 있어요. 구조체에 중첩된 배열 멤버도 생성할 수 있어요(아직 dart:ffi에서 완전히 지원되지는 않지만요). 전체 설정 목록, FAQ, 예제 등은 github.com/dart-lang/ffigen을 확인해 보세요.

새 Flutter 샘플로 테스팅 배우기

By Abdullah Deshmukh

Flutter를 한동안 써 왔는데도 Flutter 앱을 어떻게 테스트하는지 아직 모르겠다면, 우리가 만든 Flutter 앱 테스팅 모범 사례를 보여주는 샘플이 흥미로울 거예요. Flutter 테스트를 빠르고 쉽게 배울 수 있어요. 샘플은 여러 유형의 테스트를 보여줘요:

  • 단위 테스트(Unit testing)
  • 위젯 테스트(Widget testing)
  • 통합 테스트(Integration testing)
  • 성능 테스트(Performance testing)
  • 상태 관리 테스트(State management testing)

보너스로 Flutter 앱 테스트 방법에 대한 codelab도 만들었어요. 프로젝트에서 수행된 작업의 상세 보고서는 "Learn testing with the new Flutter sample" 글에서 볼 수 있어요.

사용자 확장 가능한 번역 파일 포맷

By Jaime Blasco

intl_translation 패키지는 Dart 외부에서는 널리 쓰이지 않는 ARB 파일 포맷만 지원해요. GSoC 2020 동안 만들어진 intl_translation_format 패키지는 intl_translation을 바탕으로, 아주 다양한 포맷을 지원할 수 있는 TranslationFormat 클래스를 추가해요. 개발자는 자신의 패키지에서 추가 포맷 지원을 더할 수 있고, 몇 줄만으로 기존 도구와 통합되는 추출·생성용 커맨드라인 도구를 만들 수 있어요. 이 덕분에 다른 포맷, 심지어 독점 포맷의 기존 번역도 Dart 프로젝트로 쉽게 가져올 수 있고, Dart 코드에서 나오는 새 메시지를 기존 번역 도구와 워크플로에 통합할 수 있어요. 이를 증명하기 위해 새 패키지들은 여러 포맷을 지원해요. ARB 외에 XLIFF v1.2(iOS), XLIFF v2.0, ICU 메시지가 포함된 JSON을 지원해요. 실험 라이브러리는 다른 포맷 지원과, 런타임에 갱신할 수 있는 번역까지도 어떻게 구현할 수 있는지 보여줘요.

모바일 앱의 플랫폼 채널과 federated 플러그인

By Ayush Bherwani

플랫폼 채널(Dart에서 Swift나 Kotlin 같은 네이티브 코드로 메시지를 주고받는 Flutter API)을 조사한 뒤, 우리는 이 주제를 두 가지 다른 샘플로 다루기로 했어요. 하나는 간단한 Android와 iOS 데모이고, 다른 하나는 웹과 데스크톱용 master 채널로도 빌드할 수 있는 federated 플러그인이에요. 두 샘플 사이에서 코드베이스는 플랫폼 채널과 데이터를 옮기는 데 쓸 수 있는 코덱(codec)의 세부 사항뿐 아니라, federated 플러그인의 API와 웹·데스크톱(Windows와 Linux) API에서 네이티브 코드를 호출하는 기법까지 보여줘요. 플러그인을 만들거나 플랫폼 API에 접근하려는 개발자라면, 이 샘플들은 학습을 시작하기에 좋은 곳이에요. 이 프로젝트에 대한 자세한 내용은 "Platform channel examples" 글을 보세요.

pub add <package>를 가능하게 하는 package:yaml_edit 작성

By Garett Tok Ern Liang

Dart 프로젝트는 pubspec.yaml 파일에서 패키지 의존성을 지정해요. YAML은 주석을 쓸 수 있어서 훌륭하지만, 프로그램적으로 YAML을 수정하는 것은 어려운 일이에요. 이 과제에 맞서 우리는 package:yaml_edit를 작성해서 포맷과 주석을 보존하는 컨텍스트 인식 문자열 조작을 쉽게 수행하게 했어요. 패키지의 테스트 스위트에는 40,000개가 넘는 테스트가 있고, 우리는 꽤 좋은 해결책을 만들었다고 생각해요. 직접 사용해 보고 버그를 제보해 주세요! package:yaml_edit를 사용해, Dart와 Flutter용 패키지 관리 도구인 pub에 새 pub add <package> 하위 명령을 추가했어요. pub add는 대상 패키지의 최신 호환 버전을 자동으로 해석하고 사용자의 pubspec.yaml에 추가해요. 관점을 위해 말하자면, pub add <package>는 다음의 지루한 작업을 자동화해요:

  • https://pub.dev/packages/<package> 방문하기
  • 패키지에 추가할 버전 고르기
  • pubspec.yaml 수정하기
  • pub get 실행하기
  • 다른 의존성과 호환되는 버전을 얻기 위해 2-4단계를 필요한 만큼 반복하기

의존성을 제거하는 비슷한 명령인 pub remove <package>도 작업 중이에요. 두 명령이 곧 pub에 온다는 것, 눈여겨보세요! Google Summer of Code 2020에 Dart로 지원해 준 모든 분, 올해 프로젝트를 완수한 학생 여러분, 그리고 매주 시간을 내어 멋진 summer of code를 만들어 준 멘토분들에게 큰 감사를 드려요. 많은 학생 여러분이 Dart 생태계 전반에서 기여자로 다시 만나길 바래요.

더 알아보기