-
홈서버 원본 IP 노출 방어와 Nginx Cloudflare 허용 대역 구성
홈서버에서 LLM 스트리밍 API의 버퍼링 문제를 해결하거나 특정 전송 계층의 성능을 확보하기 위해 Cloudflare 프록시를 끄고 DNS Only(회색 구름)로 전환하면, 홈서버의 공인 IP가 외부에 직접 노출된다. 이때 동일한 공인 IP를 공유하는 다른 웹서비스들까지 공격자의 IP 직접 접근에 의해 Cloudflare WAF와 DDoS 보호를 우회당할 수 있는 구조적 취약점이 발생한다. 본 글에서는 원본 IP 노출에 따른 위험성과… Continue reading
-
vLLM API Key 인증 시 기본 노출 경로와 Nginx 접근 제어 설정
vLLM 서빙 엔진을 외부 네트워크에 노출할 때 접근 통제를 위해 –api-key 옵션을 사용하는 것이 기본 보안 설정이다. 그러나 이 옵션을 적용하더라도 모든 HTTP 엔드포인트가 인증으로 보호되는 것은 아니다. 기본적으로 인증 없이 응답을 반환하는 경로가 존재하며, 이를 파악하지 않고 외부에 공개할 경우 시스템 정보가 노출될 수 있다. 본 글에서는 vLLM의 엔드포인트별 인증 적용 현황과 Nginx를 통한… Continue reading
-
Cloudflare 프록시 환경의 LLM 스트리밍(SSE) 지연 분석 및 진단 가이드
홈서버에 구축한 vLLM 등의 LLM 서빙 엔진을 외부에서 안전하게 호출하기 위해 리버스 프록시와 도메인을 연결하고 Cloudflare 프록시(오렌지 구름)를 적용하는 경우가 많다. 그러나 Server-Sent Events(SSE) 기반의 실시간 스트리밍 추론 API를 Cloudflare Free 플랜 프록시 뒤에 배치하면 심각한 응답 지연과 버퍼링 문제가 발생할 수 있다. 이 글에서는 실제 발생한 지연 증상과 원인 분석 과정, 계층별 진단 절차… Continue reading
-
Hermes Agent 에이전트 답변 방법 설정 방법
1. Mattermost ~/.hermes/.env에 추가한다. 값 동작 off (기본) 답장이 채널 타임라인에 게시 thread 원 메시지 아래 스레드에 게시 변경 후 게이트웨이 재시작. 2. Slack ~/.hermes/config.yaml에 추가한다. 값 동작 true (기본) 새 스레드를 파서 답장 false 채널 타임라인에 flat 답장 기존 스레드 안의 메시지는 어떤 모드가든 스레드로 답한다. 변경 후 게이트웨이 재시작. 3. 참고 두 플랫폼의… Continue reading
-
Docker Desktop 대체제: 오픈소스 Rancher Desktop 소개 및 데이터 이주 방법
컨테이너 기반 로컬 개발 환경에서 가장 널리 사용되던 도구는 Docker Desktop이다. 그러나 기업 환경에서의 라이선스 정책 변경으로 인해 대안 도구에 대한 검토가 필요해졌다. 본 글에서는 완전 오픈소스 기반의 대체제인 Rancher Desktop의 특징과 라이선스 정보, 그리고 기존 컨테이너 환경의 핵심 구성요소(이미지, 볼륨, Compose 소스)를 이주하는 방법을 다룬다. 1. 개요 및 도입 배경 Docker Inc.의 구독 라이선스… Continue reading
-
Qwen3.8-27B MTP(Multi-Token Prediction) 서빙 최적화 및 벤치마크 분석
안내: 본 벤치마크 결과는 테스트에 사용된 특정 하드웨어 구성 및 서빙 엔진 버전에 기반한 측정치이다. 실제 구동 환경, 네트워크 인터커넥트 및 워크로드 특성에 따라 성능 수치와 최적 파라미터가 달라질 수 있으므로 참고용 데이터로 활용하는 것을 권장함. 1. 테스트 환경 및 평가 구성 Qwen3.8-27B 모델을 대상으로 정밀도별 추론 성능과 MTP(Multi-Token Prediction) 투기적 디코딩(Speculative Decoding) 적용 시의… Continue reading
-
OpenCode V2 Auto-Compaction 메커니즘과 Buffer 설정 가이드
OpenCode V2는 장시간 이어지는 코딩 세션에서 컨텍스트 윈도우 한도를 초과하지 않도록 자동 압축(Auto-Compaction) 기능을 기본 제공한다. 이전 대화 기록을 손실 없이 영구 저장하면서도 모델이 바라보는 활성 컨텍스트를 구조화된 요약본(Checkpoint)으로 치환하여 가용 토큰을 확보하는 방식이다. 본 글에서는 OpenCode V2의 컴팩션 동작 원리와 통합 트리거 수식을 살펴보고, 컨텍스트 관리 및 오버플로우 방지의 기준점이 되는 buffer와 limit.input의 역할… Continue reading
-
OpenCode에서 Qwen3.8 27B xhigh 추론 토큰 한계와 Auto-Compaction 최적화 설정
OpenCode 환경에서 vLLM 기반 OpenAI 호환 엔드포인트를 연결하여 사용할 때, 모델의 추론(Reasoning/Thinking) 강도와 토큰 제한 설정에 따라 예기치 않은 중단 현상이 발생할 수 있다. 특히 Qwen3.8 27B 모델의 xhigh reasoning 모드를 활용하여 복잡한 코드 수정을 요청할 경우, 60,000 토큰 이상의 대규모 추론 연산이 발생한다. 본 글에서는 기존 32k 출력 제한 환경에서 발생한 무응답 대기 문제의… Continue reading
-
opencode에서 vLLM Reasoning Effort(variants) 설정 및 TUI 단축키(Ctrl+T) 전환 가이드
OpenCode는 터미널 환경에서 대규모 언어 모델(LLM)을 활용할 수 있도록 지원하는 AI 코딩 CLI 도구다. 최근 DeepSeek-R1, DeepSeek V4 Flash, Qwen3.8 등 추론(Reasoning / Thinking) 특화 모델의 활용이 보편화되면서, 수행하려는 작업 난이도에 맞춰 추론 강도(Thinking Budget, 사고 예산)를 유연하게 조절해야 할 필요성이 커졌다. 단순한 코드 포맷팅이나 사소한 오타 수정 시에는 추론 강도를 낮춰 토큰 소모와 응답… Continue reading
-
C# async/await — ConfigureAwait, SynchronizationContext, ContinueWith
WPF 앱에서 Task.ContinueWith + Unwrap()으로 짜여있던 비동기 커맨드 체인을 async/await로 리팩터링하다가, Application.Current.Dispatcher.Invoke를 왜 지워도 되는지, ConfigureAwait(false)가 정확히 어디까지 영향을 주는지 헷갈려서 정리한 내용이다. 나중에 다시 헷갈릴 때 이 글부터 다시 읽는다. 1. ContinueWith + Unwrap이 필요했던 이유 아래처럼 커맨드 하나가 여러 비동기 작업을 순서대로 거치는 코드가 있었다. 장비 상태를 확인하고, 통과하면 다음 상태를 확인하고, 그것도… Continue reading
