Framework 5

MySQL에 C#의 DateTime.MaxValue를 넣을 수 없는 이유

ASP.NET과 SQLKata를 활용하여 게임 개발을 하고 있다. 시스템 상에서 우편을 보내는 기능 개발 중, 결제된 상품을 포함한 우편을 전송할 때는 만료 기한을 무제한으로 설정해야 할 필요가 생겼다. 이는 우편이 만료 기한이 지남에 따라 자동 삭제되지 않게 하기 위해서였다. 이를 위해 DateTime.MaxValue를 우편 만료 기한으로 설정한 뒤, SQLKata로 삽입 쿼리를 넣었다. 그리고 예외 발생! Visual Studio 상으로 확인했을 때 만료 기한의 값은 내가 의도한 DateTime.MaxValue의 값을 가리키고 있었다. 그렇다면 DateTime.MaxValue 값을 MySQL에 넣을 때 예외가 발생했다는 뜻인데... DateTime.MaxValue는 9999년 12월 31일 23:59..

Framework/.NET 2023.05.08

ASP.NET에서의 MySQL VS Redis

MySQL과 Redis의 차이가 무엇일까? 여러 가지가 있겠지만, 데이터가 저장되는 위치와 스레드의 개수가 가장 큰 차이라고 생각한다. 데이터가 저장되는 위치 관점에서 바라보자. MySQL은 관계형 데이터베이스이며, 디스크에 데이터가 저장된다. Redis는 NoSQL이며, 메모리에 데이터가 저장된다. 스레드 개수 관점에서 바라보자. MySQL은 스레드 풀을 통해 멀티 스레드 사용이 가능하다. Redis는 싱글 스레드를 사용한다. 이러한 차이로 인해 ASP.NET 프로그램을 개발할 때 각 DB를 활용하는 방식이 달라진다. MySQL을 활용하는 서비스는 다음과 같이 등록한다. 데이터베이스에서 멀티 스레드를 활용할 수 있으므로 하나의 요청 안에서 인스턴스가 여러 번 생성되는 Transient 생명주기를 활용한..

Framework/.NET 2023.05.03

[ASP.NET Core로 Web API 만들기] 2. SqlKata로 비동기 CRUD 구현하기

이 게시물은 Visual Studio, MySQL 환경에서의 .NET 7과 SqlKata 2.4.0에 관해 설명합니다. 다른 버전을 사용할 경우 게시글의 설명과 다를 수 있습니다. 이 글은 https://github.com/sqlkata/querybuilder를 참고하여 작성되었습니다. 목차 1. SqlKata란? 2. Create 3. Read 4. Update 5. Delete 이번 글에서는 SqlKata에 대해 알아보고, 이를 활용하여 ASP.NET Core 환경에서 CRUD를 구현하는 방법을 알아보겠습니다. 1. SqlKata란 C#으로 사용 가능한 SQL 쿼리 빌더입니다. 고수준의 API를 제공하여 사용자 입장에서 편리하게 사용할 수 있습니다. SQL에 익숙하지 않은 사용자도 어렵지 않게 사용 ..

Framework/.NET 2023.04.25

[ASP.NET Core로 Web API 만들기] 1. ASP.NET Core에 대해

이 게시물은 .NET 7에 관해 설명합니다. 다른 버전을 사용할 경우 게시글의 설명과 다를 수 있습니다. 이 글은 마이크로소프트 설명서를 참고하여 작성되었습니다. 목차 1. ASP.NET Core의 구성 2. 의존성 주입(DI) 3. 서비스의 생명 주기 4. 미들웨어 5. Attribute 1. ASP.NET Core의 구성 Program.cs 애플리케이션의 진입점입니다. 앱에서 요구하는 서비스가 구성됩니다. 앱의 요청 처리 파이프라인이 미들웨어 구성 요소로 정의됩니다. WebApplication.CreateBuilder var builder = WebApplication.CreateBuilder(args); ASP.NET Core 웹 앱은 위 코드를 생성합니다. 이 코드에서 WebApplication...

Framework/.NET 2023.04.22

순환 참조 문제 - SecurityConfig에서 passwordEncoder와 filterChain의 remember-me 속성을 같이 사용할 경우

에러 메시지는 다음과 같습니다. The dependencies of some of the beans in the application context form a cycle: ┌─────┐ | securityConfig defined in file [C:\Users\username\IdeaProjects\Puru-Board\build\classes\java\main\com\puru\puruboard\config\SecurityConfig.class] ↑ ↓ | inMemoryUserDetailsManager defined in class path resource [org/springframework/boot/autoconfigure/security/servlet/UserDetailsServiceAutoCo..

Framework/Spring 2022.11.22