주말 아침 - 주간 닷넷 #8


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


:pushpin: Microsoft, Visual Studio Code용 IntelliCode 지원 중단

  • 저자: Paul Krill
  • 태그: #vscode #intellicode #deprecation github-copilot

주요 내용

  • IntelliCode, IntelliCode Completions, IntelliCode for C# Dev Kit, API Usage Examples 확장 지원 종료
  • 버그 수정 및 지원 즉시 종료, 별표 표시 자동완성 제거
  • GitHub Copilot Chat을 대안으로 권장
  • Roslyn 언어 서버 기반 기본 완성 기능은 유지

:pushpin: .NET 크로스플랫폼 대결: MAUI vs Uno vs Avalonia

  • 저자: Aaron LaBeau
  • 태그: maui #uno avalonia #crossplatform #desktop

주요 내용

  • MAUI: macOS에서 Mac Catalyst 사용으로 성능 저하, Linux 미지원, 불안정성 지속
  • Uno Platform: 툴링 우수하나 프로젝트 구조 복잡, Linux 프로덕션 준비 미흡
  • Avalonia: SukiUI 통합, 우수한 문서화, Parcel 패키징 솔루션으로 배포 자동화
  • Microsoft의 UI 프레임워크 포기 역사(Silverlight, UWP, Xamarin)에 대한 신뢰 문제 언급

:pushpin: SharpIDE - Godot으로 만든 모던 크로스플랫폼 .NET IDE

SharpIDE - A Modern, Cross-Platform IDE for .NET built with Godot! : r/godot

  • 저자: MattParkerDev
  • 태그: #ide #godot dotnet #opensource #crossplatform

주요 내용

  • .NET과 Godot으로 구축된 모던 크로스플랫폼 오픈소스 IDE
  • 코드 완성, 코드 액션/리팩토링, 심볼 정보 및 네비게이션 기능
  • Razor 구문 하이라이팅, 빌드/실행 기능 지원
  • Roslyn 기반 언어 분석, GitHub 3.1k 스타, MIT 라이선스

:pushpin: C# 함수형 프로그래밍 - 모나드는 항상 여기 있었습니다!!

  • 저자: Simon Painter
  • 태그: #functional #monad csharp #pattern

주요 내용

  • 모나드: 실패할 수 있는 함수를 안전하게 실행하는 환경 제공
  • 모나드 3법칙: Identity, Composition, Flattening 설명
  • C#의 Enumerable이 진정한 모나드, Task<T>는 거의 충족
  • Result 모나드(Success/Failure) 커스텀 구현 예제

:pushpin: Jordan의 .NET 고급 HttpClientFactory 가이드

https://medium.com/@jordansrowles/jordans-net-guide-to-advanced-httpclientfactory-68041522eb3d

  • 저자: Jordan Rowles
  • 태그: #httpclient #httpclientfactory #polly #resilience

주요 내용

  • DelegatingHandler로 커스텀 HTTP 미들웨어 체인 구성
  • Polly 통합: 지수 백오프 재시도, 서킷 브레이커, 타임아웃, 벌크헤드 격리
  • SocketsHttpHandler로 연결 풀링, HTTP/2 멀티플렉싱, SSL/TLS 설정

:pushpin: .NET에서 Redis 및 Redis Stack 사용하기

https://medium.com/@kerimkkara/using-redis-and-redis-stack-with-net-a-practical-production-ready-guide-b2a7e2e1081f

주요 내용

  • Redis: RAM 기반 저장으로 서브밀리초 지연시간 제공
  • Redis Stack: RedisJSON, RediSearch, RedisTimeSeries, 벡터 검색 모듈 번들
  • Cache-aside 패턴: 캐시 확인 → DB 조회 → TTL과 함께 캐시 저장
  • 베스트 프랙티스: 싱글톤 ConnectionMultiplexer, TTL 필수, 일관된 키 네이밍

:pushpin: 소스 생성기: 보일러플레이트 제거와 시작 속도 향상

https://medium.com/net-code-chronicles/dotnet-source-generators-overview-fa159d840bee

  • 저자: Aliaksandr Marozka
  • 태그: #sourcegenerators #codegen #roslyn #performance

주요 내용

  • Source Generator: 컴파일 시 Roslyn 플러그인으로 C# 파일 자동 생성
  • 런타임 리플렉션 대체로 시작 시간 개선, 타입 안전성 강화
  • Attribute 마킹 → 구문 트리 검사 → partial 클래스 생성 흐름
  • 활용: DTO 매퍼, ToString, Equals/GetHashCode, DI 등록, API 클라이언트

:pushpin: Async는 마법이 아니다

https://medium.com/@erhan355/async-isnt-magic-7d8314e8d9b0

  • 저자: erhan355
  • 태그: async #await #statemachine #asynclocal

주요 내용

  • 컴파일러는 async 메서드를 상태 머신으로 변환하여 코드 분할
  • await 없는 async 메서드는 동기적으로 실행되어 Task.CompletedTask 반환
  • AsyncLocal<T>로 논리적 async 흐름별 ambient 설정 저장
  • Hangfire 백그라운드 작업에서 동시 실행 설정 분리 예제

:pushpin: C#에서 yield return으로 메모리 90% 절감하는 방법

https://blog.stackademic.com/how-yield-return-reduces-memory-by-90-in-c-a03796630cb7

  • 저자: Dominika Sikorska
  • 태그: csharp #yield #memory #performance #lazyevaluation

주요 내용

  • yield return으로 지연 평가(Lazy Evaluation) 구현, 상태 유지 Iterator 생성
  • 50만 건 레코드 처리 시 4GB → 80MB 메모리 사용량 감소 사례
  • 대용량 파일 라인별 읽기로 전체 로드 방지
  • 주의: 다중 열거 시 메서드 재실행, 필요시 ToList() 명시적 실체화

:pushpin: .NET 클린 아키텍처: 가이드

Clean Architecture in .NET: The Foundation That Changes Everything
Clean Architecture in .NET: Building the Domain & Application Layers
Clean Architecture in .NET: Infrastructure & Presentation Layers
Clean Architecture in .NET: Testing, Best Practices & Final Thoughts

  • 저자: Compile & Conquer
  • 태그: #cleanarchitecture #architecture dotnet #layered

주요 내용

  • 핵심 원칙: 의존성은 안쪽으로만, 내부 레이어는 외부를 알지 못함
  • 4개 레이어: Domain(순수 비즈니스 로직), Application(유스케이스), Infrastructure(구현), Presentation(HTTP 변환)
  • 이점: 테스트 용이성, 기술 스왑 유연성, 명확한 책임 분리
  • MediatR 필수 아님, Onion/Hexagonal과 동일하지 않음

:pushpin: nanoFramework에 제네릭 도입

  • 저자: José Simões
  • 태그: #nanoframework #generics #embedded #iot

주요 내용

  • .NET nanoFramework에 제네릭 지원 퍼블릭 프리뷰 발표
  • 메타데이터 테이블(TypeSpec, MethodSpec, GenericParam) 및 PE 포맷 v2.0 변경
  • Span<T>, ReadOnlySpan<T>, List<T>, Stack<T> 등 새로운 제네릭 타입 추가
  • 프리뷰 펌웨어, NuGet, VS 확장 설치 필요

:bookmark_tabs: 가벼운 읽을거리


C# 패턴 매칭: 입문 가이드

  • Switch Expression, Type/Property/Relational Pattern 기초 설명
  • 실제 e-commerce 배송비 계산 예제로 실무 적용법 설명

나만의 MSBuild SDK 만들기

  • MSBuild SDK는 .props와 .targets 파일을 포함한 NuGet 패키지
  • Sdk/ 폴더 구조와 Sdk.props, Sdk.targets 파일 구성 방법

Blazor 엔터프라이즈 앱을 위한 MVVM vs MVU 비교

  • MVVM: ViewModel이 속성/명령 노출, INotifyPropertyChanged 기반 상태 관리
  • MVVM은 WPF/XAML 경험 팀에 적합, 세밀한 프로퍼티 바인딩에 강점

Console.WriteLine 없이 재미있게

  • .NET이 C 라이브러리(libc)를 로드하여 콘솔 출력 처리하는 원리 탐구
  • DllImport로 네이티브 함수 호출, 크로스플랫폼 동작 확인

NuGet 중앙 패키지 관리(CPM) 구현

  • Directory.Packages.props로 의존성 단일 소스 관리
  • 대규모 솔루션과 모노레포에서 버전 일관성 유지

Windows 11의 새로운 실행 기능을 사용해 본 결과, 당분간은 기존 실행을 대체하지는 못한다

  • WinUI 기반 모던 Run 다이얼로그 개발 중
  • Browse 기능 제거, 위치 고정(이동 불가) 제한
7개의 좋아요

SharpIDE는 계속 발전했으면 좋겠습니다. SharpDevelop 이후로 오랫만에 보는 무료 IDE 프로젝트네요!

4개의 좋아요

MVU 는 상당히 흥미롭군요.

2개의 좋아요