Google Summer of Code 2020 결과
Google Summer of Code 2020 결과
Dart 팀은 GSoC 2020의 일환으로 이번 여름에 학생 개발자 5명을 멘토링했어요. 학생 프로젝트들을 소개합니다.
본문
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 생태계 전반에서 기여자로 다시 만나길 바래요.