Google Summer of Code 2021 결과
Google Summer of Code 2021 결과
Dart 팀은 전 세계 학생들로부터 GSoC 프로젝트 제안 92건을 받았어요. 우리가 수용한 3개 프로젝트의 결과를 소개합니다.
본문
Google Summer of Code(GSoC)는 학생 개발자를 오픈소스 소프트웨어 개발로 이끄는 데 초점을 맞춘 글로벌 프로그램이에요. 학생들은 Google의 후원을 받아 여름 동안 10주짜리 프로그래밍 프로젝트를 멘토링 오픈소스 기관과 함께 진행해요. 지난 16년 동안 16,000명이 넘는 학생이 Google Summer of Code에 참여했어요. 2021년은 Dart 기관이 멘토링 기관으로 Google Summer of Code에 참여한 두 번째 해예요. 3월의 학생 제안 모집 이후 우리는 전 세계 학생들의 프로젝트 제안 92건을 받았고, 그중 기쁘게 3개 프로젝트를 수용했어요. 오늘 우리는 그 결과를 기쁘게 공유해요. 이 프로젝트들에서 일한 학생들이 직접 쓴 내용이에요.
Dart용 Cronet 기반 HTTP 클라이언트
By Soumyadip Mondal
cronet 패키지는 Chromium의 네트워크 엔진을 기반으로 하는 Dart Native 플랫폼용 HTTP 패키지예요. Dart가 이미 dart:io에 HTTP 지원이 있는데 "왜 HTTP 패키지를 추가하나?"라고 물을 수 있어요. 한 가지 이유는 package:cronet이 QUIC/HTTP3 프로토콜을 사용할 수 있고, 이는 커뮤니티에서 매우 많이 요청된 기능이기 때문이에요. 그 외에도 package:cronet은 많은 시나리오에서 dart:io보다 더 빨라요. Cronet의 Dart 바인딩은 소켓 재사용, 강력한 캐싱과 압축 알고리즘, 요청 우선순위화, 더 안정적인 네트워크 연결 같은 Cronet의 기능에 쉽게 접근하게 해 줘요. YouTube, Chrome, Google Maps, Google Photos, Google App을 포함한 다양한 Google 제품이 이미 네트워킹 요구에 Cronet 라이브러리를 사용하고 있어요. package:cronet을 쓰면 dart:io와 비슷한 API로 Cronet 라이브러리에 접근할 수 있고, 기존 Dart/Flutter 앱의 코드 변경이 거의 또는 전혀 필요 없어요. 벤치마크, 예제, dart:io와의 비교는 github.com/google/cronet.dart를 확인해 보세요. 기술적 개요와 우리가 마주한 과제를 논하는 blog post도 확인해 보세요.
Flutter 데스크톱 도구
By Abdullah Deshmukh
Flutter 2에서 데스크톱 지원이 베타로 나온 후, 우리는 Windows, macOS, Linux에서 실행될 수 있는 Flutter 앱을 작성하는 방법을 보여줄 샘플 앱이 필요했어요. 저는 Flutter 프로젝트의 린트 규칙을 관리하는 데 도움을 주는 Flutter 린팅 도구 형태로 그 샘플을 작업했어요. 앱의 소스 코드는 파일 읽기·쓰기, 반응형 레이아웃 구현, 영구 스토리지 사용, 심지어 YAML 파일 다루기 같은 기본적인 데스크톱 앱 기법을 어떻게 구현할 수 있는지 보여줘요. 이 샘플은 다양한 데스크톱 앱 스토어에 Flutter 앱을 배포하는 것을 테스트하는 데도 쓰일 수 있어요. 자세한 내용은 "GSoC '21: Creating a desktop sample for Flutter"를 방문해 보세요.
pub.dev 라이선스 감지
By Bharat Biradar
pub.dev에 게시된 패키지는 Dart 파일 규칙을 따르는지, CHANGELOG 파일이 있는지 등 다양한 지표로 평가돼요. 이 분석은 pana(DArd용 PACKage ANAlysis)가 해요. Pana는 패키지가 게시된 라이선스 식별자를 감지하는 일도 담당해요. 지금까지 pub.dev에 표시된 라이선스 이름은 간단한 정규식 휴리스틱으로 결정됐고, 정확도가 낮은 몇 개의 라이선스만 감지할 수 있었어요. 이 프로젝트의 과제는 SPDX 매칭 가이드라인에 맞춰 SPDX 라이선스를 감지하는 pana용 라이선스 감지기를 만드는 것이었어요. pana용으로 만들어진 라이선스 감지기는 v2_licenseclassifier와 같은 접근 방식을 사용하되, 우리 요구에 더 잘 맞게 수정했어요. 패키지의 LICENSE 파일이 주어지면 pana는 세 단계를 거쳐 SPDX 라이선스 식별자를 감지해요:
- SPDX 말뭉치에서 명백한 불일치를 제거하기: 텍스트를 토큰(기본적으로 단어)으로 나누고, LICENSE 파일이 알려진 라이선스와 비교해 충분한 수의 토큰(최소 50%)을 가지는지 확인해, 기준을 충족하지 못하는 알려진 라이선스를 모두 제거해요. 이 단계 덕분에 pana는 많은 라이선스를 빠르게 배제할 수 있고, 더 비싼 계산을 2단계에서 실행할 수 있어요.
- 알려지지 않은 라이선스와 남은 SPDX 라이선스에서 매칭하는 부분 문자열 찾기: 남은 알려진 라이선스에 대해, 알려진 라이선스 텍스트와 일치하는 알려지지 않은 텍스트의 부분 문자열을 찾아요. 알려지지 않은 텍스트가 여러 라이선스를 포함할 수 있기 때문에 부분 문자열을 찾는 거예요. 매칭하는 부분 문자열을 식별할 때에는 알려진 라이선스의 토큰 수에 임계값을 곱한 것보다 토큰이 적은 시퀀스는 무시해요. 그런 시퀀스는 매치를 이루기에 충분한 토큰 밀도를 갖지 못하기 때문이에요. 주어진 알려진 라이선스에 대해 충분한 토큰 밀도를 가진 부분 문자열이 발견되지 않으면, 매치가 아니라는 것을 알 수 있어요.
- 신뢰도 점수 결정하기: 이 단계는 발견된 부분 문자열에 [0,1] 사이의 신뢰도 점수를 추정해요. 먼저 부분 문자열을 levenshtein 단어 diff를 사용해, 감지된 SPDX 말뭉치 라이선스와 diff해요. 그런 다음 아래와 같이 계산된 신뢰도가 설정된 임계값보다 높으면 라이선스가 매치된 것으로 간주해요.
이 정도면 라이선스 감지 과정에 대한 감을 좀 잡으셨길 바래요. 라이선스 감지기를 직접 사용해 보고 싶다면 pana 저장소에서 찾을 수 있어요. Google Summer of Code 2021에 Dart로 지원해 준 모든 분, 올해 프로젝트를 완수한 학생 여러분, 그리고 멋진 summer of code를 만드는 데 도움을 준 멘토분들에게 큰 감사를 드려요. Google Summer of Code에서의 Dart에 대해 더 듣고 싶다면 우리의 2020 포스트를 확인해 보세요.