.net
-
[ASP.NET Core] Serilog 에서 미들웨어를 이용한 모든 Request 로그 기록 설정.NET/ASP.NET Core 2021. 10. 12. 23:10
Serilog를 통해 모든 Request에서 로그기록을 하고 싶을 경우 LogContext와 미들웨어를 이용해야 한다. * 사실 Serilog는 RequestID property가 기본제공되므로 미들웨어 없이 {RequestId}를 써도 되긴한다. LogContextMiddleware.cs public class LogContextMiddleware { private readonly RequestDelegate _next; public LogContextMiddleware(RequestDelegate next) { _next = next; } public Task Invoke(HttpContext context) { using (LogContext.PushProperty("TraceId", context..
-
[.NET] 유효성(Validation)검사 코드를 간결하게 작성하는데 도움주는 GuardClauses 소개.NET/유용한 라이브러리 2021. 9. 25. 22:03
프로그램 개발을 진행하다보면 특정 변수값에 대해 유효성검사를 해야 한다. 특정 유효성은 개발하는 시스템에 관련된 사항에 따라 직접 작성해야 하지만 일반적으로 null이면 안되는데, null이 들어오거나, 0이 들어오면 안되는데 0이 들어오는 문제에 대해선 어느 프로그램을 개발해도 공통적으로 처리해야할 검사코드가 될 것이다. 이번에 소개할 라이브러리는 일반적인 상황에 대한 유효성검사 코드 작성을 간결하는데 도움을 주는 GuardClauses 란 라이브러리이다. 아래 코드는 GuardClauses 를 적용하기 전 소스코드이다. Order 라는 객체를 생성하는데, 유효하지 않은 매개변수를 받아 처리하려고 한다. class Program { static void Main(string[] args) { try {..
-
[ASP.NET Core] 기본 로그를 지우고 Serilog만 나오도록 수정하는 방법.NET/ASP.NET Core 2021. 9. 22. 23:03
NET5 기준으로 ASP.NET Core 프로젝트를 생성하면 Program.cs 파일에 CreateHostBuilder() 함수가 기본 생성된다. 해당 함수에는 Host.CreateDefaultBuilder(args) 및 ConfigureWebHostDefaults() 함수를 호출하여 웹 서비스에 필요한 기본적인 설정사항등을 별도 작업없이 추가해주는데 이때 MS에서 기본제공하는 Log 제공자(Provider)도 추가된다. Serilog 와 같이 서드파티 제공자를 사용하고 싶다면 CreateHostBuilder를 아래와 같이 수정하여 MS 기본 제공 Log 공급자를 제거해야 한다. public static IHostBuilder CreateHostBuilder(string[] args) => Host.Cr..
-
[.NET] Dependency Injection(DI)를 쓰는 이유.NET/개념 및 유용한 팁 2021. 8. 7. 12:46
ASP.NET Core는 기본적으로 DI가 적용된 구조로 생성된다. 그런데 왜 DI 가 적용되어있을까? 인터넷에서 보면 다음과 같은 이유로 DI가 좋다고 되어있다. 코드의 재사용성을 높인다. 결합도를 낮춘다. 여러 블로그글을 보면 위 내용들이 많다. 그런데 왜 재사용성이 높아지고, 결합도가 낮아지는 건지 와닿진 않는다. 그리고 굳이 DI를 써야하나라는 의구심이 들기도 한다. 솔직히 필자도 DI 가 좋은 이유에 대해 제대로 설명해보라고하면 못할 듯 싶다. 그래서 아래 간단한 실습을 통해 DI가 어떻게 동작하며, 왜 좋은지 포스트로 남겨보고자 한다. 1. 프로젝트 생성 "WhyUseDI" 라는 이름의 솔루션을 생성하고, "WhyUseDI.API" webapi 와 "Services" classlib 프로젝트를..
-
[ASP.NET Core] AddController(), AddMvc(), AddControllersWithViews(), AddRazorPages() 차이점.NET/ASP.NET Core 2021. 6. 26. 11:33
ASP.NET Core에서 MVC 템플릿으로 프로젝트를 생성하면 Startup 클래스의 ConfigureServices 메소드에서AddControllersWithViews()를 확인할 수 있다. public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); } 함수 이름으로 유추해봐도 알 수 있듯이, MVC 모델의 Controller와 View를 ASP.NET Core에서 사용하겠다는 뜻을 의미한다. 그런데 AddControllersWithViews 가 아닌, AddMVC를 사용해도 문제없이 동작하는 것을 확인할 수 있다. 이 메소드들은 공통적으로 MvcServiceCollectionExtens..
-
[.NET Tools] 웹 기반 dotnet playground 서비스 sharplab.io.NET/유용한 라이브러리 2021. 6. 5. 19:05
https://sharplab.io/ SharpLab Code [connection lost, reconnecting…] sharplab.io 웹에서 .NET 기반 소스코드를 작성하고 결과를 바로바로 확인할 수 있는 웹 서비스이다. 코드를 작성하여 단순 결과를 보는 것 뿐만 아니라 Debug, Release시 최적화되는 소스코드 및 중간언어(IL)로 변환되었을때 어떻게 되는지 확인할 수 있다. 기존에 Visual Studio 에선 해당 소스코드가 boxing과 같이 성능저하 문제가 발생할만한 요소가 있는지 확인하기위해 visual studio 와 함께 설치되는 Ildasm.exe 도구를 써서 확인해야하는 수고로움이 있었다. SharpLab에선 바로바로 확인이 가능하다. 코드를 작성하면 URL에 파라메터가..
-
[C# 8.0] 당신의 Substring() 범위 연산자로 대체되었다..NET/개념 및 유용한 팁 2021. 4. 17. 16:38
인터넷에서 방황하다 C# 배열에 대한 배열에 dot(.)을 두개 써서 배열의 범위 일부를 가져올 수 있는 범위 연산자를 확인하게 되었다. C# 8.0 부터 나온 건데 이제야 알게 되었다. 범위 연산자를 알기 전까지, 문자열의 지정된 index 에서 분해할 단어의 길이만큼 잘라 표현해야할 때 Substring 함수를 사용했었다. Console.WriteLine("Substring 기존 방식".Substring(0, 9)); 그러나 C# 8.0 부터는 아래와 같이 사용할 수도 있다. Console.WriteLine("Substring_C# 8부터 사용가능한 방식"[0..9]); 문자열 때문에 소스길이가 더 길어보이는데 실질적으론 .Substring(0,9) -> [0..9]가 된것이므로 코드가 줄어든게 맞다..
-
[ASP.NET Core] 개선된 다운로드 예제(feat. ASP.NET을 쓰지 말아야할 이유 1 Stack 추가).NET/ASP.NET Core 2021. 4. 15. 23:02
예전에 ASP.NET Core로 일반적인 파일 다운로드 기능 구현 예제를 만든적이 있었다. (ddochea.tistory.com/76) 해당 예제에선 파일을 다운로드할 때 byte[] 버퍼에 담아 전달하도록 작성했었는데, 그 이유는 크기가 큰 파일을 전달할때 생기는 메모리 사용 문제점, 그리고 이를 해결하기위한 스트리밍 방법인 "HTTP range requests" 예제를 구현하고 비교하는 포스트를 작성하기 위한 일종의 큰 그림(?) 이었다. "HTTP range requests"에 관한 정보는 아래 링크에서 확인할 수 있다. developer.mozilla.org/ko/docs/Web/HTTP/Range_requests HTTP range requests - HTTP | MDN HTTP range re..