전체 글
-
[Linux] Nginx 리버스 프록시 뒤의 ASP.NET Core: UseForwardedHeaders 클라이언트 IP 유실 해결Linux 2026. 11. 11. 12:14
Nginx 리버스 프록시 뒤에서 ASP.NET Core를 운영하면 클라이언트 IP가 127.0.0.1이나 프록시 IP로 찍히고, UseHttpsRedirection이 무한 리다이렉트를 만들기도 합니다. UseForwardedHeaders 설정과 Nginx 헤더 구성을 짝으로 맞추는 절차입니다. 절차 증상 구분Nginx 헤더 전달 설정UseForwardedHeaders 등록과 순서신뢰 프록시 범위 지정HTTPS 리다이렉트 루프 해결확인 방법보안 주의점 1. 증상 구분 HttpContext.Connection.RemoteIpAddress가 127.0.0.1 또는 내부 대역입니다.인증·레이트 리밋이 모든 사용자를 한 IP로 취급합니다.Request.Scheme이 http로 보여 https 리다이렉트가 반복됩니..
-
[ASP.NET Core] SignalR 분산 환경 구축: Redis 백플레인(Backplane)과 웹소켓 스케일아웃Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 11. 12:13
SignalR은 연결이 인스턴스에 묶여 있어, 서버를 여러 대로 늘리면 다른 인스턴스의 클라이언트에게 메시지가 전달되지 않습니다. Redis 백플레인을 붙여 인스턴스 간 메시지를 중계하고, 로드 밸런서에서 웹소켓이 끊기지 않게 구성하는 절차입니다. 절차 증상 확인Redis 기동백플레인 등록허브와 클라이언트 연결로드 밸런서 설정운영에서 조정할 값점검 항목 1. 증상 확인 인스턴스 2대를 띄우고 같은 그룹에 두 클라이언트를 붙입니다.A 인스턴스에 붙은 클라이언트가 보낸 메시지가 B 인스턴스의 클라이언트에 도착하지 않습니다.로그에는 오류가 없습니다. 브로드캐스트가 프로세스 안에서만 처리되기 때문입니다. 백플레인 없이 스케일아웃하면 이 상태가 정상 동작으로 보입니다. 연결 수는 늘고 실시간 기능만 조용히 깨집니..
-
[EF Core] 대용량 트래픽 대비 쿼리 최적화: AsNoTracking, Split Query, 실행 계획 분석Database 2026. 11. 11. 12:12
EF Core 쿼리는 기본 설정만으로도 조용히 느려집니다. 읽기 전용 조회의 추적 비용, Include 중복 행, 매 요청 재컴파일이 대표적입니다. 이 글은 대용량 트래픽을 가정하고 조회 경로에서 먼저 손댈 지점을 순서대로 정리한 것입니다. 절차 현재 쿼리 확인AsNoTracking 적용프로젝션으로 필요한 컬럼만Split Query로 중복 행 제거컴파일된 쿼리와 DbContext 풀링벌크 수정·삭제실행 계획과 인덱스 1. 현재 쿼리 확인 먼저 실제로 나가는 SQL을 봅니다. 코드만 보고 추측하면 대부분 틀립니다. var query = db.Orders .Where(o => o.CustomerId == customerId) .OrderByDescending(o => o.CreatedAt);Con..
-
[ASP.NET Core] Serilog 구조화 로깅(Structured Logging)과 Seq 연동 실무 세팅Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 11. 12:10
ASP.NET Core에 Serilog를 붙여 구조화 로깅을 구성하고, Seq로 로그를 모아 조회하는 실무 세팅입니다. 콘솔에는 JSON, Seq에는 구조화 이벤트로 보내고, 요청 로그를 한 줄로 요약하는 구성까지 정리합니다. 절차 패키지 설치Seq 기동Program.cs 구성appsettings.json 설정요청 로깅과 상관관계 ID구조화 로그 작성 규칙조회와 운영 팁 1. 패키지 설치 dotnet add package Serilog.AspNetCoredotnet add package Serilog.Sinks.Seqdotnet add package Serilog.Formatting.Compactdotnet add package Serilog.Enrichers.Environment Serilog.AspN..
-
[Docker] .NET 웹 API 멀티스테이지 빌드로 초경량 배포 이미지 만들기 (Chiseled Ubuntu)Linux 2026. 11. 11. 12:09
ASP.NET Core 웹 API를 멀티스테이지 빌드로 게시하고, Chiseled Ubuntu 기반의 초경량 이미지로 배포하는 절차입니다. 최종 이미지에는 셸과 패키지 관리자가 없고, 비루트 사용자로 실행됩니다. 절차 게시 방식 선택멀티스테이지 Dockerfile 작성.dockerignore 정리빌드와 이미지 크기 확인컨테이너 실행과 포트 설정로그·진단 수집자주 막히는 지점 1. 게시 방식 선택 프레임워크 종속(--self-contained false): 최종 이미지에 aspnet 런타임이 필요합니다. 이미지가 크지만 빌드가 빠릅니다.자체 포함 + 단일 파일: 런타임을 이미지에 포함합니다. 베이스가 runtime-deps로 줄어듭니다.Native AOT: 런타임 없이 네이티브 실행 파일만 올립니다. 시작..
-
[C#] .NET에서 로컬 벡터 DB(Qdrant) 연동과 RAG 검색 파이프라인 최소 구현Microsoft .NET/C# 2026. 11. 11. 12:08
로컬 벡터 DB(Qdrant)를 .NET에서 붙여 문서 검색(RAG) 파이프라인을 최소 구성하는 절차입니다. 임베딩은 로컬 Ollama로 만들고, 저장·검색은 Qdrant gRPC 클라이언트로 처리합니다. 절차 Qdrant 실행과 포트 확인패키지 설치와 클라이언트 연결컬렉션 생성과 벡터 설정임베딩 생성 (Ollama)포인트 업서트검색과 RAG 프롬프트 조립운영에서 걸리는 지점 1. Qdrant 실행 docker run -d --name qdrant \ -p 6333:6333 -p 6334:6334 \ -v $(pwd)/qdrant_storage:/qdrant/storage \ qdrant/qdrant 6333: REST API와 웹 대시보드6334: gRPC. .NET 클라이언트는 이 포트를 사용합..
-
[C#] Semantic Kernel로 로컬 Ollama 모델에 C# 함수 호출(Function Calling) 붙이기Microsoft .NET/C# 2026. 11. 11. 12:01
로컬 Ollama 모델에 C# 함수를 붙이면 모델이 스스로 함수를 골라 호출하고, 그 결과로 답을 만듭니다. Semantic Kernel의 Ollama 커넥터와 자동 함수 호출(FunctionChoiceBehavior)로 최소 구성하는 절차입니다. 절차 Ollama 모델 준비와 tool calling 지원 확인패키지 설치와 커널 구성플러그인(함수) 정의자동 함수 호출 설정실행과 호출 추적실패하는 지점과 대응 1. 모델 준비 # 서버 기동 (기본 포트 11434)ollama serve# tool calling을 지원하는 모델 예시ollama pull qwen3:8b# 대화 확인ollama run qwen3:8b "안녕" 모델이 tool calling을 지원하지 않으면 함수 호출이 발생하지 않고, 모델은 함..
-
[.NET 11] Native AOT 기본 활성화와 컨테이너 이미지 초경량화 세팅Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 11. 11:58
.NET 11에서 SDK의 Native AOT CLI 호스트가 기본 활성화됐습니다. 애플리케이션 쪽에서는 여전히 PublishAot를 명시해야 하며, 컨테이너 발행에는 재현 가능한 이미지 다이제스트와 레이어 재사용이 추가됐습니다. 이 글은 ASP.NET Core 앱을 AOT로 게시하고 컨테이너 이미지를 최소 구성으로 만드는 절차입니다. 절차 .NET 11에서 기본이 된 것과 아닌 것 구분AOT 게시 설정컨테이너 발행 설정이미지 크기 축소 옵션재현 가능한 빌드와 다이제스트 고정실행 검증실패하는 지점과 대응 1. 기본이 된 것과 아닌 것 dotnet CLI 호스트가 Native AOT로 빌드되어 기본 실행됩니다. dotnet --version, dotnet --info, 각 명령의 --help, dotnet..