개요
.NET 7 Preview 2는 2022년 3월 공개된 두 번째 프리뷰로, RegEx 소스 생성기, NativeAOT의 메인라인 전환, dotnet new CLI 개선을 중심으로 개발 경험과 성능을 한 단계 끌어올렸다. 이 포스트에서는 위 세 가지를 중심으로 변경 사항을 정리하고, 실제 코드 예시와 함께 적용 시 참고할 수 있는 내용을 담았다.
이 포스트가 도움이 되는 경우
- .NET 6에서 .NET 7(또는 상위 버전)으로 마이그레이션을 검토 중인 팀
- 정규식 사용이 많은 서비스의 시작 비용·성능을 줄이고 싶은 개발자
- 네이티브 AOT 배포를 고려 중인 C# 개발자
dotnet new및 CLI 워크플로우 개선에 관심 있는 개발자
.NET 7 Preview 2 주요 변경 사항 개요
Preview 2에서 강조된 세 가지 축은 아래와 같다. 각각 컴파일 타임 최적화, 런타임 배포 모델, 개발자 도구 경험에 초점을 둔다.
flowchart LR
subgraph preview2Highlights["Preview 2 핵심"]
A[RegEx Source Generator]
B[NativeAOT Mainline]
C["dotnet new CLI 개선"]
end
Input[소스 코드] --> A
Input --> B
Input --> C
A --> Out1["컴파일 타임정규식 엔진"]
B --> Out2["네이티브AOT 배포"]
C --> Out3["탭 완성템플릿 탐색"]
RegEx 소스 생성기 (Regex Source Generator)
왜 필요한가
기존에는 new Regex(...)를 사용하면 런타임에 패턴을 파싱하고 엔진을 구성하는 비용이 발생한다. 패턴이 컴파일 타임에 고정되어 있다면, 이 작업을 컴파일 타임으로 옮겨 시작 비용을 없애고 트리밍·디버깅에도 유리하게 만들 수 있다. RegEx 소스 생성기는 바로 그 목적으로 Preview 1에 포함되었고, Preview 2 공식 소개에서 다시 강조되었다.
사용 방법
- 해당 타입을 partial class로 만든다.
[RegexGenerator("패턴", 옵션)]을 붙인 static partial 메서드를 선언하고, 반환 타입을Regex로 둔다.- 소스 생성기가 이 메서드의 구현을 채우며, 패턴이나 옵션을 바꾸면 자동으로 다시 생성된다.
Before: 런타임 Regex
| |
After: 소스 생성기 사용
| |
패턴이 컴파일 타임에 알려져 있다면 위 방식으로 전환하는 것을 권장한다. 자세한 제안과 이슈는 GitHub - Regex Source Generator (runtime#44676)에서 확인할 수 있다.
NativeAOT 업데이트
NativeAOT(Ahead-of-Time 컴파일)는 실험 단계였던 dotnet/runtimelab의 feature/NativeAOT 브랜치에서 .NET 7 메인라인 개발로 자리 잡았다. 이전 발표에 따르면, runtimelab에서 dotnet/runtime 저장소로의 코드 이전 작업이 완료된 상태이며, SDK에서 NativeAOT로 프로젝트를 퍼블리시하는 일급 지원은 이후 프리뷰에서 추가될 예정이다.
NativeAOT를 사용하려면 트리밍(trimming) 이 필수이므로, 미리 셀프 컨테인드 배포 + 트리밍을 적용해 보며 trim 경고를 제거해 두는 것이 좋다. 라이브러리 작성자라면 라이브러리 트리밍 준비 가이드를 참고하면 된다.
- 정리: .NET Runtime - Native AOT (runtimelab 쪽 정리)
- 이슈·진행 상황: NativeAOT in .NET 7 #61231
dotnet new CLI 개선
Preview 2부터 dotnet new는 새 CLI 파서와 탭 완성 지원으로 사용성이 크게 개선되었다.
- 서브커맨드:
--install,--uninstall등이install,uninstall형태로 통일되었고, 기존--접두사 옵션은 하위 호환을 위해 당분간 유지된다. - 탭 완성:
dotnet new<공백> 후 템플릿 이름,dotnet new web --후 옵션,--auth같은 선택 인자의 허용 값 등에서 탭 완성으로 후보를 볼 수 있다. - 셸별 설정 방법은 .NET CLI 탭 완성 활성화 문서를 참고하면 된다.
템플릿 작성자라면 dotnet/templating 저장소에서 새 동작과 이슈를 확인할 수 있다.
.NET 7 타겟팅 및 지원 정책
프로젝트에서 .NET 7을 사용하려면 TargetFramework를 예를 들어 다음과 같이 지정한다.
| |
플랫폼별 TFM 예: net7.0-windows, net7.0-macos, net7.0-ios, net7.0-android 등. .NET 7은 Current 릴리스로, 출시일로부터 18개월간 무료 지원·패치가 제공된다. 호환성·변경 사항은 .NET 7 호환성 문서를 참고하는 것이 좋다.
참고 문헌
- Announcing .NET 7 Preview 2 – The New, ‘New’ Experience — Microsoft .NET Blog (공식 발표)
- .NET 7 Inches Closer to NativeAOT in Preview 2 — Visual Studio Magazine (NativeAOT·RegEx 소개)
- .NET Runtime - Native AOT — dotnet/runtimelab (NativeAOT 브랜치)
- Introduce the new Regex Source Generator (runtime#44676) — dotnet/runtime (RegEx 소스 생성기 제안)
- Moving NativeAOT to mainline (runtime#61231) — dotnet/runtime (NativeAOT 메인라인 이전 이슈)
![Featured image of post [.NET] .NET 7 Preview 2 소개 - RegEx 생성기, NativeAOT, CLI 개선](/post/2022-03-18-announcing-dotnet-7-preview-2/wordcloud_hu_9522c5c5991be5c9.webp)
![[Rust] Comprehensive Rust 무료 강의 정리 및 코스 구조](/post/2022-12-30-comprehensive-rust/wordcloud_hu_d1420ff38434cdb6.webp)
![[Hardware] LattePanda Alpha에 Ubuntu 16.04 LTS 설치 가이드](/post/2018-12-06-install-ubuntu-16.04-on-lattepanda/wordcloud_hu_fc536f8de2cbd4bf.webp)
![[.NET] 런타임별 Finalizer 호출 차이와 IDisposable 권장](/post/2021-04-27-distructor-called-by-runtime/wordcloud_hu_7b7dd809a5d4bdc3.webp)
![[Tutorial] Learn Prompting - 프롬프트 엔지니어링 무료 가이드 정리](/post/2022-12-30-learn-prompting/wordcloud_hu_6a9d105de4834753.webp)
![[Hyper-V] 가상 머신 해상도 설정: Set-VMVideo 활용 가이드](/post/2025-05-24-hyper-v-virtual-machine-resolution-setting-set-vmvideo-utilization-guide/image_hu_96966cce8efeeb71.webp)