27일 닷넷코어 1.0이 완성된 모습으로 공개된다. 마이크로소프트(MS)가 닷넷 플랫폼을 오픈소스로 전환한 후 첫 버전이다.
MS는 이달초 가상컨퍼런스 ‘닷넷컨프(dotnetconf)’를 통해 닷넷 플랫폼의 현재와 앞으로 방향성을 정리했다.
MS는 닷넷을 윈도 종속에서 벗어난 독립적이고 혁신적인 플랫폼으로 만들려 하고 있다. 웹, 데스크톱, 모바일 등 다양한 환경과 운영체제에서 사용할 수 있고, 개발자의 수고를 최소화하려는 방향으로 개발을 진행중이다. 그에 따라 MS는 윈도에 제공하는 닷넷 프레임워크와 구별하기 위해, 오픈소스를 ‘닷넷코어’라 명명했다.
김명신 한국MS 디벨로퍼익스피리언스(DX)팀 부장은 닷넷의 현재와 미래에 대해 하나의 장표를 보여줬다. 6가지 부문에서 어떻게 닷넷이 변해갈 것인지 보여준다.
이 장표에 따르면, 기존 닷넷은 윈도에 종속되지만, 앞으로 어느 OS 환경에서나 쓸 수 있게 된다. 윈도 시스템 요소로 존재했던 닷넷은 각 애플리케이션과 함께 배포되는 형태로 바뀐다. CLR이란 가상머신에서 작동했던 게 네이티브 환경에서 컴파일된다. 닷넷의 컴파일러는 오픈소스로 전환해 누구나 컴파일러 내부를 알 수 있고, 제공되는 API를 활용할 수 있다. 개발환경은 비주얼스튜디오 외에도 입맛에 맞는 에디터를 사용할 수 있다. 당연히, MS독점적 기술에서 오픈소스로 바뀌었다.
김명신 부장은 “2002년 닷넷1.0을 공개할 때도 모든 스펙을 개방해 각 플랫폼별로 근간을 만들 수 있게 했지만 잘 되지 않았고, 닷넷이 윈도서만 돌아가는 런타임 형태로 굳어졌다”며 “앞으로 윈도뿐 아니라 리눅스 맥에서 다 돌아가고, 안드로이드나 iOS에서도 쓰이게 된다”고 설명했다.
그동안 닷넷은 윈도와 함께 설치돼왔다. 사실상 닷넷이 윈도의 핵심요소의 일부였기에 닷넷 프레임워크를 삭제하면 애플리케이션 구동이 되지 않는다. 이는 애플리케이션을 설치할 때마다 닷넷을 추가 설치하지 않아도 되는 편리함을 주지만, 쓰지 않는 모든 요소를 설치해 공간을 점유하고, 개별요소별 업데이트 시 시스템에 문제를 일으키는 문제를 갖고 있다.
김 부장은 “미래의 닷넷은 애플리케이션 안에 포함시켜 함께 배포하게 한다”며 “닷넷을 요소별로 잘게 잘 쪼개 앱에 필요한 부분만 가져다 만들 수 있게 된다”고 말했다.
네이티브 컴파일이란 애플리케이션 코드의 기계어변환(어셈블리) 과정을 컴파일 시점에 수행한다는 의미다. 프로그램을 실행할 때 어셈블리 과정부터 시작하는데, JIT(just in time) 컴파일이라 불리는 이 과정을 없앤다는 것이다. 이는 AOT(ahead of time) 컴파일이라 불린다.
김 부장은 “프로그램의 수행시간을 100으로 보면 최초 수행 부분이 JIT컴파일 과정에 할당되는데, 이를 코드 실행 시가 아니라 첫 컴파일 때 같이 하겠다는 것”이라며 “모바일 앱의 경우 수행될 때마다 매번 JIT컴파일을 하게 되면 자원을 소모시키므로 모바일에선 AOT가 많이 쓰이고 있다”고 설명했다.
그는 “AOT 컴파일의 문제는 앱 자체가 하드웨어 의존성을 갖게 된다는 것인데, MS는 윈도스토어에 제출받은 앱을 시장의 디바이스에 맞춰 미리 컴파일 해뒀다가, 디바이스별로 적합한 코드로 배포한다”며 “닷넷은 CLR에서 수행하던 컴파일을 윈도스토어에서 수행하므로 앱의 크기를 작게 하고, 실행 속도를 빠르게 한다”고 덧붙였다.
MS는 2년전 닷넷의 새로운 컴파일러인 로슬린(Roslyn)을 오픈소스로 내놨다. 이를 통해 닷넷의 컴파일러 내부를 모두 알 수 있게 됐다. 컴파일러는 소스를 실행파일로 변경하는 과정의 다양한 절차와 원칙을 담고 있다.
그는 “개발을 하다보면, 컴파일러의 내부 자료가 필요할 수 있다”며 “예를 들어 프린트를 소문자로 할 것을 대문자로 쓰면, 컴파일 시 오류를 내고 끝나버리는데, 내부자료를 알면 컴파일 전인 코드 입력 과정에 어떤 오류인지를 바로 알려줄 수 있다”고 설명했다.
그는 “컴파일의 결과인 실행물로 분석하지 않고 코드를 보면서 나쁜 구조인지 찾거나, 중복을 찾는 등의 일을 정적 분석이라고 한다”며 “컴파일러가 정적분석에 필요한 기초 데이터세트를 갖고 있으므로, 정적분석도구를 만든다고 할 때 직접 전체 구조를 만들지 않고도 컴파일러의 API를 통해 손쉽게 만들 수 있게 된다”고 덧붙였다.
MS가 올해 열린 ‘빌드2016’ 컨퍼런스에서 밝힌 닷넷 관련 주요 발표는 하부구조의 통합이다.
현재의 닷넷 플랫폼은 닷넷 프레임워크(윈도 데스크톱), 닷넷 네이티브(UWP), 코어CLR(닷넷코어), 유니티(모노), 자마린(모노) 등 사용처에 따라 다른 하부구조를 갖는다.
기본적으로 가장 풍부한 API를 제공하는 건 닷넷 프레임워크다. 닷넷네이티브나 코어CLR은 닷넷프레임워크에서 추려낸 API만 제공한다. 모노의 경우 오픈소스로서 닷넷 프레임워크와 별개로 발전해왔기 때문에 새로운 API를 지원하지 않는다. 윈도7 데스크톱용으로 만든 앱을 윈도10에서 바로 사용할 수 없고, 모바일에서 사용할 수 없는 이유다.
MS는 이에 사용처별로 코드를 재작성하지 않고 재사용할 수 있는 크로스 플랫폼을 만들려 노력해왔다. MS가 택한 방법은 포터블클래스라이브러리(PCL)였다.
앱 프로젝트를 만들 때 PCL을 선택하고, 타깃 플랫폼을 정하면 플랫폼 공통적으로 필요한 API를 제공하는 방식이다. 개발자가 개발환경에 어떤 용도로 만든다는 걸 미리 알려주고, 개발자의 의도를 알고 있는 개발환경에서 미리 필요한 API를 제공해준다는 것이다. 이 경우 미리 선택한 플랫폼에서 쓰이지 않는 API를 요청하면 오류로 표시된다.
김 부장은 “PCL의 경우 비주얼스튜디오 밖에서 개발하려할 때 많은 불편함을 낳는다”며 “그래서 전략을 바꾼 것이 하부구조를 모두 동일하게 통일하겠다는 것”이라고 설명했다.
그는 “현재 닷넷 프레임워크는 베이스클래스라이브러리(BCL), 닷넷코어는 코어라이브러리, 자마린은 모노클래스라이브러리 등을 쓰고 있는데, 이게 향후 ‘닷넷 스탠더드 라이브러리’로 통합된다”고 덧붙였다.
닷넷 하부구조의 통합은 점진적으로 진행된다. 스탠더드라이브러리 완성 시점은 아직 공개되지 않은 상태다.
김 부장은 오픈소스 커뮤니티의 닷넷 플랫폼 개발 기여도를 강조하기도 했다. 닷넷을 오픈소스로 전환했어도 여전히 MS만 참여한다는 일부의 지적에 대한 대답이다.
닷넷 플랫폼 개발은 닷넷재단에서 모든 걸 관할하고 있다. 처음 재단 설립 당시 10개 정도였던 프로젝트는 41개로 늘었다.
MS에 따르면, 작년 세계 지역별 닷넷 기여도는 미국과 유럽 등지에 편중됐다. 그러나 올해의 경우 세계 곳곳에서 고른 기여도 분포를 보이고 있다. 작년까지 기여가 없었던 한국도 적지 않은 기여를 하고 있다.
김 부장은 “깃허브의 이슈를 분석하면 커뮤니티에서 만든 이슈가 절반을 차지한다”며 “모노도 많지만, ASP닷넷코어와 닷넷코어 등에도 커뮤니티의 기여가 매우 많다”고 마했다.
닷넷 프로젝트의 전체 컨트리뷰터 순위가 흥미롭다. 특히 회사별 순위에서 1위가 구글이고, 삼성전자가 4위를 차지한다.
닷넷 플랫폼의 개발언어 중 하나인 C#과 비주얼베이직, F#도 새로운 버전으로 나올 예정이다.
김 부장은 “C#7의 경우 함수형 언어의 튜플, 패턴매칭 등의 기능을 제공하게 된다”며 “비주얼베이직은 더 단순하고 쉬워지는 형태로 변화하고, F#은 C#이나 VB 등에서 만든 코드를 쓸 수 있도록 바뀐다”고 말했다.
관련기사
- MS, 닷넷코어1.0 6월말 RTM 예고2016.06.21
- 레드햇 "닷넷 커뮤니티 성공 돕겠다"2016.06.21
- MS, 비주얼스튜디오용 자마린 무료화2016.06.21
- MS, ASP닷넷5 명칭 변경 ‘코어1.0’2016.06.21
MS는 오는 27일 닷넷코어1.0 과 ASP닷넷코어1.0, 엔티티프레임워크코어1.0의 RTM 버전을 공개할 예정이다. 이와 함께 닷넷코어를 위한 툴의 두번째 프리뷰 버전을 공개한다. 닷넷코어 툴은 비주얼스튜디오15 출시 시점에 맞춰 완성될 예정이다.
김 부장은 “닷넷코어의 경우 커맨드라인인터페이스(CLI)가 계속 강조되고 있다”며 “닷넷코어 컴파일 과정이나 배포 과정을 CLI로 이뤄지게 했는데, 윈도뿐 아니라 맥과 리눅스서 쓴다는 전제에서 보면 CLI지원이 중요하기 때문”이라고 설명했다.