.NET/개념 및 유용한 팁
-
[EF Core] 여러 프로젝트가 참조된 솔루션에서 dotnet ef 명령어 사용시 유의사항정리.NET/개념 및 유용한 팁 2021. 8. 31. 22:22
CleanArchitecture까진 필요없고, 단일 프로젝트 형식은 테스트 케이스 개발에 불편함이 있어 별도 프로젝트 템플릿을 구현하고 있다. 구현하면서 Entity Framework Core를 이용해 Code First 방식으로 DB를 마이그레이션 하는 방법을 다루게 되었는데 뻘짓을 많이 하여 리스트로 정리할겸 포스트를 쓴다. 1. 시작프로젝트에 Microsoft.EntityFrameworkCore.Tools Nuget 패키지가 설치되어 있어야 한다. 설치가 안되어있을 경우, 아래와 같은 오류가 나온다. Your startup project 'Template.WebApi' doesn't reference Microsoft.EntityFrameworkCore.Design. This package is r..
-
[.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 프로젝트를..
-
[.NET] IEnumable에 대한 성능팁.NET/개념 및 유용한 팁 2021. 6. 5. 16:31
매일 수신받는 medium 에서 IEnumable에 대한 유용한 글을 수신받았다. 번역기가 있어 어느정도 이해할 순 있지만 내용이 좀 길어 짧게 정리할 겸 포스트를 쓴다. 1. Count() != 0 보단 Any()를 써라 종종 배열(IEnumable)에 요소가 있는지 여부를 사용할 때, Count() != 0 조건을 사용하는 경우가 많다. 그러나 Count()는 각 요소의 개수를 구하기 위해 아래와 같은 구현으로 동작한다. public static int Count(this IEnumerable enumerable) { var count = 0; using(var enumerator = enumerable.GetEnumerator()) { while (enumerator.MoveNext()) count..
-
[EntityFramework Core] 간단히 알아본 Insert & Update 퍼포먼스 성능비교.NET/개념 및 유용한 팁 2021. 5. 30. 21:48
EntityFramework Core는 Microsoft에서 관리하는 오픈소스 ORM 라이브러리이다. ORM이 없기 전, 과거(라곤 하지만 현재도 유지되고 있다.)에는 쿼리 문자열을 작성하여 조회한 뒤, DataTable로 결과를 받아 처리하는 방식을 사용했었다. 모든 결과를 DataTable로 받기 때문에, 로직이 조금만 복잡해져도, 해당 DataTable이 가리키는 테이블이 무엇이고 어떤 필드가 어떤 유형(type)인지 제대로 파악하기 어려웠었다. EntityFramework 는 시스템이 사용할 테이블을 클래스(Class) 모델로 생성하고, 모델 객체를 통해 데이터를 조작하기 때문에 소스로직이 복잡해지더라도 클래스유형을 통해 분석이 용이하다는 장점이 있다. 근데 써본사람들은 알겠지만, SQL쿼리보다 ..
-
[ASP.NET] WebApi 에서 ApiController에 Route("api/[controller]")로 붙는 이유.NET/개념 및 유용한 팁 2021. 4. 19. 20:57
Visual Studio에서 ASP.NET 또는 ASP.NET Core의 WebAPI 프로젝트에서 컨트롤러를 추가할 때, Route("api/[controller]")가 자동으로 붙는것을 확인해본적이 있을 것이다. 프로젝트를 생성할 때 만들어지는 WeatherForecastController 는 단순히 [Route("[controller]")] 만 추가되기 때문에 별 대수롭지 않게 api/ 부분을 제거하는 사람도 존재할지 모른다. 하지만 가급적 추가한 채로 사용하도록 하자. 특히 React, Vue와 같은 웹 프론트엔드 개발자와 협업한다면, 웹 프론트엔드에도 route 기능이 존재한다. 따라서 React, Vue에서 자체적인 route 적용을 통해 페이지 이동을 컨트롤할 수 있다. 문제는 React와 V..
-
[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]가 된것이므로 코드가 줄어든게 맞다..
-
[EntityFrameWork Core] The instance of entity type cannot be tracked 오류 발생시 해결방안.NET/개념 및 유용한 팁 2021. 3. 27. 13:52
개발 중 이런 오류가 발생했다. The instance of entity type 'masterTbl' cannot be tracked because another instance with the same key value for {'idx', 'seq'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values. EFCore에서 검색한 객체를 T..
-
[EntityFramework Core] dbContext 여러 번 사용시 유의사항 (feat. Dbset 프로퍼티 데이터 불일치 현상).NET/개념 및 유용한 팁 2021. 3. 6. 11:52
회사에서 솔루션 개발중 겪은 뻘짓이 있어 기록한다. 현재 메일발송 서비스를 개발중에 있는데, 기존 DB와 신규 서비스의 DB 구조가 달라 호환을 위해 완료된 데이터를 기존 DB에도 입력하는 기능을 구현했다. 신규 DB에서 완료된 조건에 일치하는 데이터만 Where() 함수를 통해 가져와서 기존 DB에 Insert하는 작업인데, 조건에 부합되는 항목들을 Insert 하려니 "발송대기" 상태인 초기값으로 나온다. Worker Service Task 를 여러 개 사용하는 구조인데, Task는 각각 역할이 정해져있으며, ConcurrentQueue를 통해 데이터를 단방향으로 처리하기 때문에 스레드에 의한 데이터 불일치 현상이 일어나는 구조는 아니다. 설명이 어려우니 재현을 위해 소스코드를 준비해보겠다. .NET..