한 주 동안 .NET 생태계에서 있었던 주요 이슈와 아티클, 기술 트렌드를 정리해 소개합니다.
C# 15의 유니온 타입 살펴보기
- 저자: Bill Wagner
- 태그: #csharp15 #uniontypes #dotnet11 #language
주요 내용
- C# 15(.NET 11 대상)에서
union키워드 도입 — 변수가 선언된 고정 타입 집합 중 하나를 보유 public union Pet(Cat, Dog, Bird)구문으로 암시적 변환과 소진적switch식 지원- 컴파일러가 빌드 타임에 비소진적 switch를 거부하여 런타임 오류 사전 차단
[Union]속성으로 라이브러리 작성자가 비박싱 저장 전략의 커스텀 유니온 타입 정의 가능- .NET 11 Preview 2에서 사용 가능, 닫힌 계층 구조/닫힌 열거형 등 관련 제안과 연결
Avalonia 12 - 다음을 위한 준비
주요 내용
- 복잡한 비주얼 씬(35만 요소)에서 최대 1,867% FPS 향상, 컴파일된 바인딩 기본 활성화
- Android NativeAOT 시작 시간 1,960ms→460ms(4배), 스크롤 42→120 FPS, 유휴 CPU 0.20%→<0.01%
- .NET UI 프레임워크 최초의 네이티브 Linux 접근성 백엔드(AT-SPI2) 탑재
- 페이지 기반 내비게이션 시스템(ContentPage, DrawerPage, CarouselPage, TabbedPage) 및 WebView 오픈소스화
- netstandard2.0, Direct2D1, Tizen, Blazor 백엔드 제거; .NET 10 + SkiaSharp 3.0 대상
.NET 11 Preview 1 & 2 새로운 기능
- 저자: Arulraj Aboorvasamy
- 태그: #dotnet11 #preview #runtime blazor #efcore
주요 내용
- 네이티브 Zstandard 압축 API — GZip 대비 2~7배 빠른 압축, 14배 빠른 해제
- Runtime Async V2: async/await 상태 머신이 컴파일러에서 런타임으로 이동 — 낮은 오버헤드, 네이티브 AOT 호환
- 정적 SSR용 Blazor TempData, ASP.NET Core 네이티브 OpenTelemetry 추적
- EF Core 11: SQL Server 벡터 검색(DiskANN), 복합 타입 JSON 컬럼, LINQ MaxBy/MinBy SQL 변환
- 컨테이너 이미지 최대 17% 축소,
dotnet run대화형 프레임워크 선택기
안정적인 메시지 소비를 위한 Inbox 패턴 구현
- 저자: Milan Jovanović
- 태그: #messaging #inbox #pattern #postgresql #masstransit
주요 내용
- 메시지 수신과 처리를 분리해 중복 처리를 방지하는 Inbox 패턴 구현
ON CONFLICT DO NOTHING으로 DB에 먼저 저장하여 멱등성 보장- 배경 프로세서가
FOR UPDATE SKIP LOCKED로 미처리 메시지를 배치 조회 - 수평 확장과 브로커 독립적 재시도 제어 가능
- Idempotent Consumer 패턴과의 타이밍 및 책임 할당 차이
RedLock.NET 분산 락킹
https://medium.com/@eh0neer.jobs/redlock-net-distributed-locking-0b7c43c625f3
- 저자: Ehneer Jobs
- 태그: #redis #distributedlock #redlock #concurrency
주요 내용
- Docker/Kubernetes 환경에서 SemaphoreSlim, Mutex 등 표준 .NET 락의 한계
- PostgreSQL
pg_try_advisory_xact_lock기반 트랜잭션 범위 advisory lock - Redis RedLock 패턴: Lua 스크립트로 GUID 기반 원자적 락 소유권 체크
- 대기 시간 및 재시도 횟수(3~5회) 튜닝의 트레이드오프
- 락 테이블, PostgreSQL advisory lock, Redis RedLock 각 접근법의 장단점 비교
.NET이 내부적으로 예외를 처리하는 방식 (그리고 왜 비용이 큰지)
- 저자: Ali Hamza Ansari
- 태그: #exceptions #clr #performance #benchmarkdotnet
주요 내용
- CLR의 예외 디스패치: 스택 언와인딩, catch 블록 검색, 힙 할당, JIT 생성 EH 테이블
- BenchmarkDotNet 10만 회 반복에서 bool 반환 vs throw/catch vs
OneOf비교 OneOf와 struct 값 타입으로 Gen 0 GC 압력 제거 및 스택 트레이스 캡처 회피- 비즈니스 규칙 거부, API 검증, 고처리량 경로에서 예외 대안 사용 시점 분류
- 예외 처리 시 JIT 인라이닝 제한이라는 숨겨진 추가 비용
.NET의 Captive Dependency 완전 가이드
- 저자: Al azami tarek
- 태그: di #captivedependency #lifetime #debugging
주요 내용
- Captive dependency: 수명이 짧은 서비스가 긴 수명 서비스에 주입될 때 발생
- Root Container의 영구 캐시 vs Scope Container의 임시 캐시 동작 차이
IServiceProvider를 싱글톤에 저장하면 scoped 서비스가 루트에 영구 캐시되는 메커니즘IServiceScopeFactory로 작업마다 새 scope를 생성하는 해결법- 잘못된 시도에서 올바른 해결까지의 단계적 진행과 검증 테스트 코드
소스 코드 생성 문자열 열거형과 소진 검사 지원
- 저자: Steven Giesel
- 태그: #sourcegenerator #enum #aot #pattern
주요 내용
- 리플렉션 기반
FrozenSet초기화(AOT 비호환)와 런타임 전용 소진 검사 문제 해결 [Enumeration]소스 생성기로 sealed partial record 자동 생성 — static readonly 필드,All속성, 연산자 오버로드Match<T>()와Match()메서드로 컴파일 타임 소진 패턴 강제- private 생성자와 문자열 비교 연산자로 잘못된 인스턴스 생성 방지
PersistenceProvider도메인 enum 실제 사용 예시와 NuGet 패키지 제공
C# 소스 생성기 테스트: 실용 가이드
- 저자: Nick Cosentino
- 태그: #sourcegenerator #testing #roslyn #snapshot
주요 내용
Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing.XUnit+Basic.Reference.Assemblies.Net90설정- 어설션 기반 단위 테스트와 Verify 라이브러리 기반 스냅샷 테스트 두 가지 전략
ExpectedDiagnostics로 잘못된 입력에 대한 컴파일러 진단 검증IIncrementalGenerator(Roslyn 4.0+)가 증분 컴파일과 IDE 반응성에서ISourceGenerator보다 우수- CI/CD:
CI=true로 대화형 스냅샷 승인 비활성화, 크로스 플랫폼 줄바꿈 정규화
EF Core에서 수백만 행 삭제/업데이트
- 저자: Chris Woodruff
- 태그: #efcore #bulkoperations #performance #executeupdate
주요 내용
- 기존 EF Core 패턴의 O(n) 메모리 증가와 N+1 왕복 문제
- EF Core 7+
ExecuteUpdate(),ExecuteDelete(): LINQ 조건을 서버 측 SQL로 직접 변환, 엔티티 물리화 없음 - 변경 추적과 인터셉터를 우회하므로 이미 로드된 엔티티는 명시적 갱신 또는 폐기 필요
- EF Core 10에 네이티브
ExecuteInsert()부재, Entity Framework Extensions의InsertFromQuery()로 대체 - 1M 행 기준 기존 방식 대비 10배+ 속도 향상, 행 수와 무관한 일정 메모리 오버헤드
AI 보조 코딩 시대에도 코드 품질이 여전히 중요한가?
- 저자: Mark Heath
- 태그: #codequality ai #bestpractices
주요 내용
- AI 에이전트는 grep 기반으로 코드베이스를 탐색 — 나쁜 네이밍이 검색 실패율 증가
- Shotgun surgery 안티패턴은 AI 에이전트에게 특히 치명적 — 산발적 변경 시 누락 위험
- 컨텍스트 윈도우 제한으로 SRP가 에이전트의 정확도에 직접 영향
- AI 에이전트는 가장 빠른 수정을 기본 선택하여 기술 부채 가속화 경향
- 코드 주석과 의미 있는 네이밍이 자연어 지시와 코드베이스를 연결하는 컨텍스트 역할
가벼운 읽을거리
후보 항목 중 이슈로 선정되지 않은 가벼운 읽을거리들
.NET에서의 URL 패턴 매칭
- WHATWG URL Pattern API 스펙을 .NET에 구현한
Meziantou.Framework.Uri패키지 - 이름 있는 매개변수, 와일드카드, 선택적 세그먼트, 대소문자 무시 매칭 지원
.NET 분산 워크플로 오케스트레이션 엔진 구축
- RabbitMQ 기반 비동기 파이프라인으로 긴밀 결합 서비스 체인 대체
- 워크플로 수명 주기 상태 관리(Pending→Completed/Failed)와 단계별 독립 큐
C# 지연 실행에 한 번은 데인 적이 있다
- LINQ의
yield return기반 반복자 상태 머신과using블록 내 지연 반환 버그 .ToList()물리화 연산자로 즉시 실행하는 방법과 지연 실행의 장점(무한 시퀀스, 백프레셔)
.NET CLI 셔뱅과 인수 파싱
-v플래그가dotnet run의 verbosity 옵션과 충돌하는 문제와--구분자 해결법- 세 가지 셔뱅 대안(
#!/usr/bin/dotnet --,#!/usr/bin/env -S dotnet --등) 비교
.NET Core DI 심층 분석: 기초를 넘어서
- Keyed Services로 동일 인터페이스의 여러 구현을 문자열 키로 등록·해석
- 커스텀 팩토리, 델리게이트 팩토리, 마스터/컴포짓 팩토리 패턴
재작성 대 통합의 실제 비용
- 재작성 비용 $500K~$2M+ vs 통합 $20K~$80K, Strangler Fig 패턴의 60~80% 낮은 실패율
- 레거시 코드에 내재된 비문서화 비즈니스 로직 재발견 비용
VS 플로팅 윈도우 제어
- Tools > Options의 숨겨진 설정으로 플로팅 윈도우 소유권 모드 변경(None/Tool Windows/Documents)
- PowerToys FancyZones와 결합한 멀티모니터 레이아웃 관리
Windows 11 Copilot 버튼 제거
- Notepad, Snipping Tool, Photos, Widgets에서 Copilot 브랜드 버튼 제거
- AI 기능 자체는 유지, 브랜딩만 축소 — “writing tools” 메뉴 등으로 대체
Windows 제어판 제거가 오래 걸리는 이유
- 네트워크/프린터 디바이스 드라이버가 제어판 제거의 근본 차단 요인
- Microsoft 디자인 PM이 14년간의 마이그레이션 지연 이유를 처음으로 공식 설명
