Dart 2.16: 개선된 툴링과 플랫폼 처리

Dart 2.16: 개선된 툴링과 플랫폼 처리

패키지 플랫폼 태깅으로 Windows용 Flutter를 지원하고, pub.dev에 새로운 검색 환경을 도입한 소식을 전해요. 오늘 Dart SDK 버전 2.16이 나왔습니다. 새로운 언어 기능은 없지만, 버그 수정(보안 취약점 수정 포함)이 다수 포함됐고, Dart 패키지가 지원하는 플랫폼을 지정하는 기능이 개선됐으며, pub.dev에 완전히 새로운 검색 환경이 추가됐어요.

출처: Dart 2.16: Improved tooling and platform handling

본문

Dart 2.16

Flutter 2.10과 함께 오늘 출시된 Dart 2.16 SDK는, 레거시 Dart CLI 도구(dartfmt, dartdoc 등)에서 통합된 새 dart 개발자 도구로의 전환을 이어가요. 이번에 새로 deprecated(사용 중단 예정) 처리가 된 도구는 dartdoc(dart doc 사용)와 dartanalyzer(dart analyze 사용)예요. Dart 2.17에서는 dartdoc, dartanalyzer, pub 명령(Dart 2.15에서 deprecated 처리됨. dart pub 또는 flutter pub 사용)을 완전히 제거할 계획이에요. 자세한 내용은 issue #46100을 참고해 주세요.

2.16 릴리스에는 보안 취약점 한 건에 대한 수정과 두 가지 사소한 브레이킹 체인지도 포함돼 있어요.

  • dart:ioHttpClient API는 authorization, www-authenticate, cookie, cookie2에 선택적 헤더를 설정할 수 있게 해 줘요. Dart 2.16 이전 SDK의 리다이렉션 로직 구현에는, 이렇게 민감한 정보를 담을 수 있는 헤더들이 크로스 오리진 리다이렉션이 일어날 때 그대로 전달되는 취약점이 있었어요. Dart 2.16에서는 이 헤더들이 버려져요. 자세한 내용은 CVE-2022–0451을 참고해 주세요.
  • dart:ioDirectory.rename API 동작이 Windows에서 바뀌었어요. 더 이상 대상 이름과 일치하는 기존 디렉터리를 삭제하지 않아요(issue #47653).
  • Dart 1.x에서 남아서 Dart 2.x에서는 기능이 없는 Platform.packageRootIsolate.packageRoot API가 제거됐어요(issue #47769).

Dart 2.16에서 바뀐 것들에 대한 더 자세한 내용은 변경 로그(changelog)를 확인해 보세요.

pub.dev 패키지의 플랫폼 지원 선언, 새로 지원

Dart는 이식성(portability)을 염두에 두고 설계됐어요. 우리는 가장 많은 플랫폼에서 돌아가는 코드를 만들기 위해 노력하고 있죠. 그렇지만 가끔은 pub.dev에 만들고 공유하는 패키지가 하나 혹은 몇 개의 플랫폼만을 위해 설계된 경우도 있어요. 특정 운영체제에서만 쓸 수 있는 API에 의존하는 패키지가 있을 수도 있고, dart:ffi처럼 네이티브 플랫폼에서만 지원되고 웹에서는 지원되지 않는 라이브러리를 쓰는 패키지가 있을 수도 있죠.

Dart 2.16부터는 패키지의 pubspec에 지원하는 플랫폼 세트를 직접 선언할 수 있어요. 예를 들어 패키지가 Windows와 macOS만 지원한다면, pubspec.yaml 파일이 이렇게 될 거예요.

name: mypackage
version: 1.0.0

platforms:
  windows:
  macos:

dependencies:

platforms 태그는, pub.dev가 자동으로 감지하는 것과는 다른 플랫폼 세트에 대한 지원을 선언하고 싶은 경우를 겨냥한 거예요. 호스트별 코드(예: Kotlin이나 Swift)를 포함한 Flutter 플러그인을 개발하고 공유하는 경우라면, Flutter 플러그인 태그가 지원 플랫폼을 보통 지정해 줘요.

새 pub.dev 검색 UI

개발자들의 요청에 응해서, pub.dev에서 패키지를 검색하는 더 나은 지원을 만들었어요. 오늘 출시되는 변경의 주요 목표는 지원되는 플랫폼 세트를 식별하고 검색하도록 돕는 거예요. 새 검색 환경의 모습은 이래요.

새 검색 UI에는 왼쪽에 검색 필터 사이드바가 있어서, 패키지 검색 범위를 좁히는 데 쓸 수 있어요.

  • Platforms(플랫폼): 플랫폼을 하나 이상 선택하면, 선택한 모든 플랫폼을 지원하는 패키지만 검색 결과로 좁혀져요.
  • SDKs: Dart 혹은 Flutter를 선택하면, 각각 Dart SDK나 Flutter SDK를 지원하는 패키지로 결과가 제한돼요.
  • Advanced(고급): Flutter Favorite 패키지로 필터링하는 것 같은 추가 검색 옵션이에요.

널 세이프티 업데이트

마지막으로 널 세이프티를 다룬 지가 몇 번의 릴리스가 지났네요. 널 세이프티는 1년 전 Dart 2.12에서 출시된 주요 언어 기능이었어요. 우리는 Dart 생태계가 널 세이프티를 지원하도록 패키지를 이주시키는 속도에 정말 놀랐어요. 오늘 기준으로 상위 250개 패키지 중 100%, 상위 1000개 중 96%가 널 세이프티를 지원해요! 이 훌륭한 성과에 기여해 주신 모든 패키지 작성자분들께 감사드려요.

사운드 널 세이프티(앱 코드와 모든 패키지 의존성이 이주를 마친 상태)로 이주한 앱들도 좋은 진전을 보이고 있어요. 우리 분석에 따르면 Flutter 도구의 모든 실행 세션 중 71%가 완전한 사운드 널 세이프티 상태예요. 아직 이주하지 않은 앱 개발자라면, 지금이 아주 좋은 때예요.

마무리

새 pub.dev 검색 UI가 유용하게 느껴지길 바라요. 어떤 피드백이든 환영합니다. 다음 Dart SDK 릴리스는 2022년 2분기로 예정돼 있으니 기대해 주세요. 우리는 올해 후반에 출시하고 싶은 흥미로운 언어 기능 몇 가지를 작업 중이에요.

더 알아보기