주말 아침 - 주간 닷넷 #5

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


:pushpin: .NET 10 Validation

  • 저자: Ricardo Peres (Evolve Software Team Leader)
  • 태그: dotnet10 #validation #api

주요 내용

  • Microsoft.Extensions.Validation 네임스페이스 통한 새로운 검증 API
  • [ValidatableType], [SkipValidation] 속성으로 타입 및 멤버 검증 제어
  • ASP.NET Core Minimal APIs와 Blazor에 네이티브 검증 지원
  • 중첩된 객체와 요소 컬렉션 검증을 선택적으로 활성화 가능

:pushpin: Entity Framework Core 10의 명명된 전역 쿼리 필터

  • 저자: Tim Deschryver
  • 태그: #efcore dotnet10 #queryfilters

주요 내용

  • 엔티티당 여러 개의 필터를 각각 고유한 이름으로 정의 가능
  • HasQueryFilter 메서드로 명명된 필터 정의
  • IgnoreQueryFilters 메서드로 선택적으로 개별 필터 비활성화
  • Soft delete, Multi-tenancy, 권한 기반 필터링 등 복잡한 시나리오에 유용

:pushpin: 시니어 C# 개발자가 Reddit C# 커뮤니티에 답하다 (Hot Takes만)

https://levelup.gitconnected.com/senior-c-dev-reacts-to-reddits-c-community-hot-takes-only-8c94e47f202b

주요 내용

  • Reddit C# 커뮤니티의 주요 논쟁적 의견들
  • 시니어 개발자 관점에서의 반응과 실무 조언
  • C# 생태계의 현재 트렌드와 논쟁점 분석

:pushpin: .NET 10: 모든 개발자와 Fractional CTO가 관심 가져야 할 업그레이드

https://medium.com/@sthomason/net-10-the-upgrade-every-developer-and-fractional-cto-should-care-about-f919a656755b

  • 저자: sthomason
  • 태그: dotnet10 #performance #leadership

주요 내용

  • .NET 10의 속도, 단순성, 장기 안정성 중심 개선사항
  • Devirtualized Loops로 최대 4배 속도 향상 (주요 코드 변경 없음)
  • Hot Path Enhancements로 렌더링, 요청 처리, 메시지 처리 최적화
  • 개발자들이 수년간 다뤄온 마찰 제거 및 확장 가능한 시스템 경로 제공

:pushpin: 실제로 확장 가능한 .NET 솔루션 구조 방법: Clean Architecture 가이드

  • 저자: Mashrul Haque (15년+ 경력 Systems Architect)
  • 태그: #cleanarchitecture #architecture dotnet

주요 내용

  • 5개 핵심 계층: Domain, Application, Infrastructure, API, Shared.Kernel
  • “의존성은 항상 내향으로 흐른다” - Api → Application → Domain 방향만 참조
  • 기능별 수직 슬라이스 폴더 구조로 자기 완결적 기능 구성
  • NetArchTest를 활용한 아키텍처 규칙 자동화

:pushpin: 간단하게 설명하는 Vertical Slice Architecture

https://medium.com/@denmaklucky/vertical-slice-architecture-in-simple-terms-4cc996ca9893

  • 저자: denmaklucky
  • 태그: #verticalslice #architecture #simplicity

주요 내용

  • Vertical Slice Architecture의 기본 개념과 원칙
  • 전통적 계층형 아키텍처와의 차이점
  • 각 기능을 독립적인 슬라이스로 구성하는 장점

:pushpin: Vertical Slice Architecture: 공유 로직은 어디에 둘까?

  • 저자: Milan Jovanović (소프트웨어 아키텍처 강의자)
  • 태그: #verticalslice #architecture #sharedlogic

주요 내용

  • 3계층 공유 로직 배치 전략
  • Tier 1: 기술 인프라 (Shared.Kernel/Infrastructure)
  • Tier 2: 도메인 개념 (엔티티와 값 객체)
  • Tier 3: 피처별 로직 (Features/[Name]/Shared)
  • “Duplication is cheaper than the wrong abstraction” 원칙

:pushpin: .NET에서의 데이터 접근: ORM 및 매핑 전략 비교 (Part 1, 2)

  • 저자: Scott Galloway
  • 태그: #orm #efcore #dapper #dataaccess

주요 내용

  • EF Core, Dapper, Raw Npgsql 성능 및 생산성 비교
  • Part 1: EF Core의 프록시 사용 위험성과 N+1 쿼리 문제
  • Part 2: Dapper 경량 성능 vs EF Core 풍부한 기능
  • 하이브리드 CQRS 패턴: EF Core(쓰기) + Dapper(읽기) 조합 권장

:pushpin: Repository Pattern vs Direct EF Core: 큰 논쟁

https://medium.com/@adrianbailador/repository-pattern-vs-direct-ef-core-the-great-debate-3c914348b7e0

  • 저자: Adrian Bailador
  • 태그: repository #efcore #architecture

주요 내용

  • Repository Pattern과 DbContext 직접 사용 비교
  • Repository Pattern의 장점: 테스트 용이성, 추상화
  • Direct EF Core의 장점: 단순성, 직접적 제어
  • 실제 예제, 성능 벤치마크, 실전 시나리오 분석

:pushpin: Entity Framework Core 디버깅: 실전 8가지 쿼리 안티패턴 (및 해결 방법)

주요 내용

  • 8가지 실무 안티패턴: 날짜 문자열 저장, 텍스트 조인, FK 인덱스 미생성 등
  • "즉시 해결책(Quick DB-side)"과 “근본 해결책(Right fix)” 이원화 접근
  • SQL Server 실행 계획 수준의 구체적 성능 분석
  • 실제 마이그레이션 코드 및 EF Core 모델 설정 예제 포함

:pushpin: .NET에서의 분산 도메인 이벤트: 장애를 견디는 이벤트 흐름 설계 (RabbitMQ 버전)

https://medium.com/@vahidbakhtiaryinfo/distributed-domain-events-in-net-designing-event-flows-that-survive-outages-rabbitmq-edition-882533deb95a

  • 저자: Vahid Bakhtiaryinfo
  • 태그: #domainevents #rabbitmq #outbox #resilience

주요 내용

  • Domain Events vs Distributed Domain Events 차이점
  • Publish Outbox Anti-Pattern의 실제 문제점
  • 올바른 아키텍처: Outbox + RabbitMQ 패턴
  • .NET 프로덕션급 Outbox 구현 (Outbox 테이블, 트랜잭션, Worker Service)

:pushpin: 아무도 경고하지 않는 async/await 뒤의 숨겨진 버그

https://medium.com/@sweetondonie/the-hidden-bugs-behind-async-await-that-no-one-warns-you-about-36b0e8eda881

  • 저자: Donie Sweeton
  • 태그: async #await #bugs #antipatterns

주요 내용

  • 7가지 숨겨진 버그: .Result/.Wait() Deadlock, ConfigureAwait(false) 누락 등
  • Fire-and-Forget 잘못 사용과 async void의 위험성
  • 동기/비동기 코드 혼합 문제
  • 각 버그의 원인과 해결 방법 상세 설명

:pushpin: .NET 성능: 효율적인 Async 코드

주요 내용

  • .NET 애플리케이션에서 효율적인 비동기 코드 작성 방법
  • async/await 패턴의 올바른 사용법
  • 성능 최적화 팁과 베스트 프랙티스

:pushpin: Model View Update 패턴을 사용하여 버그 줄이기

  • 저자: Cameron Presley (함수형 프로그래밍 실무 멘토)
  • 태그: #mvu #architecture #functionalprogramming

주요 내용

  • Elm 언어에서 영감 받은 Model View Update(MVU) 패턴
  • Model, View, Command, Update 함수 4가지 핵심 요소
  • UI가 모델을 직접 조작할 수 없는 단방향 데이터 흐름
  • 명확한 책임 분리로 버그 감소 및 테스트 가능성 향상

:pushpin: NetEscapades.EnumGenerators 최근 업데이트: [EnumMember] 지원, Analyzers, 버그 수정

  • 저자: Andrew Lock (.NET Escapades 블로그 운영자)
  • 태그: #sourcegenerator #enum #performance

주요 내용

  • v1.0.0-beta.16 주요 업데이트: [EnumMember] 속성 지원
  • 새로운 분석기: NEEG001-003 (이름 충돌, 제네릭 타입, 중복 값)
  • C# 예약어 식별자 올바른 이스케이프 처리
  • 기본 ToString() 대비 수천 배 빠른 성능

:pushpin: C#에서 Avalonia를 위한 DSL 생성하기

https://medium.com/@krendelia2021/creating-a-dsl-in-c-baf20e1ef9cd

  • 저자: krendelia2021
  • 태그: #dsl #compiler avalonia

주요 내용

  • Avalonia 기반 React-like UI 라이브러리 Akbura 소개
  • C#에서 DSL 생성하는 시리즈 시작
  • Akbura 자체와 내부 C# 코드 두 레벨 파싱
  • Red-Green Trees 개념 기반 구문 분석

:bookmark_tabs: 가벼운 읽을거리

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


Windows 11, WinUI 3로 구축된 현대적 Windows Run (Win+R) 도입 예정

  • WinUI 3 기반으로 재구축된 선택적 Windows Run 대화상자
  • Fluent Design 원칙, 둥근 모서리, 다크 모드 지원
  • Advanced Settings 범주로 개발자 중심 향상 암시

FastCloner 오픈소스 공개

  • 가장 빠르고 신뢰할 수 있는 .NET deep cloning 라이브러리
  • 오픈소스로 공개

ABP.IO Platform 10.0 Final 출시!

  • ABP.IO Platform 10.0 stable 버전 공식 출시
  • ABP Studio 또는 ABP CLI로 기존 솔루션 업그레이드 가능
  • v9.x에서 업그레이드 시 Migration Guide 참고 필요

C#에서 문자열을 안전하게 연결하는 방법

  • SQL Injection 등 실제 보안 사고 사례 기반 가이드
  • 2008 Heartland Payment Systems, 2009 RockYou.com 사례
  • 안전한 문자열 연결 방법과 성능 고려사항

.NET에서 예외 처리 및 발생: 개발자를 위한 완전한 가이드

  • .NET 런타임의 예외 처리 메커니즘부터 고급 패턴까지
  • Try-catch-finally 패턴과 모범 사례
  • throw; 사용한 스택 추적 보존, Serilog 구조화된 로깅
  • 예외 필터, AggregateException, 중앙집중식 미들웨어

초보자가 ASP.NET Core에서 범하는 10가지 흔한 실수

  • DbContext Singleton 주입, appsettings.json 미사용 등
  • [ApiController] 누락, async/await 잘못 사용
  • AddScoped vs AddTransient vs AddSingleton 혼동

.NET 매핑 도구 성능 비교

  • .NET 환경의 다양한 객체 매핑 도구 벤치마크
  • AutoMapper, Mapster 등 성능 비교
8개의 좋아요

async/await에서 실수하기 좋은 부분들을 짚은 포스트는 짧지만 확실한 안티패턴들을 알려주어서 좋네요! sonarqube가 생각나서 찾아보니 마침 이런 부분을 다루어주는 ruleset이 있는 것 같네요 ㅎㅎ

3개의 좋아요

C# 비동기는 항상 어렵죠. concurreny와 parallel을 모두 충족해서 특히 더 어려운 거 같습니다.
항상 비동기 코드가 읽는 순서 대로 실행되지 않는다고 자기 최면을 해야 하는거 같은데요.

링크는 비동기에 대해 이해했다고 생각할 때 마다 다시 읽어 보는 블로그입니다. 마음이 숙연해짐

3개의 좋아요

여기에 언급된 주제 중에서

왜 이 문제가 30라인에서만 발생하는 걸까요? : r/csharp

이 문제는 꽤 재미있네요.

I wrote a cross-platform TUI podcast player in .NET 9 (mpv / VLC / native engine fallback) : r/csharp

이 사람은 대단한거같고…Terminal.Gui 로 만든거군요 ㅋㅋㅋ

1개의 좋아요