최근 Blazor Server 기반으로 배포한 게임 운영 사이트에서 특정 페이지를 누르면 아래와 같은 에러가 나서 게임 운영 사이트를 재시작 해야 하는 버그가 있었다. [에러 메시지]System.ObjectDisposedException: Cannot access a disposed object.Object name: 'MySqlConnector.MySqlConnection'. 원인이 뭘까 하고 찾아보다가 알아낸 원인은 총 두개였다. [원인] 1. Blazor Server는 컴포넌트의 생명주기가 길다 → 커넥션 유지 문제가 발생 왜? Blazor Server에서는 컴포넌트가 SignalR 기반으로 장시간 연결 상태를 유지함.그런데 DbContext를 컴포넌트 필드에 들고 있거나, 공유 커넥션을 재사..
회사에서 컨텐츠 개발을 하다보면 'enum 비트 플래그'를 쓰는 경우가 있는데, 여러 상태를 하나의 값으로 처리 할 수 있는 장점이 있다. 이왕 쓰는거 정리포스트를 올리자 싶어 적어본다. 👩💻 예제 코드- 바구니에 과일을 담고 확인해보자.1. flags Fruit 정의[Flags]public enum Fruit{ None = 0, Apple = 1 1 각 항목을 2의 거듭제곱으로 만들어서 중복 없이 조합 가능[Flags]를 붙이면 ToString() 출력 시 "Apple, WaterMelon"처럼 나와서 디버깅도 굿All을 만들어두면 향후 자동 패치할 때 유용 2. 실제 사용하기// 장바구니에 사과랑 바나나를 담음 var basket = Fruit.Apple | Fruit.Banana;..
😃 최근에 회사 코드를 List에서 IEnumerable 코드로 몇몇개 바꾸면서 무슨 차이가 있는지 정리해 보았다. 📚 기본 개념항목IEnumerableList정의읽기 전용의 순차열 인터페이스요소 추가/삭제 가능한 가변 컬렉션 클래스자료형인터페이스클래스접근 방식foreach만 가능foreach, list[i] 등 다양한 접근 가능가공 특성Linq 사용시 지연실행모든 요소가 메모리에 있어 즉시 사용 가능 지연실행 ? - 실제로 사용될 때까지 실행을 미루는 것 - 즉 코드는 써도 당장 실행되지 않고 foreach 등으로 순회할 때 실행된다는 뜻 📚 주요 기능 비교기능IEnumerableList요소 추가 / 삭제불가능Add(), Remove() 가능인덱스 접근불가능list[i] O(1) 가능Linq ..
Blazor를 사용하다 보면 Razor 컴포넌트의 @code {} 안에서 버튼 클릭 이벤트 같은 걸 직접 처리하게 된다.이걸 보면서 "어? 이거 자바스크립트 하는 역할을 C#이 하네?" 라는 생각이 든다면, 그게 맞다. 😎이 글에서는 Blazor가 클라이언트 단에서 어떻게 동작하는지,그리고 JavaScript를 얼마나 대체할 수 있는지를 정리하려한다. 1. Razor 컴포넌트는 클라이언트 코드다.Blazor에는 두 가지 실행 방식이 있다. Blazor 종류설명Blazor Server서버에서 실행되고, SignalR을 통해 브라우저와 통신Blazor WebAssembly (WASM)C# 코드가 브라우저 안에서 직접 실행됨 (JavaScript 대체!) 즉, Blazor WebAssembly는 완전히 클라..
https://medium.com/@sudipdevdev/how-to-detect-and-log-slow-queries-in-entity-framework-core-e2ab71024849 How to Detect and Log Slow Queries in Entity Framework CoreAs applications grow in complexity, performance bottlenecks can become a significant challenge, particularly with database queries…medium.com 요즘 EntityFramework사용해서 작업 중입니다. EntityFramework는 쿼리 로그 옵션을 넣어서 프로그램을 동작하면 실행하는 모든 쿼리에 대한 로그를..
AWS - Linux EC2 사용시 prometheus 설치 한번에 하는 스크립트 #!/bin/bash# 변수 설정PROMETHEUS_VERSION="2.53.3"# 사용자 생성 (존재하는지 확인 후 생성)id -u prometheus &>/dev/null || sudo useradd --no-create-home --shell /bin/false prometheus# 디렉토리 생성sudo mkdir -p /etc/prometheus /var/lib/prometheus# 권한 설정sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus# 다운로드sudo wget -q \ https://github.com/prometheus/prometh..