본문 바로가기
반응형

프로그래밍/C#140

C# 실무에서 사용하는 전역 JSON 옵션 설정 실무에서 전역 JSON 옵션 설정하기C# 프로젝트를 진행하면서 JSON을 사용한다면 JSON 옵션 설정이 파편화되어있어서 여기저기서 다르게 Serilaize/Deserialize 돼서 괴로웠던 경험들이 한 번쯤은 있을 것이다. 이제 이렇게 파편화된 설정들이 프로젝트 초기에는 괜찮지만 코드량이 늘어나고 복잡도가 올라가면 컨트롤하기 힘들어지는 순간이 온다. 이때가 바로 전역으로 JSON 옵션을 설정해야 하는 시기이다.Program.cs에서 AddJsonOption() 설정AddJsonOption() 매서드를 통해서 옵션을 설정하면 전역적으로 해당 옵션이 적용된다.Controller에서 기본 응답var builder = WebApplication.CreateBuilder(args);builder.Service.. 2025. 4. 28.
C# record에 대해서 알아보자 record 사용 예제C# 9.0에서 추가값 중심의 불변성(Immurable) 객체public record GiveItemRequest(int itemId, int itemCount);C# 레코드(record) 타입 문법을 사용한 불변(Immutable) 데이터 모델을 정의한다.간단히 말하자면 요청을 표현하는 데이터 전용 객체(DTO)를 아주 간결하게 표현한 것이다. 위에 코드를 풀어서 작성해 보자면, 이러한 형태가 된다.public class GiveItemRequest{ public int itemId { get; init; } public int itemCount { get; init; } public GiveItemRequest(int itemId, int itemCount) =>.. 2025. 4. 26.
Entity Framework에서 [NotMapped] 속성 [NotMapped]란?해당 어노테이션이 들려있다면 이는 EF의 모델과 데이터베이스 간 매핑 대상에서 제외한다는 뜻이다.DB 테이블에는 존재하지 않음EF가 이 속성을 INSERT/SELECT/UPDATE에 포함하지 않음계산용, 임시 상태 저장용, DTO 전용 속성등으로 사용된다.[NotMapped]public SomeType SomeProperty { get; set; }대표적인 사용 예시FirstName, LastName은 각각 string 컬럼으로 DB에 생성되지만 FullName은 DB에 생성되지 않는다.코드에서 자유롭게 사용되고 특정한 용도로 활용된다.public class User{ public string FirstName { get; set; } public string LastN.. 2025. 4. 26.
C# is 패턴 매칭(Pattern Matching)에 대해서 알아보자 is 패턴 매칭C# 패턴 매칭(Pattern Matching)은 "값의 타입이나 구조를 검사하면서 동시에 추출" 할 수 있게 해주는 기능이다.타입 체크 + 캐스팅을 한 번에 실행is not 패텀 매칭은 C# 9.0 이상에서 사용 가능is 패턴obj가 string 타입이면 true동시에 s라는 이름으로 형변환된 값을 바로 사용 가능if (obj is string s){ Console.WriteLine($"문자열 길이: {s.Length}");}is not 패턴obj가 string 타입이 아니면 true아닐 경우에만 countryString 사용이 가능하다.var country = "";if (country is not string countryString){ // country가 문자열이 아니면.. 2025. 4. 26.
JWT를 활용해서 C# 서버에서 사용자 인증 처리하기 기본 흐름 요약클라이언트 → Authorization: Bearer ↓JwtBearer 미들웨어 ↓토큰 유효성 검사 (서명, 만료, Issuer, Audience 등) ↓성공 시 ClaimsPrincipal 생성 → HttpContext.User 에 주입클라이언트 JWT 생성 예제 코드public string GenerateJwtToken(string userId){ var claims = new[] { new Claim("sub", userId) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("super-secret-key-here")); var creds = n.. 2025. 4. 23.
ASP.NET Core HTTP 요청 처리 흐름 알아보기 ASP.NET Core 요청 처리 흐름 기본 구조ASP.NET Core 미들웨어(Middleware) 구조는 파이프라인 기반이기 때문에, 미들웨어 > 컨트롤러 > 다시 미들웨어로 "되돌아오는 흐름"을 갖는다. 해당 흐름을 더 잘 이해하기 위해서 아래의 그림을 살펴보자. 가장 중요한 부분은 한번 지나갔던 미들웨어로 다시 되돌아온다는 것이다.┌──────────────────────────────┐│ 클라이언트 요청 (HTTP) │└──────────────┬───────────────┘ ▼ [ 미들웨어 1: 요청 처리 전 ] ▼ [ 미들웨어 2: 요청 처리 전 ] ▼ ... 여러 미들웨어 ... .. 2025. 4. 23.