Microsoft .NET/C#
-
[C#] DateTime vs DateTimeOffset, 서버 시간은 UTC로 관리하기Microsoft .NET/C# 2026. 11. 10. 01:04
서버에서 시간을 다루다 보면 9시간 차이(UTC/KST)로 하루가 밀리는 문제를 만납니다. 저장·전송은 UTC로, 표시만 현지 시간으로 하는 규칙입니다.절차DateTime의 두 가지 KindDateTimeOffset저장 규칙표시 규칙 1. DateTime의 Kindvar local = DateTime.Now; // Kind = Local (서버 시간대 따름)var utc = DateTime.UtcNow; // Kind = Utcvar none = new DateTime(2026,1,1); // Kind = UnspecifiedDateTime.Now는 서버 시간대를 따릅니다. 한국 서버에서 개발하고 미국 서버에 배포하면 14시간 차이가 납니다.2. Dat..
-
[C#] async/await 데드락 원인과 ConfigureAwait 정리Microsoft .NET/C# 2026. 11. 10. 00:55
UI 앱이나 레거시 코드에서 .Result·.Wait()를 쓰다가 화면이 멈추는 데드락, 그리고 ConfigureAwait(false)가 필요한 이유입니다.절차증상원인: 동기 대기와 컨텍스트해결: async all the way라이브러리에서는 ConfigureAwait(false) 1. 증상// WinForms/WPF 버튼 클릭 핸들러var data = GetDataAsync().Result; // 여기서 멈춤(응답 없음)예외도 없이 그대로 멈춥니다. 디버거로 보면 WaitForSingleObject에서 대기 중입니다.2. 원인await는 기본적으로 원래 SynchronizationContext(UI 스레드)로 돌아오려고 합니다. 그런데 UI 스레드는 .Result에서 이미 블로킹 중이라 돌아갈 곳이..
-
[C#] HttpClient 재시도, IHttpClientFactory와 표준 리질리언스 정책Microsoft .NET/C# 2026. 11. 10. 00:50
외부 API 호출이 가끔 실패할 때 재시도는 필수입니다. .NET 8에서는 Microsoft.Extensions.Http.Resilience로 표준화된 정책을 붙일 수 있습니다.절차패키지 설치IHttpClientFactory 등록정책 세부 조정직접 구현하는 경우 1. 패키지dotnet add package Microsoft.Extensions.Http.Resilience2. 기본 등록builder.Services.AddHttpClient("api", c =>{ c.BaseAddress = new Uri("https://api.example.com"); c.Timeout = TimeSpan.FromSeconds(10);}).AddStandardResilienceHandler();AddStanda..
-
[C#] record 타입 정리, class와 차이와 with 식Microsoft .NET/C# 2026. 11. 10. 00:42
C# 9에서 추가된 record를 실무에서 쓸 때 필요한 부분만 정리했습니다.절차class와의 차이값 비교와 with 식Deconstruct와 패턴 매칭주의할 점 1. class와의 차이// 한 줄로 값 객체 정의public record UserDto(int Id, string Name);// 위 한 줄이 아래를 자동 생성합니다public class UserDto{ public int Id { get; init; } public string Name { get; init; } public UserDto(int id, string name) => (Id, Name) = (id, name); // 값 기반 Equals, GetHashCode, ToString}init 접근자라 생성 후에..
-
[C#] TaskCanceledException과 OperationCanceledException, HttpClient 타임아웃 구분Microsoft .NET/C# 2026. 11. 10. 00:33
HttpClient 요청이 타임아웃됐는데 로그에는 "작업이 취소되었습니다"로만 남아 원인을 못 찾는 경우가 많습니다. 두 예외의 차이와 구분 방법입니다.절차증상 확인원인: .NET 5 이후 타임아웃도 취소로 처리구분: InnerException이 TimeoutException인지 확인타임아웃과 사용자 취소 분리 처리 1. 증상System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Net.Http.HttpClient.HandleFailure(Exception e, ...)내가 취소한 적이 없는데 취소 예외가 올라와서 서버 문제인지 코드 문제인지 헷갈립니다.2. 원인HttpClient의 기본 타임아웃(100초)이 지나면 내..
-
[C#] string 타입 형식지정Microsoft .NET/C# 2021. 10. 15. 14:31
public class Member { public string Id { get; set; } // 암호 형식 지정 [DataType(DataType.Password)] public string Pw { get; set; } // 이메일 형식 지정 [DataType(DataType.EmailAddress)] public string Email { get; set; } // 날짜 형식 지정 [DataType(DataType.Date)] public DateTime Birthday { get; set; } // Custom - 사용자 지정 데이터 유형을 나타냅니다. // DateTime - 시간의 순간을 나타내며, 날짜와 시간으로 표현됩니다. // Date - 날짜 값을 나타냅니다. // Time - 시간 ..
-
[C#] Thread, Thread 인자 전달, BeginInvoke, Invoke 복붙용Microsoft .NET/C# 2021. 3. 17. 11:05
Thread Thread th = new Thread(new ThreadStart(functionSample)); th.Start(); private void functionSample() { } Thread 인자 전달 // Type - 1 Thread th = new Thread(() => functionSample("전자기린", 29)); th.Start(); private void functionSample(string name, int age) { } // Type - 2 Thread th = new Thread(new ParameterizedThreadStart(functionSample)); th.Start("전자기린"); private void functionSample(object _nam..
-
[C#] ColorDialog (색상 선택 컨트롤, 다이얼로그)Microsoft .NET/C# 2020. 7. 14. 18:49
//색상 선택 다이얼로그 //참조 추가 : System.Windows.Forms //참조 추가 : System.Drawing //참조 추가 : System.Windows.Media using (System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog() { AllowFullOpen = true, FullOpen = true}) { if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { System.Windows.Media.Color color = new System.Windows.Media.Color() { A = colorDialog.Co..