전체 글
-
[ASP.NET Core] Swagger UI에 JWT 인증(Authorize) 추가하기Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 10. 00:58
Swagger UI에서 Authorize 버튼으로 Bearer 토큰을 넣어 테스트하는 설정입니다.절차패키지 설치보안 스키마 등록UI에서 토큰 입력자주 하는 실수 1. 패키지dotnet add package Swashbuckle.AspNetCore2. 보안 스키마 등록builder.Services.AddSwaggerGen(o =>{ o.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.Http, Scheme = "bearer", BearerFormat = "JWT", In = Paramet..
-
[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에서 이미 블로킹 중이라 돌아갈 곳이..
-
[ASP.NET Core] CORS 오류 "blocked by CORS policy" 원인과 설정Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 10. 00:53
브라우저에서 프론트엔드와 API를 따로 띄우면 만나는 blocked by CORS policy 오류의 원인과 최소 설정입니다.절차에러 메시지 확인서버 설정미들웨어 위치자주 하는 실수 1. 에러 메시지Access to fetch at 'http://localhost:5000/api/values' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.CORS는 브라우저가 막는 것이지 서버가 요청을 거부한 것이 아닙니다. 서버 로그에는 200으로 찍히는데 화면에서만 실패하는 이유입니다.2. 서버 설정bui..
-
[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..
-
[ASP.NET Core] 전역 예외 처리, IExceptionHandler와 ProblemDetails (.NET 8)Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 10. 00:47
.NET 8에서 추가된 IExceptionHandler로 예외 응답을 한 곳에서 처리하는 방법입니다. 컨트롤러마다 try-catch를 넣지 않아도 됩니다.절차핸들러 작성등록응답 형식 확인주의할 점 1. 핸들러 작성public class GlobalExceptionHandler : IExceptionHandler{ private readonly ILogger _logger; public GlobalExceptionHandler(ILogger logger) => _logger = logger; public async ValueTask TryHandleAsync(HttpContext ctx, Exception ex, CancellationToken ct) { _logger.L..
-
[.NET] BackgroundService로 주기 작업 만들기, 종료 처리까지Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 10. 00:45
ASP.NET Core에서 주기적으로 도는 작업(정리, 동기화, 알림)을 만드는 가장 단순한 방법인 BackgroundService 정리입니다.절차최소 구현DI 주입 주의정상 종료 처리운영에서 확인할 것 1. 최소 구현public class CleanupWorker : BackgroundService{ private readonly ILogger _logger; public CleanupWorker(ILogger logger) => _logger = logger; protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationReq..
-
[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 접근자라 생성 후에..
-
[EF Core] 마이그레이션 명령 정리, 자주 나는 오류 해결Database 2026. 11. 10. 00:39
EF Core 마이그레이션에서 실제로 쓰는 명령과, 자주 나는 오류 대응을 정리했습니다.절차도구 설치마이그레이션 추가·적용운영 반영 방식자주 나는 오류 1. 도구 설치dotnet tool install --global dotnet-efdotnet add package Microsoft.EntityFrameworkCore.Design설치 후 dotnet ef --version이 안 되면 ~/.dotnet/tools가 PATH에 있는지 확인합니다.2. 마이그레이션 추가와 적용dotnet ef migrations add InitialCreatedotnet ef database update프로젝트가 여러 개면 데이터 프로젝트와 시작 프로젝트를 지정합니다.dotnet ef migrations add AddOrde..