나만의 작은 도서관
[C#] .NET 프레임워크 역사와 구현체 본문
.NET 프레임워크
.NET 프레임워크(.NET Framework)는 Microsoft에서 개발한 소프트웨서 개발 플랫폼이다. 2002년에 처음 출시되었으며, 데스크톱 애플리케이션, 웹 애플리케이션, 서비스 등 다양한 종류의 소프트웨어를 개발할 수 있는 기반을 제공하였다.
이제는 너무 오래된 .NET 프레임워크
.NET 프레임워크는 2019년 4월에 .NET Framework 4.8을 마지막으로 버전 업데이트를 중단했다. 오랜 기간 사용되어오면서 .NET 프레임워크를 사용한 많은 프로젝트와 서적들이 있지만, 1) Windows 운영체제에서만 사용할 수 있다는 점과 2)상위호환인 .NET의 존재로 인해 현재는 잘 사용하지 않는다.
+) 참고로 Window10 운영체제라면 .NET Framework 4.8은 자동으로 설치되어있다.
.NET Core와 .NET
.NET Core는 .NET Framework에서 윈도우에서만 실행된다는 제약을 벗어나기위해 만들어진 프레임워크이다. .NET Core으로 넘어오면서 맥이나 리눅스와 같은 운영체제에서도 실행이 가능해졌고, 본격적으로 크로스 플랫폼 개발을 지원하게 되었다. 하지만, .NET Core는 .NET Framework에서 제작 가능한 모든 응용 프로그램들을 제작할 수 있는 것이 아닌, 제한된 응용 프로그램만 제작이 가능했기 때문에 .NET Core에서 제작이 어려운 응용 프로그램은 여전히 .NET Framework을 쓸 수 밖에 없었다.
.NET의 등장
.NET Core가 발전되면서 .NET Framework에서만 제작 가능한 응용 프로그램들을 .NET Core에서도 제작이 가능해졌고, 이를 이름으로 표현하기 위해 Core라는 이름을 떼고 .NET 5으로 등장하였다. (4를 건너뛰고 5가 된 이유는 그 당시 자주 사용되던 .NET Framework 4.x와의 혼동을 피하기 위해서라고 한다.)
+) 2020년 11월에 등장한 .NET 5는 .NET Framework와 .NET Core의 장점을 합친 1차 버전이라 미흡한 부분에 꽤 보였으나, 2021년 11월에 등장한 .NET 6에서 많은 부분이 보완되었다.
.NET Framework 발전 과정
.NET Standard
.NET Standard는 다양한 .NET 구현체(.NET Framework, .NET Core, Xamarin 등) 간에 호환성을 보장하기 위해 정의된 공통 API 사양을 의미한다. 즉, 여러 플랫폼에서 동일한 코드를 재사용할 수 있도록 하는 표준이다.
배경 및 필요성
- 과거: 프레임워크, 코어, 자마린이 전부 따로 분리되어 있어 상호간 접근이 어려움(왼쪽 사진)
- 현재: 상호 작용이 편리할 수 있도록 Standard 라이브러리 추가(오른쪽 사진)
과거에는 .NET 플랫폼이 다양했지만, 각 플랫폼에서 지원하는 API가 달라 코드 공유가 어렵다는 문제가 있었다. 예를 들어:
- .NET Framework는 Windows에 특화되어 있었고,
- .NET Core는 크로스 플랫폼을 지원했지만 지원 API가 제한적이었으며,
- Xamarin은 모바일 개발에 중점을 두고 있었다.
이러한 문제를 해결하기 위해 .NET Standard가 도입되었다. 결론적으로, .NET Standard는 공통된 API 집합을 정의함으로써 다양한 플랫폼에서 하나의 코드 베이스를 공유하기위해 생기게 되었다.
간단하게 .NET 구현체들이 지원하는 .NET Standard 버전은 다음과 같다.
- .NET Framework : NET Standard 2.0
- .NET Core: NET Standard 2.1
- Mono: NET Standard 2.1
Mono
Mono는 오픈 소스 기반의 .NET Framework 구현체로, 크로스 플랫폼에서 .NET 애플리케이션을 실행하기위해 설계된 프레임워크이다. Xamarin, Unity 등의 플랫폼과 긴밀히 통합되어 있으며, 특히 비-Windows 환경(예: Linux, macOS, 모바일)에서 .NET 애플리케이션을 개발하거나 실행할 때 널리 사용된다.
Mono의 존재 의의
크로스 플랫폼은 .NET Core도 지원한다. 그럼에도 Mono가 있어야만 하는 이유는 무엇일까.
첫번째 이유로 애초에 Mono는 .NET Core가 나오기 전부터 개발되어왔던 프레임워크라는 것이다. 원래부터 Mono가 크로스 플랫폼을 지원하기 위한 프레임워크였으며, 최신 기술들로 새로운 크로스 플랫폼 런타임을 제공하기 위해 나중에 .NET Core를 만든 것이다.
두번째 이유로는 방향성의 차이이다. Mono는 .NET Core랑 다르게 경량 설계로, 리소스가 제한된 시스템에서도 사용할 수 있도록 발전해왔다. 이 때문에 리소스가 제한된 모바일 개발이나 임베디드 시스템에 사용하기 적합했고, Unity에서 C# 스크립트를 실행하는 런타임으로도 사용할 수 있었다.
Mono와 .NET Core의 비교
비슷하면서 다른 Mono와 .NET Core를 비교하면 다음과 같다.
특징 | Mono | .NET Core |
출시 시기 | 2004년 (오래된 프로젝트) | 2016년 (최신 기술 기반) |
초기 목적 | .NET Framework를 비-Windows 환경에서 실행 | 새로운 크로스 플랫폼 런타임 제공 |
사용 사례 | 모바일(Xamarin), 게임(Unity), 레거시 지원 | 현대적이고 확장 가능한 서버 애플리케이션 |
플랫폼 초점 | 모바일, 임베디드, 게임, 크로스 플랫폼 데스크톱 | 클라우드, 웹, 서버 애플리케이션 중심 |
API 호환성 | .NET Framework와 높은 호환성 | .NET Framework와 호환되지 않지만 더 발전된 API |
성능 | 제한된 성능 (초기 설계가 오래됨) | 높은 성능 (최적화된 런타임, 최신 기술 활용) |
주요 통합 사례 | Xamarin, Unity | ASP.NET Core, Docker 컨테이너 |
주요 통합 사례 | JIT, AOT 지원 | JIT 중심 (AOT도 일부 지원) |
.NET 5/6으로 통합
그러나 어디까지나 .NET Core와의 이야기이지, .NET 5부터 Mono와 .NET Core는 단일 .NET 플랫폼으로 통합되었다. 그렇기 때문에 이젠 위와 같은 비교는 현재 시점에서 딱히 의미가 없다.
결론
Mono와 .NET Core는 모두 크로스 플랫폼 지원이라는 공통된 목표를 가지고 있지만, Mono는 모바일, 게임, 레거시 코드 실행에 강점이 있으며, .NET Core는 현대적 서버 애플리케이션과 클라우드 중심의 개발에 적합하다.
하지만, .NET 5/6 이후로 두 기술이 통합되면서 Mono와 .NET Core의 경계는 점차 희미해지고, 모든 환경에서 단일 .NET 플랫폼을 사용할 수 있게 되었다.
참고 영상 및 자료
https://www.youtube.com/watch?v=ki-1bXi1Mlk
https://www.youtube.com/watch?v=I_GVaacIbq8
https://www.youtube.com/watch?v=PEM6Ocb2qSU
https://time.graphics/line/291016