한 주 동안 .NET 생태계에서 있었던 주요 이슈와 아티클, 기술 트렌드를 정리해 소개합니다.
(union을 메인 기사로 다룰려고 했는데 누락되어 추가했습니다)
C# 15 Preview에 Union 타입 실험 기능 추가
https://github.com/dotnet/csharplang/blob/main/proposals/unions.md
출처: Microsoft / Julien Couvreur
태그: #csharp15 #dotnet11 #uniontypes #patternmatching
주요 내용
- C# 15 초기 preview 기능 중 하나로 Union 타입 실험 기능이 .NET 11 preview3에 병합됨
- union 선언을 통해 (Cat, Dog, Bird) 같은 여러 타입을 하나의 닫힌 집합(closed set)으로 정의 가능
- 기능 안정화 전까지는 preview 상태로 제공되며 정식 릴리즈 전 변경 가능성 존재
- 커뮤니티에서는 “async/await 이후 가장 기대되는 기능”이라는 반응부터, F# 스타일 기능 도입에 대한 다양한 의견이 함께 나타남
C# 문자열이 Dapper에서 SQL Server 인덱스를 조용히 망가뜨리는 방식
- 저자: Kevin W. Griffin
- 태그: #dapper #sqlserver #performance
데이터베이스 Q&A
주요 내용
- Dapper에 익명 객체로
string파라미터를 넘길 때 ADO.NET이 기본적으로nvarchar(4000)로 매핑되는 문제 - DB 컬럼이
varchar일 경우 SQL Server가CONVERT_IMPLICIT를 수행하며 인덱스 탐색 대신 스캔이 발생하는 구조 - 실행 계획에서 암시적 변환이 나타나는 방식과 CPU 사용량 급증 사례
DbString같은 타입 지정으로 파라미터 문자열 타입을 명시하는 해결 방향
DumpLinq로 .NET 메모리 덤프 분석하기
https://medium.com/@anders_pedersen/net-memory-dump-analysis-with-dumplinq-8a7a73f1c136
- 저자: Anders Pedersen
- 태그: dotnet #memorydump #diagnostics #debugging
주요 내용
- 장시간 실행 서비스가 비정상 상태에 빠졌을 때 메모리 덤프를 남겨 증거를 보존하는 이유
- 메모리 덤프를 디버거에서 열어 스레드, 스택 프레임, 지역 변수 등을 확인하는 기본 흐름
- DumpLinq를 사용해 메모리 덤프 안의 객체를 LINQ 스타일로 질의하는 방식
- 재시작 후 사라지는 상태를 덤프로 보존해 원인 분석에 활용하는 운영 관점
.NET 10: System.Text.Json 개선 사항
- 저자: Anthony Giretti
- 태그: dotnet10 #systemtextjson #serialization #performance
주요 내용
- 중복 JSON 속성을 명시적으로 거부할 수 있게 된 변경 사항과
JsonException발생 방식 PipeReader를 직접 받는 역직렬화 경로 추가로 스트림 브릿지 레이어를 줄이는 변화- 기존 수동 옵션 설정 대신 더 엄격한 직렬화 preset을 제공하는 방향
- 입력 검증과 파이프라인 통합 측면에서의 개선 포인트
로컬 개발 환경 구성: 도구, 디버깅, 그리고 핫 리로드
- 저자: Martin Oehlert
- 태그: #azurefunctions dotnet #debugging #hotreload
주요 내용
- .NET 10 isolated worker 기반 Azure Functions를 로컬에서 실행할 때
func.exe와dotnet.exe두 프로세스가 분리되는 구조 - 디버거가 호스트 프로세스에 붙으면 브레이크포인트가 동작하지 않는 원인
local.settings.json이appsettings.json이 아니라 환경 변수로 주입된다는 점- Timer, Queue, Blob 트리거 초기화를 위해 Azurite가 선행 실행되어야 하는 조건
.NET의 펜싱 토큰과 세대 시계: 좀비 리더의 쓰기를 막아라
- 저자: Chris Woodruff
- 태그: #distributed #leaderelection #consistency dotnet
주요 내용
- 리더 선출과 lease만으로는 이전 리더가 기존 DB 연결로 계속 쓰는 zombie leader 문제를 막지 못한다는 점
- 리더십 기간마다 단조 증가하는 fencing token을 부여하는 패턴
- 모든 쓰기에 토큰을 포함시키고 저장소가 stale token을 거부하는 경계 검증 구조
- generation clock으로 shard 또는 group별 증가 값을 발급하는 방식과 의도
우리의 .NET 앱은 메모리를 누수하고 있었고, 한 줄의 코드가 프로덕션을 무너뜨렸다
- 저자: Elanchezhiyan P
- 태그: dotnet #memoryleak #production #diagnostics
주요 내용
- 재시작 후에는 정상화되지만 시간이 지나며 메모리가 꾸준히 증가하는 프로덕션 장애 패턴
- GC 튜닝 문제처럼 보였지만 실제로는 참조가 해제되지 않아 누수가 지속된 사례
- 프로세스 메모리 상태를 확인하기 위한 헬스 엔드포인트와 계측 추가
- OOM kill에 이르기까지의 증상과 누수 원인을 추적하는 경험담
C#으로 .NET 가비지 컬렉터 만들기 - 8부: 내부 포인터
- 저자: Kevin Gosse
- 태그: dotnet #gc #memory #runtime
주요 내용
- mark phase 구현에서 남겨둔 interior pointer 처리를 다루는 연재 8부
- 객체 헤더 이후 필드를 가리키는 내부 포인터의 의미와 일반 참조와의 차이
ScanRoots구현에서GC_CALL_INTERIOR플래그를 처리해야 하는 이유- 이전 연재의 힙 순회, GCDesc 해석, mark/sweep, handles 처리와 이어지는 구조
DuckDB.NET 1.5.0 성능: 쓰기는 최대 40% 더 빠르고 할당은 22% 더 적다
- 저자: Giorgi Dalakishvili
- 태그: #duckdb dotnet #performance #interop
주요 내용
- DuckDB.NET 1.5.0의 성능 개선이 네이티브 라이브러리보다 .NET 레이어 최적화에서 나왔다는 점
DllImport에서LibraryImport로의 이전과 커스텀 마샬러 도입SuppressGCTransition적용으로 매우 짧은 네이티브 호출의 오버헤드를 줄이는 방식- ADO.NET provider와 type converter 최적화, reader 재사용, boxing 제거 등의 변경 사항
읽을거리
왜 나는 Microsoft의 DI 컨테이너를 교체했고 다시 돌아보지 않았는가
- 내장 DI 컨테이너와 DryIoc의 cold start 성능 비교 수치와 고급 기능 차이
- open generic 제약, decorator 순서, conditional registration 같은 시나리오를 함께 다룸
C#에서 프로토타입 패턴 구현하기: 단계별 가이드
- shallow copy, deep copy, copy constructor, prototype manager 같은 구현 선택지 정리
ICloneable, 테스트, 순환 참조, 성능 영향 같은 주의 항목 포함
병렬 코드가 자주 더 느리게 실행되는 이유
- 스레드 관리, 스케줄링, 결과 병합, context switching 같은 병렬화 오버헤드 설명
- 작업량이 작을수록 병렬화 비용이 더 커질 수 있다는 사례 중심 정리
다이어그램 없이 데드락 설명하기
- 두 개의 락 객체를 반대 순서로 획득하는 C# 코드로 데드락 상황 설명
- 요청이 멈추고 CPU는 정상처럼 보일 수 있는 운영 증상 언급
왜 이렇게 많을까, Microsoft?
- WinForms, WPF, WinUI 3, MAUI, Blazor Hybrid, WebView2 등 Windows UI 선택지의 역사 정리
- Windows와 다른 운영체제의 UI 툴킷 구성을 비교하며 생태계 맥락 설명
Microsoft가 마침내 Windows 11의 Print Screen 키를 더 세밀하게 제어하게 한다
Make Print Screen key yieldableGroup Policy로 서드파티 앱이 캡처 키를 가로챌 수 있는 변경- 정책 활성, 비활성, 기본값 상태에 따른 동작 차이와 설정 경로 정리
30년
- 찰스 페졸드의 30년 금주를 맞은 개인적 회고와 반복적으로 꾸는 술 관련 꿈의 묘사
- 기술 글이 아니라 회복 경험을 성찰하는 에세이
