MS, 닷넷코어3.0 공개…뭐가 달라졌나

컴퓨팅입력 :2019/09/26 19:00    수정: 2019/09/27 09:56

마이크로소프트(MS)가 닷넷코어(.NET Core) 3.0 정식판을 공개했다. 먼젓번 메이저 버전인 닷넷코어 2.0을 출시한지 약 2년만이다.

리차드 랜더 MS 닷넷팀 프로그램 매니저는 지난 23일 공식 닷넷 블로그를 통해 닷넷코어 3.0 배포 소식을 내놓고 이 최신 프레임워크의 주요 특징과 기존 버전 대비 변화 요소 그리고 이를 사용할 수 있는 통합개발환경(IDE) 업데이트 버전을 소개했다.

닷넷코어 3.0은 윈도폼즈(Windows Forms 또는 WinForms) 및 윈도프리젠테이션파운데이션(WPF) 추가, 새 JSON API 추가, ARM64 지원과 전반적인 성능 향상 등 새로운 기능을 갖췄다. 널 허용(nullable), 비동기스트림, 더 많은 패턴을 포함한 프로그래밍 언어 C# 8 또한 이 릴리즈의 일부다. 문법을 완화했으며 닷넷 스탠더드 2.0을 타깃으로 지원하는 프로그래밍 언어 F# 4.7을 포함한다.

닷넷코어

랜더 매니저 설명에 따르면 개발자들은 기존 프로젝트를 닷넷코어 3.0에 맞춰 업데이트할 수 있다. 이 릴리즈는 기존 버전과 호환되기 때문에 업데이트하기가 수월할 것이라고 한다.

MS는 닷넷코어 3.0 소프트웨어개발도구(SDK)와 런타임, 스냅 인스톨러, 도커 이미지 다운로드를 제공한다. 윈도와 맥OS와 리눅스 운영체제(OS)별 버전을 배포하고 있다. 또 닷넷코어 3.0를 채택하는 윈도 및 맥OS 사용 개발자를 위한 IDE로 비주얼스튜디오2019 16.3 버전과 비주얼스튜디오 포 맥 8.3 버전을 출시했다.

랜더 매니저는 "닷넷코어 3.0은 비주얼스튜디오2019 16.3 버전의 일부"라며 "비주얼스튜디오2019 16.3 버전으로 업그레이드하는 것만으로 닷넷코어를 받을 수 있다"고 설명했다. 또 "닷넷코어 3.0은 SDK 크기를 확 줄이고 컨테이너 및 윈도 데스크톱 애플리케이션같은 핵심적인 시나리오 지원을 향상시키는 등 여러모로 개선됐다"면서 "가급적 서둘러 도입하길 권한다"고 덧붙였다.

재퀼린 위디스 MS 릴리즈팀 프로그램 매니저는 비주얼스튜디오 공식블로그를 통해 닷넷코어 3.0을 포함한 비주얼스튜디오 최신 버전과 이 개발도구의 주요 기능을 소개하기도 했다.

[원문보기 ☞ .NET Core Support and More in Visual Studio 2019 version 16.3 ? Update Now!]

컨테이너로 구동되는 닷넷 애플리케이션. [자료=마이크로소프트]

■ 닷넷코어 3.0, 무엇이 달라졌나

MS는 닷넷코어 3.0 버전의 주요 특징으로 이미 수개월간의 검증을 거쳤다는 점, 여러 컴포넌트의 성능이 극적으로 향상됐다는 점, C# 8과 F# 4.7 버전에 대응한다는 점, 닷넷 스탠더드(.NET Standard) 2.1을 따른다는 점, 윈도폼즈와 WPF로 윈도 데스크톱 앱 개발을 지원한다는 점, 앱을 '닷넷 명령어' 없이 곧장 실행 가능하다는 점, 고성능 JSON API가 추가됐다는 점, 가비지콜렉터가 메모리를 덜 쓴다는 점, 컨테이너 환경에서 효율적으로 동작케 됐다는 점, 라즈베리파이 보드와 다른 ARM 칩 환경을 지원한다는 점을 꼽았다.

검증은 MS의 공식 닷넷 홈페이지와 빙 검색사이트에서 수개월간 호스팅되면서 수행된 테스트로 이뤄졌다. 다른 MS 부서에서도 닷넷코어 3.0 기반의 대규모 워크로드를 현업 시스템에 배포할 예정이다.

성능 향상은 지난 5월 중순 발표된 데이터로 뒷받침된다. 당시 닷넷 블로그를 통해 닷넷 라이브러리 성능 비교 실험 도구인 '벤치마크닷넷'을 사용해 기존 닷넷코어 2.1 버전과 당시 테스트 단계였던 닷넷코어 3.0 버전의 성능 벤치마크 과정과 결과가 공개된 상태다. 벤치마크는 두 버전 환경에서 각각 테스트할 메모리나 구조체에 갖가지 메소드를 사용한 연산 또는 파싱의 평균소요시간을 구하는 식으로 진행됐다. 사용한 메소드에 따라 정도의 차이는 있었지만 모두 3.0 버전에서 더 빨리 계산을 마친 것으로 확인됐다.

[원문보기 ☞ Performance Improvements in .NET Core 3.0]

비주얼스튜디오2019에서 프리뷰 버전으로 사용할 수 있는 윈도폼즈 디자이너 기능. [자료=마이크로소프트]

추가된 C# 8은 비동기스트림, 레인지/인덱스, 더 많은 패턴, 널 허용 참조 타입 지원 기능을 품었다. 널 허용은 개발자가 널 참조 예외 오류를 유발하는 코드 내 결함을 직접 지정할 수 있게 만들어 준다. 프레임워크 라이브러리의 최하위 계층에 주석이 달려 개발자가 언제 널을 예상해야 하는지 알 수 있게 된다.

추가된 F# 4.7은 내장된 양도(yield) 표현식과 일부 문법 완화로 좀 더 쓰기 쉽게 만드는 데 주력한 결과물이다. LangVersion 지원을 포함하고 nameof를 갖춰 나왔으며 정적 클래스 열기 기능을 프리뷰 단계로 제공한다. F# 코어 라이브러리는 닷넷 스탠더드 2.0을 타깃으로 한다.

닷넷코어 3.0 환경의 하부구조인 닷넷 스탠더드 2.1은 코드에서 닷넷코어와 자마린(Xamarin) 양쪽에 쓸 수 있는 코드 내에 사용 가능한 타입 세트를 늘렸다. 닷넷 스탠더드 2.1은 닷넷코어 2.1 이후 나온 타입을 포함한다.

이제 닷넷코어가 윈도폼즈와 WPF 윈도데스크톱 애플리케이션을 지원한다. 비주얼스튜디오2019 16.3 버전에 WPF 디자이너가 포함돼 있다. 프리뷰 단계이긴 하지만 윈도폼즈 디자이너 기능 역시 비주얼스튜디오 확장기능(VSIX) 형태로 내려받아 쓸 수 있다.

닷넷코어 애플리케이션을 곧장 실행할 수 있다. 과거 릴리즈에서 애플리케이션을 실행하려면 'dotnet myapp.dll'같은 형태로 닷넷 명령어를 함께 입력해야 했다. 앞으로는 OS 종류에 따라 'myapp' 또는 './myapp'같은 형태로 앱을 특정하는 명령을 통해 앱을 실행할 수 있다.

추가된 고성능 JSON API를 읽기와 쓰기 작업 그리고 객체 모델과 직렬화(serialization) 시나리오에 쓸 수 있다. 이 API는 'Span' 타입 구조체 위에 만들어졌고 string 타입같은 UTF16 대신 UTF8 인코딩을 사용한다. 이 API는 할당을 최소화해 더 빠른 성능을 얻게 해주며 가비지콜렉터가 할 일을 상당히 줄여 준다.

2016년 마이크로소프트가 닷넷코어를 선보였을 당시 기존 앱 모델 및 라이브러리 구성 차이. [자료=마이크로소프트]

기본적으로 가비지콜렉터가 메모리를 덜 사용하도록 바뀌었다. 덕분에 같은 서버에 여러 애플리케이션이 호스팅되는 시나리오에 많은 이점을 얻게 해준다. 가비지콜렉터는 64코어 이상을 갖춘 장비에서 다수의 코어를 더 잘 쓸 수 있도록 업데이트됐다.

닷넷코어는 그간 닷넷 애플리케이션이 컨테이너 안에서 더 예측성과 효율성을 띠고 동작할 수 있도록 도커(Docker)에 맞춰 정비돼 왔다. 가비지콜렉터와 쓰레드풀은 컨테이너가 제한된 메모리나 중앙처리장치(CPU) 자원으로 구성됐을 때 더 잘 동작하도록 업데이트됐다. 닷넷코어 도커 이미지, 특히 SDK 이미지는 더 작아졌다.

사물인터넷(IoT) 애플리케이션 개발시 라즈베리파이(Raspberry Pi)와 ARM 칩 환경을 지원한다. 비주얼스튜디오 원격 디버거와 같은 기능이 그런 예다. 개발자는 센서 신호를 듣고 디스플레이에 메시지나 이미지를 표시하는 애플리케이션을 배포할 수 있다. 여기에 새로 지원되는 GPIO API를 사용할 수 있다. ASP닷넷은 API 또는 IoT 장치 구성을 수행하는 사이트 형태로 데이터를 보여줄 때 쓸 수 있다.

■ 닷넷코어 후속 버전 로드맵, 지원 플랫폼 확대 계획

MS는 닷넷코어 3.0을 잇는 후속 버전 공개를 연달아 계획하고 있다. 오는 11월 닷넷코어 3.1 버전을 내놓을 예정이다. 닷넷코어 3.1 버전은 MS가 최소 3년간 지원을 보장하는 장기지원(LTS) 버전에 해당한다. MS는 개발자들에게 당장 나온 닷넷코어 3.0을 채택하고 그에 인접해 업그레이드가 쉬우며 LTS를 갖춘 닷넷코어 3.1로 갈아타라고 권하고 있다.

기존 닷넷코어 시리즈는 어떻게 될까. 지난해 12월 비주얼스튜디오2017 15.9 버전과 함께 나온 닷넷코어 2.2는 곧 지원 중단될 대상이다. MS의 닷넷코어 배포 수명주기 표에 따르면 2019년 12월 23일을 기점으로 닷넷코어 2.2 버전 지원이 끝난다. 다만 앞서 2018년 5월 30일 공개된 닷넷코어 2.1 버전은 LTS 지원 대상으로 선언된 2018년 8월 21일을 기점으로 최소 3년간 지원될 예정이다.

[원문보기 ☞ .NET Core Support Policy]

닷넷코어 버전별 출시일과 지원등급 및 지원중단 일정. [자료=마이크로소프트]

MS는 닷넷코어를 레드햇엔터프라이즈리눅스(RHEL) 8 환경의 '레드햇애플리케이션스트림'에도 지원할 계획이다. 레드햇애플리케이션스트림은 리눅스의 패키지관리자가 같은 애플리케이션의 여러 버전을 물리적인 단일 저장소에서 가상으로 구분해 다룰 수 있게 만든 가상의 저장소 기능이다. 애플리케이션스트림 지원 계획은 MS와 레드햇이 수년간 지속 중인 협력의 결과물 중 하나다.

이밖에 닷넷코어 3.0을 지원하기 위해 MS 간판 IDE와 코드에디터 업데이트가 이뤄졌다. 윈도 환경에서 닷넷코어 3.0을 사용할 개발자는 비주얼스튜디오2019 16.3 버전으로 업데이트해야 한다. 맥OS 환경에서 닷넷코어 3.0을 사용할 개발자는 비주얼스튜디오 포 맥 8.3으로 업그레이드해야 한다. 비주얼스튜디오코드 사용자도 C# 확장기능 최신버전을 사용해 닷넷코어 3.0 타깃 애플리케이션 코드를 작성시 최신 시나리오에 대응해야 한다. MS 클라우드서비스에서 '애저 앱 서비스'로 닷넷코어 3.0 배포가 현재 진행 중이고 곧 '애저 데브옵스' 배포도 진행될 예정이다.

닷넷코어 3.0이 지원하는 윈도는 7, 8.1, 10 버전의 1607 버전 이상 업데이트 환경, 윈도서버는 2012 R2 SP1 버전 이상 환경이다. 다른 OS는 알파인3.9, 데비안9, 오픈수세42.3, 페도라26, 우분투16.04, RHEL6, SLES12, 맥OS 10.13 버전 이상 환경이다. 닷넷코어 3.0으로 작성한 윈도폼즈와 WPF 애플리케이션은 윈도에서만 구동된다.

하드웨어 실행환경을 구분하자면 닷넷코어 3.0은 인텔 프로세서 기반 64비트 윈도(x64), 맥OS, 리눅스 시스템, 32비트 윈도(x86)를 지원한다. 32비트 ARM(ARM32) 기반 윈도 및 리눅스와 64비트 ARM(ARM64) 기반 리눅스(커널 4.14 이상 버전) 환경을 지원한다. 앞서 우분투16.04 OS를 지원한다고 밝혀 놓긴 했지만 ARM64 칩 장치에 닷넷코어 3.0 애플리케이션을 배포하려면 OS로 리눅스커널 4.14 이상 버전에 해당하는 우분투18.04를 써야 한다.

■ 고성능 웹앱·마이크로서비스 지향에서 서버·클라이언트 크로스플랫폼 단일화 기반으로

닷넷코어 새 정식판은 MS가 공통 컴파일러, 언어, 런타임 컴포넌트를 기반으로 하면서도 닷넷 프레임워크, 닷넷코어, 자마린, 셋으로 분절돼 있던 프레임워크 생태계와, 앞으로 이를 통합해 나올 후속 버전 '닷넷5' 사이의 가교 성격을 띤다. MS는 지난 5월 닷넷코어 3.0 후속 메이저 버전으로 4 버전대를 건너 뛰고 내년에 닷넷5(.NET 5)를 내놓겠다고 예고한 상태다.

닷넷스탠더드 이전의 닷넷 프레임워크, 닷넷코어, 자마린의 상이한 라이브러리. [자료=마이크로소프트]

그런데 어쩌다 MS는 분절된 생태계를 갖게 됐을까. 앞서 MS는 윈도 중심의 앱 개발 환경으로 '닷넷 프레임워크(.NET Framework)'를 밀고 있었다. 베이스클래스라이브러리(BCL)를 제공하면서 윈도 클라이언트용 애플리케이션 개발에 WPF와 윈도폼즈 API 그리고 윈도 서버용 애플리케이션 개발에 ASP닷넷 API를 쓰게 했다.

첫 닷넷코어 정식판은 지난 2016년 나왔다. 윈도 서버와 데스크톱에 종속돼 있던 닷넷 프레임워크의 성격을 벗고 크로스플랫폼 대응이 가능하며 오픈소스로 구현되는 생태계로 전환하려는 시도의 첫 결과물이었다. 이 버전은 코어 라이브러리와 함께 윈도의 '탈 데스크톱' 모델인 유니버설윈도플랫폼(UWP) API와 서버용 애플리케이션 개발의 '탈 윈도' 모델인 ASP닷넷코어 API를 제공했다.

마이크로소프트가 세 프레임워크 생태계의 라이브러리를 '닷넷스탠더드'로 묶겠다는 구상을 담은 도안. [자료=마이크로소프트]

그해 MS에 인수된 '자마린(Xamarin)'도 생태계의 한 축이 됐다. 자마린의 기술은 C# 코드와 '모노(Mono)' 라이브러리를 사용해 안드로이드 및 iOS 모바일 환경과 맥OS 데스크톱 네이티브 앱 개발을 지원했다. 이 크로스플랫폼 도구는 기존 닷넷 프레임워크의 BCL과는 이질적이었다. 현대적인 클라이언트 디바이스 앱 개발 시나리오에선 '비윈도' 타깃 앱을 맡아, 윈도 타깃 앱을 맡은 '닷넷코어'와는 역할분담을 하며 공생하게 됐다.

MS는 세 생태계 통합을 순차적으로 추진해 왔다. 닷넷 스탠더드 라이브러리를 정의하고 셋의 공통분모로 삼도록 했다. 그리고 장기적으로는 닷넷코어 이름아래 기존 닷넷 프레임워크와 자마린(모노) 생태계를 통합하겠다는 구상을 추진 중이다. 닷넷 프레임워크 4.8을 마지막 메이저 버전으로 남긴 채 기존 개발자들의 기술 스택 전환을 준비하라고 권고하고 있다.

그 일환으로 이날 MS는 ASP닷넷코어(ASP.NET Core) 3.0과 엔티티프레임워크 코어(EF Core) 3.0 또한 공개했다. 다니엘 로스 MS ASP닷넷 프린시펄 프로그램 매니저가 ASP닷넷 공식 블로그를 통해 새 ASP닷넷코어와 닷넷코어 3.0의 블레이저(Blazor) 업데이트 내용을 설명하기도 했다. 이는 C#을 사용해 웹용 애플리케이션을 개발할 수 있게 해주는 닷넷코어용 툴들이다.

[원문보기 ☞ ASP.NET Core and Blazor updates in .NET Core 3.0]

닷넷코어 3.0에서 제공되는 ASP닷넷코어와 블레이저를 사용시 자바스크립트 대신 C#으로 인터랙티브 클라이언트사이드 웹앱을 만들 수 있고 gRPC를 사용한 고성능 백엔드 서비스 작성이 가능하다. 시그널R로 자동재연결 및 클라이언트투서버 스트리밍을 지원한다. 오픈API 문서로 웹API용 강타입 클라이언트 코드를 생성할 수 있다.

관련기사

엔드포인트 라우팅이 프레임워크에 통합됐다. 케스트렐에서 HTTP/2가 기본이 됐다. 오센티케이션이 웹API와 아이덴티티서버에 통합된 싱글페이지앱(SPA)을 지원한다. 인증서 및 케르베로스 인증을 지원한다. system.Text.Json 직렬변환기(serializer)와 통합됐다.

의존성 주입, 컨피규레이션, 로깅같은 공통호스팅서비스를 갖춘 새 제네릭 호스트가 제공된다. 오래 구동되는 서비스를 만드는 워커서비스 템플릿이 제공된다. 초당 요청, 총 요청, 현재 요청, 실패한 요청을 생성하는 이벤트카운터가 제공된다. IIS로 호스트시 윈도이벤트로그에 시동오류 보고가 된다. system.IO.Pipelines와 통합된 파이프라인 요청을 지원한다. 전체 스택에 걸쳐 성능이 향상됐다.