주말 아침 - 주간 닷넷 #4

주말 아침 - 주간 닷넷 #4

한 주 동안 .NET 생태계에서 있었던 주요 이슈와 아티클, 기술 트렌드를 정리해 소개합니다.


:pushpin: .NET 변화 속도가 너무 빠르다고 불평하는 기업들은 그냥 EOL 이후 지원 비용을 지불해야 한다

  • 저자: Andrew Lock
  • 태그: dotnet #support #enterprise

주요 내용

  • HeroDevs사의 후원 기반 아티클이나 글쓴이의 의견 포함
  • .NET 릴리스 주기가 빠르다고 불평하는 기업들의 현실
  • 메이저 버전 마이그레이션 비용: 코드 변경, 규제 재인증, 기회비용
  • Java 생태계처럼 EOL 버전에 대한 유료 지원 활용 권장
  • HeroDevs의 Never Ending Support로 CVE 패치 제공

:pushpin: .NET 10의 원샷(One-shot) 도구 실행 – 설치 없이 도구 실행하기

  • 저자: Bart Wullems
  • 태그: dotnet10 #tools #cli

주요 내용

  • .NET 10의 원샷(One-shot) 도구 실행 기능 도입
  • dotnet tool exec 명령으로 도구 설치 없이 직접 실행
  • CI/CD 파이프라인에서 깨끗하고 재현 가능한 빌드 제공
  • dnx 명령어 도입으로 npm의 npx와 유사한 간결한 구문 제공

:pushpin: C# 14: 사용자 정의 복합 할당 연산자

  • 저자: Anthony Giretti
  • 태그: #csharp14 #operators #performance

주요 내용

  • 커스텀 타입에서 복합 할당 연산자(+=, -=, *=, /=) 명시적 정의 가능
  • 기존 자동 합성 방식과 달리 인플레이스 동작 완전 제어
  • 구조체 변형을 제자리에서 수행하여 할당 감소
  • 도메인 특화 로직을 연산자에 직접 표현

:pushpin: C# 14: Null-조건부 할당

  • 저자: Anthony Giretti
  • 태그: #csharp14 #language #features

주요 내용

  • C# 14에서 ?. 연산자를 할당 좌측에서도 사용 가능
  • 중첩된 속성, 딕셔너리, 배열 요소에 안전하게 할당
  • 반복적인 null 검사 가드 절 제거로 코드 간결화
  • API 응답의 불완전한 객체 그래프 안전 처리

:pushpin: 정밀도의 문제: C#에서 통화, 시간대, 범위를 정확하게 다루기

  • 저자: Sudhir Mangla
  • 태그: csharp #precision #fintech

주요 내용

  • double 타입의 이진 부동소수점 한계와 decimal 사용 권장
  • Money 값 객체 설계로 통화 규칙과 반올림 기준 캡슐화
  • DateTimeOffset, DateOnly, TimeOnly로 시간 의도 명확화
  • DST 전환 중 모호한 시간과 유효하지 않은 시간 명시적 처리
  • 반개구간 패턴 [Start, End)으로 범위 경계 모호성 제거

:pushpin: Clean Architecture in .NET — 보기 좋은 다이어그램에서 프로덕션 코드로

  • 저자: Cristian Sifuentes
  • 태그: #architecture #cleanarchitecture dotnet

주요 내용

  • 비즈니스 규칙을 중심에, 기술을 주변에 배치하는 Clean Architecture 원칙
  • Domain, Application, Infrastructure, API 4개 프로젝트 레이어 구성
  • 도메인 계층은 EF, ASP.NET Core 등 프레임워크 독립성 유지
  • 테스트 용이성과 프레임워크 교체 가능성 확보

:pushpin: .NET CancellationToken 완전 가이드

  • 작성자: Jacob Mellor (IronSoftware)
  • 태그: csharp dotnet async #cancellationtoken

주요 내용

  • CancellationToken으로 안전한 작업 중단과 리소스 절약
  • 타임아웃·LinkedTokenSource·콜백 등으로 다양한 비동기 흐름의 취소 제어
  • ValueTask·CTS 풀링 등으로 취소 처리 시 오버헤드 최소화
  • Web API·백그라운드 서비스·스트림 처리에서의 실전적인 취소 패턴 제시

:pushpin: .NET Repository + Unit of Work: 남용되는 패턴에서 전략적 무기로

  • 저자: Cristian Sifuentes
  • 태그: #patterns repository #unitofwork

주요 내용

  • Repository와 Unit of Work가 DbSet의 얇은 래퍼로 전락하는 문제 지적
  • Repository는 비즈니스 작업을 표현하는 집계근 중심 추상화
  • Unit of Work는 변경사항을 단일 원자적 트랜잭션으로 묶는 경계
  • 다중 테이블 집계, 도메인 불변성, 명확한 트랜잭션 경계에서 진가 발휘

:pushpin: Vertical Slice Aggregates — .NET에서 클린 아키텍처를 대체할 실제 대안

https://medium.com/@vahidbakhtiaryinfo/vertical-slice-aggregates-a-real-alternative-to-clean-architecture-in-net-03dd9e03d68d

  • 저자: Vahid Bakhtiary
  • 태그: #architecture #verticalslice #patterns

주요 내용

  • Clean Architecture의 복잡성에 대한 실용적 대안 제시
  • 기능별로 모든 레이어를 하나의 수직 슬라이스에 포함
  • 응집도 향상 및 변경 영향 범위 최소화
  • 레이어 아키텍처 vs 수직 슬라이스 비교

:pushpin: 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 패턴과의 자연스러운 통합

:pushpin: TypedSql: C# 타입 시스템을 고성능 SQL 쿼리 엔진으로 바꾸기

  • 저자: Steve (hez2010)
  • 태그: csharp #typedsql #performance

주요 내용

  • C# 타입 시스템 자체를 쿼리 플랜으로 활용하는 실험적 프로젝트
  • 중첩 제네릭 타입으로 쿼리 표현, 런타임 해석 대신 정적 메서드 호출
  • 값 타입 기반 설계로 가상 호출 제거 및 성능 최적화
  • 리터럴 값을 제네릭 타입 매개변수로 인코딩

:pushpin: TUnit — 내가 2년을 투자해 새로운 .NET 테스트 프레임워크를 만든 이유

https://medium.com/@thomhurst/tunit-why-i-spent-2-years-building-a-new-net-testing-framework-86efaec0b8b8

  • 저자: Tom Longhurst
  • 태그: #testing #tunit #framework

주요 내용

  • Tom Longhurst의 TUnit(https://tunit.dev/) 프레임워크 개발 동기
  • 기존 테스팅 프레임워크의 한계 극복
  • 새로운 접근법과 주요 기능

:pushpin: LightProto: .NET용 고성능 Protocol Buffers 구현

  • 저자: dameng324
  • 태그: #protobuf #performance nativeaot

주요 내용

  • 컴파일 타임 코드 생성으로 Native AOT 완벽 지원
  • protobuf-net 대비 20%-50% 성능 향상
  • Source Generator 기반 직렬화/역직렬화 코드 생성
  • protobuf-net 스타일 API로 쉬운 마이그레이션

:pushpin: Stride 4.3 발표: .NET 10 및 C# 14 지원 게임 엔진

  • 저자: Stride Team
  • 태그: #stride #gamedev dotnet10

주요 내용

  • .NET 10과 C# 14 통합으로 더 빠른 실행과 메모리 사용량 감소
  • Bepu Physics 물리 엔진 도입 (C# 고성능 물리 엔진)
  • Vulkan 컴퓨트 셰이더 및 OpenXR 안정성 개선
  • 리눅스/Mac에서 프로젝트 빌드 지원 강화

:bookmark_tabs: 가벼운 읽을거리

후보 항목 중 이슈로 선정되지 않은 가벼운 읽을거리들


Files v4.0.21 발표


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처럼 표를 생성하는 기능 추가
  • 무료 업데이트로 제공되며 생산성 도구로 확장
13개의 좋아요

짱짱짱!

4개의 좋아요

VSA와 계층형은 정답 없는 떡밥이군요 :rofl:

3개의 좋아요

“왕도는 없다.”
맞습니다. 서로의 특성과 장단점을 이해하고 적소에 적용하는 것 ㅎ

2개의 좋아요