주말 아침 - 주간 닷넷 #4
한 주 동안 .NET 생태계에서 있었던 주요 이슈와 아티클, 기술 트렌드를 정리해 소개합니다.
.NET 변화 속도가 너무 빠르다고 불평하는 기업들은 그냥 EOL 이후 지원 비용을 지불해야 한다
- 저자: Andrew Lock
- 태그: dotnet #support #enterprise
주요 내용
- HeroDevs사의 후원 기반 아티클이나 글쓴이의 의견 포함
- .NET 릴리스 주기가 빠르다고 불평하는 기업들의 현실
- 메이저 버전 마이그레이션 비용: 코드 변경, 규제 재인증, 기회비용
- Java 생태계처럼 EOL 버전에 대한 유료 지원 활용 권장
- HeroDevs의 Never Ending Support로 CVE 패치 제공
.NET 10의 원샷(One-shot) 도구 실행 – 설치 없이 도구 실행하기
- 저자: Bart Wullems
- 태그: dotnet10 #tools #cli
주요 내용
- .NET 10의 원샷(One-shot) 도구 실행 기능 도입
dotnet tool exec명령으로 도구 설치 없이 직접 실행- CI/CD 파이프라인에서 깨끗하고 재현 가능한 빌드 제공
dnx명령어 도입으로 npm의npx와 유사한 간결한 구문 제공
C# 14: 사용자 정의 복합 할당 연산자
- 저자: Anthony Giretti
- 태그: #csharp14 #operators #performance
주요 내용
- 커스텀 타입에서 복합 할당 연산자(+=, -=, *=, /=) 명시적 정의 가능
- 기존 자동 합성 방식과 달리 인플레이스 동작 완전 제어
- 구조체 변형을 제자리에서 수행하여 할당 감소
- 도메인 특화 로직을 연산자에 직접 표현
C# 14: Null-조건부 할당
- 저자: Anthony Giretti
- 태그: #csharp14 #language #features
주요 내용
- C# 14에서
?.연산자를 할당 좌측에서도 사용 가능 - 중첩된 속성, 딕셔너리, 배열 요소에 안전하게 할당
- 반복적인 null 검사 가드 절 제거로 코드 간결화
- API 응답의 불완전한 객체 그래프 안전 처리
정밀도의 문제: C#에서 통화, 시간대, 범위를 정확하게 다루기
- 저자: Sudhir Mangla
- 태그: csharp #precision #fintech
주요 내용
double타입의 이진 부동소수점 한계와decimal사용 권장Money값 객체 설계로 통화 규칙과 반올림 기준 캡슐화DateTimeOffset,DateOnly,TimeOnly로 시간 의도 명확화- DST 전환 중 모호한 시간과 유효하지 않은 시간 명시적 처리
- 반개구간 패턴
[Start, End)으로 범위 경계 모호성 제거
Clean Architecture in .NET — 보기 좋은 다이어그램에서 프로덕션 코드로
- 저자: Cristian Sifuentes
- 태그: #architecture #cleanarchitecture dotnet
주요 내용
- 비즈니스 규칙을 중심에, 기술을 주변에 배치하는 Clean Architecture 원칙
- Domain, Application, Infrastructure, API 4개 프로젝트 레이어 구성
- 도메인 계층은 EF, ASP.NET Core 등 프레임워크 독립성 유지
- 테스트 용이성과 프레임워크 교체 가능성 확보
.NET CancellationToken 완전 가이드
주요 내용
CancellationToken으로 안전한 작업 중단과 리소스 절약- 타임아웃·LinkedTokenSource·콜백 등으로 다양한 비동기 흐름의 취소 제어
- ValueTask·CTS 풀링 등으로 취소 처리 시 오버헤드 최소화
- Web API·백그라운드 서비스·스트림 처리에서의 실전적인 취소 패턴 제시
.NET Repository + Unit of Work: 남용되는 패턴에서 전략적 무기로
- 저자: Cristian Sifuentes
- 태그: #patterns repository #unitofwork
주요 내용
- Repository와 Unit of Work가 DbSet의 얇은 래퍼로 전락하는 문제 지적
- Repository는 비즈니스 작업을 표현하는 집계근 중심 추상화
- Unit of Work는 변경사항을 단일 원자적 트랜잭션으로 묶는 경계
- 다중 테이블 집계, 도메인 불변성, 명확한 트랜잭션 경계에서 진가 발휘
Vertical Slice Aggregates — .NET에서 클린 아키텍처를 대체할 실제 대안
- 저자: Vahid Bakhtiary
- 태그: #architecture #verticalslice #patterns
주요 내용
- Clean Architecture의 복잡성에 대한 실용적 대안 제시
- 기능별로 모든 레이어를 하나의 수직 슬라이스에 포함
- 응집도 향상 및 변경 영향 범위 최소화
- 레이어 아키텍처 vs 수직 슬라이스 비교
Uno Platform의 C# Markup으로 WASDK의 XAML 제한 극복
https://platform.uno/blog/overcoming-wasdks-xaml-limitation-with-uno-platforms-c-markup/
주요 내용
- WindowsSill이 적용한 Uno Platform의 C# Markup을 활용한 선언적 UI 작성
- WASDK의 XAML 제약 사항 우회
- 타입 안전성과 IntelliSense 지원
- MVVM 패턴과의 자연스러운 통합
TypedSql: C# 타입 시스템을 고성능 SQL 쿼리 엔진으로 바꾸기
- 저자: Steve (hez2010)
- 태그: csharp #typedsql #performance
주요 내용
- C# 타입 시스템 자체를 쿼리 플랜으로 활용하는 실험적 프로젝트
- 중첩 제네릭 타입으로 쿼리 표현, 런타임 해석 대신 정적 메서드 호출
- 값 타입 기반 설계로 가상 호출 제거 및 성능 최적화
- 리터럴 값을 제네릭 타입 매개변수로 인코딩
TUnit — 내가 2년을 투자해 새로운 .NET 테스트 프레임워크를 만든 이유
- 저자: Tom Longhurst
- 태그: #testing #tunit #framework
주요 내용
- Tom Longhurst의 TUnit(https://tunit.dev/) 프레임워크 개발 동기
- 기존 테스팅 프레임워크의 한계 극복
- 새로운 접근법과 주요 기능
LightProto: .NET용 고성능 Protocol Buffers 구현
- 저자: dameng324
- 태그: #protobuf #performance nativeaot
주요 내용
- 컴파일 타임 코드 생성으로 Native AOT 완벽 지원
- protobuf-net 대비 20%-50% 성능 향상
- Source Generator 기반 직렬화/역직렬화 코드 생성
- protobuf-net 스타일 API로 쉬운 마이그레이션
Stride 4.3 발표: .NET 10 및 C# 14 지원 게임 엔진
- 저자: Stride Team
- 태그: #stride #gamedev dotnet10
주요 내용
- .NET 10과 C# 14 통합으로 더 빠른 실행과 메모리 사용량 감소
- Bepu Physics 물리 엔진 도입 (C# 고성능 물리 엔진)
- Vulkan 컴퓨트 셰이더 및 OpenXR 안정성 개선
- 리눅스/Mac에서 프로젝트 빌드 지원 강화
가벼운 읽을거리
후보 항목 중 이슈로 선정되지 않은 가벼운 읽을거리들
Files v4.0.21 발표
- Windows 파일 관리자 현대화 프로젝트(https://files.community) 진행 상황 공유
SharedArrayBuffer: WebAssembly·.NET·병렬 런타임 아키텍처의 미래를 재편하는 숨겨진 초(超)원시 구조
- SharedArrayBuffer 기반 멀티스레딩과 병렬 처리 구조 분석
- WebAssembly와 .NET 통합에 대한 미래 전략 제시
WebAssembly .NET 10 런타임 혁명: WASM이 Native AOT·WASI 2.0과 함께 범용 타깃이 된 과정
- WASM Native AOT·WASI 2.0로 .NET이 범용 타겟 플랫폼으로 확장
- 다양한 언어 생태계와 크로스 플랫폼 개발 전략 변화 설명
호스트 트레이싱을 통한 .NET 부트 프로세스 탐구
- COREHOST_TRACE로 dotnet muxer → hostfxr → hostpolicy 부팅 과정 추적
- 프레임워크 해결·롤포워드 정책·버전 충돌 디버깅 기법 정리
.NET 로깅 실수 10가지와 해결책
- 구조화 로그·민감정보 보호·적절한 레벨링 등 올바른 로깅 전략 제시
- 환경별 설정, 성능 고려, 팀 규칙 정립을 통한 유지보수성 향상
EF에서 정렬 가능한 UUID v7 사용하기
Guid.CreateVersion7()으로 시간 정렬 가능한 UUID 생성- EF Core ValueGenerator 적용으로 인덱스 성능 개선
.NET 10 CS0579 중복 어셈블리 속성 해결
- SDK 자동 AssemblyInfo와 레거시 파일 충돌 원인 분석
- 파일 삭제 또는
<GenerateAssemblyInfo>false</...>로 문제 해결
상태 관리의 기술: EF Core의 DbContext 라이프사이클 해석하기
- DbContext는 짧은 생명주기·단일 작업 단위로 사용해야 안정적
- Scoped, Factory, Pooling 등 상황별 등록 전략 제안
EF Core의 Pending Model Changes — 성가신 경고에서 스키마 무결성 보호 장치로
- 모델·스냅샷 불일치 경고의 원인과 스키마 무결성 역할 설명
- 마이그레이션 생성·DB 초기화 등 명시적 변경 관리 필요
AsNoTracking()이 EF Core 쿼리를 더 빠르게 만드는 이유
- 읽기 전용 쿼리에서 ChangeTracker 제거해 성능 향상
- 사용 시 장점과 적용 시나리오를 정리
IQueryable · IEnumerable · IList · ICollection · IDictionary 차이
- 각 컬렉션 인터페이스의 구조·용도·지연 실행 차이 설명
- LINQ to Objects vs LINQ to SQL 적용 구분
Windows 11 Notepad 테이블 기능 도입
- Notepad에서 Word처럼 표를 생성하는 기능 추가
- 무료 업데이트로 제공되며 생산성 도구로 확장
