본문 바로가기

C#23

.Net - Easy to make log file Console App 콘솔 앱에서 로그파일을 만들수 있는 방법은 많다. 직접 로그 용도의 함수을 만들어서 파일에 쓰는 방식으로 할 수 있지만, 매번 반복적으로 개발을 해야 한다면, 라이브러리를 쓰는게 가장 효율적일 것이다. 여기에서는 .NET core 에서 많이 사용되는 Serilog라는 라이브러리를 이용하여 쉽게 Log File을 만들수 있는 방법을 소개하도록 하겠다. 먼저 Visual Studio를 실행하여 .Net core 용도의 콘솔 앱을 생성한다. 1. Serilog 추가 그리고 Serilog.Sinks.RollingFile을 추가하도록 하자. 현재는 Serilog.Sinks.File 로 포함되어 관리되고 있으므로, Serilog.Sinks.File 을 설치해도 무방하고, RollingFile 역시 동작에 문제가 없.. 2020. 12. 19.
.NET - Download file from HttpClient/WebClient Http를 이용해서 파일을 다운로드해야 하는 상황에서 2가지으로 정리하여 구성할수 있다. 하나는 API를 이용하여 다운로드하는 상황, 다른 하나는 URL을 기반으로 다운로드를 하는 상황일 것이다. 해당 상황에 맞는 코드를 정리해 본다. 1. API를 이용한 다운로드 아래 코드는 API의 filename인자로 전달하여 파일을 다운로드 하는 방안이다. FileInfo를 통해 저장할 파일의 전체 경로를 미리 구성해 놓고, 정상적인 응답이 있다면, Stream을 통해 파일을 생성하는 코드이다. using System; using System.IO; using System.Net.Http; namespace httpdownload { class Program { static async System.Threadin.. 2020. 12. 15.
C#7.0 - switch에 유연한 패턴 일치 사용 switch는 용어와 맞게 중복되지 않는 조건, 즉 유일 조건을 비교하는 용도로 사용한다. 그런데 만약 문자열의 특정 조건으로 switch를 사용하고 싶다면 어떨까? C#7.0(.NET core 3.1) 에서는 문자열 검색 조건을 switch에서 사용할 수 있다. 방법은 when 키워드를 이용해서 조건의 추가가 가능하다. 사용 방법은 다음과 같다. string mesg = "allmnettest"; switch(mesg) { case string b when b.StartsWith("test"): Console.WriteLine("case2"); break; case string a when a.StartsWith("test"): Console.WriteLine("case1"); break; defaul.. 2020. 12. 10.
.NET - 코드 난독화 .NET 코드는 디컴파일러를 통해 쉽게 복호화가 가능하다. 필자 역시 .NET을 이용하여 코드를 많이 작성하는데, 간혹 비밀키가 들어갔거나 암호화가 필요할 때 난독화를 항상 고민한다. .NET 에서 사용할 수 있는 난독화 도구는 필자 기준으로 추천한다면, .NET기준 현재 유용한 도구는 Eazfuscator.NET이다. .NET 기준 디컴파일러로 가장 많이 손쉽게 이용되는 ILSPY를 통해 Eazfuscator.NET 을 이용하여 암호화 전/후를 비교해 보면 쉽게 차이를 알 수 있다. ILSPY https://github.com/icsharpcode/ILSpy/releases/tag/v6.2.1 Release ILSpy 6.2.1 · icsharpcode/ILSpy This is a bugfix rele.. 2020. 12. 8.
.NET - HOW to use Parallel For, ForEach If you are running .NET-based development and multiprocessor, you can improve performance by parallel processing. For For, ForEach, which is often used for iterative data processing, you can experience up to 50% improvement in performance. Here, let’s compare it through ForEach. A typical ForEach statement is shown foreach (var item in Queue) { //loop code insert } Add using System.Threading.Tas.. 2020. 12. 2.
.NET - Semaphore 초기값? initialCount, maximumCount Semaphore는 기본적으로 자원을 공유해서 사용해야 하는 멀트 스레드 환경에서 사용된다. 자원이나 실행에 대한 접근 제어가 필요할 때 사용할 수 있다. .NET 기준으로 lock 개념과 유사하며, 큰 차이점이라면, lock은 하나의 접근만 가능하지만, Semaphore는 지정한 개수만큼 접근할 수 있다. 이 지정한 개수는 Semaphore를 선언시점에 기본적으로 2가지 값을 설정해 주어야 한다. initialCount, maximumCount 이다. maximumCount 는 최대 접근 가능 개수 라고 할 수 있다. 만약 maximumCount를 3으로 지정한 경우 3개의 까지의 접근을 허용 한다는 것이다. 그리고 initialCount는 Semaphore를 선언하는 시점에 사용가능한 갯수라고 생각하.. 2020. 12. 1.
.NET - Thread Start with Argument or Data 요청을 처리하면서 병렬로 작업을 실행해야 하는 이슈가 있었다. 인터넷에 확인 Backgraoud Task 방식이 있지만, 이는 별도의 작업을 지속적으로 실행하는 별도의 서비스를 생성하는 방안으로, 모니터링등의 지속 실행작업에 용이하고 특정 요청시점에 실행하기에는 Thread 를 통한 작업 실행이 알맞을 것이라는 생각이 들었다. 쓰레드 실행시 가장 많이 찾아본 내용은 바로 인자, 데이터 전달이였다. 작업을 처리하기 위해서 실행하는 스레드이기 때문에 처리할 데이터나 정보를 스레드에 전달해야 하는데, 인터넷에서 찾아본 내용중 가장 바른? 방법이외에도 존재하지만, 내가 읽기에 제일 가독성이 높은 코드로 데이터 전달 방안으로 정리해 보았다. 클래스 자체에 전달 데이터 정의 스레드를 통해 진행할 작업을 위해 먼저 .. 2020. 11. 30.
.Net - EF 'Entity type 'xxx' has composite primary key defined with data annotations. To set composite primary key, use fluent API.' 금일 Database 의 PK(Primary Key)를 2개 지정하여 사용하다가 이와 같은 오류를 마주하였다. 이 오류는 .Net Entity Framework에서 Primary Key 2개가 실제 EF에서 적절하게 매핑이 되지 않아서 발생한다. 아래 그림과 같이 Data Model에 2개의 키를 지정해 준 상황에 발생하는 오류라고 할 수 있다. [Key] [Required] public string testkey { get; set; } public string version { get; set; } public string type { get; set; } [Key] [Required] public string realkey { get; set; } 따라서 Entity 생성 시점에 PK가 2개임을 알.. 2020. 11. 26.
Net - System.Data.SqlTypes.SqlNullValueException: Data is Null .Net EntityFramework를 이용해서 사용하던중 발생하던 오류로 해결 방안을 찾아 메모해 둔다. 데이터를 입력하고 웹을 통해 조회하던중 아래와 같은 오류가 발생하였다. System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values. 이 오류으 원인은 DB Content에 설정된 [Required] 선언에 의해 조건이 맞지 않아 발생하게 된다. .Net EntityFramework는 [Required]로 선언한 필드에 대해서는 Null을 허용하지 않는데, 실제 데이터중에 Null로 설정된 데이터가 존재하기 때문에 발생한다. 혀결 방법으로는 Database에.. 2020. 11. 17.
.Net/core - make service for auto-start when boot on Ubuntu youtu.be/1akt--pYvfs 오늘은 Ubuntu 서버에 실행한 .Net/Core Application을 서비스로 등록해 상태를 관리하거나 서버 재시작시 자동으로 실행이 가능하도록 만들어 보자. 1. Prepare make Service 서비스를 만들기 전에 체크해야 하는 부분이 3가지가 있다. 1. Check to path of dotnet command 2. Check to path about application of dotnet 3. Test to running for user permission .Net/Core를 실행할 때 필수로 필요한 요소가 위 3가지 이다. 먼저 dotnet command가 설치된 위치를 확인하자. 기본적으로 패키지 설치를 진행했다면, Ubuntu기준으로 /usr/.. 2020. 11. 12.