All Posts
274 articles · AI · Search Engine · DevOps · Full Stack
체험존 프로비저너: 신청 한 건으로 격리된 멀티테넌트 스택을 자동 발급하다
이메일 신청 한 건으로 XGEN 전체 스택을 격리해 자동 발급하는 셀프서비스 체험존(Trial Zone) 프로비저너를 설계하고 운영한 과정을 정리한다. Docker Compose per-tenant…
XGEN Workbench 분산 실행 인프라: KVM 컴퓨트 풀, GPU 워커, PriorityClass, NetworkPolicy까지
XGEN의 LLMOps/MLOps 워크벤치를 단일 Pod 실행에서 KVM 컴퓨트 풀과 GPU 워커 기반 분산 실행 구조로 확장한 과정을 정리한다. Workbench 컨트롤러, SandboxExec,…
XGEN 데스크톱 앱 고도화: Tauri에서 로컬 Ollama, 백엔드 자동기동, MCP/RAG를 한 번에 연결하기
기존 웹 기반 XGEN 프론트엔드를 Tauri 데스크톱 앱으로 감싸는 수준을 넘어, 로컬 Ollama 자동 기동, Docker Compose 백엔드 자동 시작, MCP 라이브러리 UX, 로컬 모델 …
sontrader 자동매매 시스템 설계: 전략보다 먼저 주문, 리스크, 기억 계층을 분리하기
국내 주식 자동매매 프로젝트 sontrader를 공개 가능한 범위에서 정리한다. synaptic memory, NautilusTrader, KIS OpenAPI를 연결할 때 전략 수익률보다 먼저 주…
XGEN MCP 폐쇄망 번들 시스템: 외부망 패키지를 .tar.gz로 묶어 원클릭 도구 세션까지 연결하기
MCP 서버를 인터넷이 막힌 폐쇄망 XGEN 환경에서 설치하고 실행하기 위해 외부망 번들 빌드, 업로드, 세션 복원, 마켓 카탈로그, 데스크톱 앱 UX를 하나의 흐름으로 연결한 구현 과정을 정리한다…
XGEN Canvas Chat와 Harness 컴파일: 대화형 워크플로우를 실행 가능한 에이전트 파이프라인으로 만들기
대화로 만든 Canvas 워크플로우를 Harness 노드와 Compile 버튼으로 실행 가능한 에이전트 파이프라인으로 전환하면서 겪은 설계 판단을 정리한다. stage 로그, tool 입출력, LL…
graph-tool-call v0.20 개발기: RPC 탐지에서 Plan-and-Execute 컴파일러까지
graph-tool-call v0.19의 tool result 압축 이후, v0.20 방향으로 진행한 RPC 패턴 감지, 동적 prefix 탐지, intent parser, graph 기반 path…
Jenkins 자격증명 하드코딩 제거: K8s Secret + JCasC 변수 참조 전환과 부수 인프라 fix
Jenkins JCasC 설정에 박혀 있던 admin 자격증명을 K8s Secret으로 분리하고 JCasC 변수 참조로 주입하는 보안 전환을 정리한다. 함께 묶어서 처리한 Fuseki Recreat…
sonlife-app iOS 컨트롤 타워: SwiftUI + SSE 실시간 인박스 + APNs 인라인 승인 + Watch + Siri
음성 녹음 앱이었던 sonlife-app을 자율 에이전트 컨트롤 타워로 진화시켰다. SwiftUI 작업 인박스, SSE 실시간 라이브 카드, 오프라인 큐, APNs 인라인 승인(Face ID), A…
Cohere Transcribe STT Provider 도입: 한/영 코드스위칭과 HF Gated Repo 자동 인증
sonlife 라이프로그 STT 백엔드를 faster-whisper에서 Cohere Transcribe로 교체했다. WER 7.44%→5.42% 개선, HF Gated Repo의 HF_TOKEN 자…
XGEN 2.0 권한 모델 리팩토링: Group → Role 기반으로 6개 마이크로서비스 일괄 마이그레이션
XGEN 2.0 백엔드의 권한 모델을 group 기반에서 role 기반으로 옮기면서, 6개 마이크로서비스에 걸쳐 share_group→share_roles, require_perm 통합, 공통 SD…
sonlife 자율 에이전트 루프: 예산 Hard-Stop · HITL 게이트 · MS Graph 실시간 Push 설계
라이프로그/메일/Teams를 자율 답신하는 에이전트 루프를 만들면서 도입한 안전장치 — 예산 150% hard-stop, max_age 뒷북 가드, L03 permission HITL, MS Gra…
api-to-tools: 어떤 API든 LLM 도구로 변환하는 5단계 Fallback 디스커버리 전략
OpenAPI/Swagger/HAR/GraphQL/gRPC/AsyncAPI/WSDL/Nexacro까지, 스펙이 있든 없든 임의의 API를 LLM이 호출 가능한 Tool 정의로 자동 변환하는 라이브러…
graph-tool-call v0.19: Tool Result 지능형 압축으로 76K → 116 토큰 (97.6% 절감)
LLM 에이전트의 컨텍스트 폭주 주범인 tool 응답을 타입별로 지능형 압축한다. JSON list/dict, HTML, Error, Text 5종 압축기와 HTTP 응답 자동 감지, ToolGra…
AI 회사 자율운영 플랫폼에 synaptic-memory + graph-tool-call 통합기
AI 에이전트 회사 자율운영 플랫폼 Hive Corp에서 자체 구현된 메모리 시스템과 도구 레지스트리를 synaptic-memory, graph-tool-call 두 라이브러리로 전면 교체한 과정을…
현금흐름 예측 실전기 — 256피처 ML의 함정에서 시계열 앙상블까지
48개월 월별 데이터로 기업 현금흐름을 예측하는 프로젝트. 256개 피처 ML이 평균 예측기에 불과하다는 사실을 발견하고, 순수 시계열(AutoARIMA, Chronos-Bolt) + 역MAE 앙상…
xgen-model v2 아키텍처 — MinIO 모델 허브, vLLM 0.17.0, Inference Proxy
XGEN 플랫폼의 모델 서빙 서비스를 4-Tier 아키텍처로 리팩토링한 과정을 정리한다. MinIO 기반 중앙 모델 저장소 + PV 캐시, vLLM 0.17.0 업그레이드, LLM/임베딩 자동 라우…
gwanjong-mcp 운영기 — 9개 플랫폼 확장, 캠페인 GTM, 스팸 방지 실전
AI 소셜 에이전트 gwanjong-mcp를 4개에서 9개 플랫폼으로 확장하고, 캠페인 기반 GTM 시스템, 연속 실패 자동 차단, 에이전트 캐릭터 시스템, 자동 대댓글, 저자 중복 방지까지 실제 …
graph-tool-call v0.15: 1068 Tool 스트레스 테스트와 워크플로우 체인 엔진
graph-tool-call을 v0.7에서 v0.15까지 진화시키며 겪은 기술적 의사결정을 정리한다. 6개 retrieval 전략 경쟁 벤치마크로 Graph의 실제 가치를 검증하고, BM25보다 나…
XGEN GPU 모델 서빙 인프라 실전기 — 폐쇄망 배포부터 멀티 GPU 오버라이드까지
XGEN 플랫폼의 GPU 모델 서빙 서비스(xgen-model)를 제주 폐쇄망과 AWS EKS에 배포하면서 겪은 인프라 삽질을 정리한다. Istio/Traefik 전환, imagePullPolicy…
workstream-kb — 업무 지식 베이스 자동화: MS365 수집부터 Claude 리포트 생성까지
MS Graph API로 메일과 Teams 메시지를 30분마다 수집하고, Claude CLI 1회 호출로 종합 일일 업무 리포트를 생성하는 2-Layer 자동화 시스템의 설계와 구현 과정을 정리한다…
업무 자동 수집 → 일일 리포트: 500+개 메시지를 Claude로 요약하는 3계층 아키텍처
MS 365(메일, Teams) 500개 이상의 일일 메시지를 자동 수집하고, Claude API로 구조화된 일일 리포트로 변환한 후, Docsify 웹 서비스로 제공하는 end-to-end 자동화…
XGEN MS 365 MCP 통합 — Device Code Flow 인증부터 워크플로우 노드까지
XGEN 2.0 AI Agent 플랫폼에 Microsoft 365 MCP 서버를 통합한 과정을 정리한다. Client Credentials에서 Device Code Flow로의 인증 방식 전환, K…
gwanjong-mcp — AI 소셜 에이전트 MCP 시스템 설계와 구현
4개 소셜 플랫폼(Dev.to, Bluesky, Twitter, Reddit)을 하나의 인터페이스로 통합하고, Stateful Pipeline MCP 프레임워크 위에 Scout/Draft/Strik…
graph-tool-call: LLM Agent를 위한 그래프 기반 도구 검색 엔진
1,077개 API endpoint를 가진 커머스 플랫폼에서 LLM Agent가 적절한 도구를 찾는 문제를 해결하기 위해 그래프 기반 도구 검색 엔진을 설계하고 구현한 과정을 정리한다. OpenAP…
Reusable GitHub Actions와 Helm으로 K3s 범용 배포 플랫폼 구축하기
두 프로젝트의 CI/CD 파이프라인 복붙 문제를 해결하기 위해 Reusable GitHub Actions Workflow와 범용 Helm Chart를 설계했다. 레지스트리 없는 K3s 단일 노드 환…
K3s 리소스 튜닝 실전 가이드 — OOMKilled와 CPU Throttling 해결기
XGEN 플랫폼 6개 마이크로서비스의 K3s 리소스 설정을 실사용량 기반으로 튜닝한 과정을 정리한다. OOMKilled 재시작, CPU throttling 성능 저하, 과할당 낭비를 해결하며 서비스…
XGEN 멀티사이트 배포 자동화 — 하나의 코드베이스로 N개 고객사 운영하기
하나의 Helm 차트와 ArgoCD 템플릿으로 4개 사이트(온프레미스 K3s, 제주 서버, AWS EKS, 롯데이마트)를 운영하는 멀티사이트 배포 아키텍처를 설계하고 자동화한 과정을 정리한다. 사이…
XGEN GPU 벤더 추상화 — Vulkan 의존 제거와 멀티 벤더 Dockerfile 전략
XGEN 모델 서버의 GPU 관리가 Vulkan 종속 구조에서 벤더 중립 아키텍처로 전환한 과정을 정리한다. Hardware 계층 타입 시스템 설계, Management API 재설계, 프론트엔드 …
XGEN 인증 프로필 시스템 — AI Agent가 로그인 사이트를 자동으로 다루는 방법
AI Agent가 인증이 필요한 웹사이트를 자동으로 로그인하고 세션을 유지하는 시스템을 설계하고 구현한 과정을 정리한다. 추출/주입 규칙 엔진, Redis 분산 락 기반 동시 로그인 방지, 401 …
면접 후보자 A — 서버 백엔드 / DevOps
서버 백엔드 / DevOps 엔지니어 면접 준비 자료. 경력 분석, 업무 난이도 평가, 질문 리스트
Docker + nginx HTTPS 적용기 — snap Docker 교체부터 Let's Encrypt 자동 갱신까지
Ubuntu snap Docker의 샌드박스 제약으로 SSL 인증서 마운트가 불가능했던 문제를 apt Docker 교체로 해결하고, certbot으로 Let's Encrypt 인증서를 발급받아 ng…
홈서버 SSH 보안 강화: 키 인증, fail2ban, 포트 우회까지
공유기 포트포워딩으로 SSH를 외부에 개방한 홈서버에 필수적으로 적용해야 할 보안 설정을 정리한다. SSH 키 인증 전환, sshd 데몬 강화, fail2ban 자동 차단, 비표준 포트 우회까지 단…
Caddy 리버스 프록시로 홈서버 HTTPS 자동화 — Nginx 수동 설정과의 비교
홈서버에서 포트 번호 대신 도메인으로 서비스에 접속하기 위해 Caddy 리버스 프록시를 도입한 과정을 기록한다. Let's Encrypt SSL 인증서 자동 발급/갱신, TLS-ALPN-01 챌린지…
DNS, 도메인, SSL 인증서 — 네임서버 충돌로 Let's Encrypt 발급이 실패한 이야기
도메인 구조, DNS 조회 과정, SSL/TLS 인증서의 관계를 정리하고, 가비아와 자체 DNS(Technitium)의 네임서버 이중 등록으로 Let's Encrypt 인증서 발급이 실패한 원인과 …
XGEN K3s 인프라 완전 해부 (4) — CI/CD 파이프라인: Jenkins 빌드에서 ArgoCD 배포까지
XGEN 2.0의 CI/CD 파이프라인을 해부한다. Jenkins의 설정 3파일 분리 아키텍처, build.groovy 파이프라인 스테이지별 동작, 캐시 오류 자동 재시도, 듀얼 태깅 전략을 분석하…
XGEN K3s 인프라 완전 해부 (2) — Kubernetes 핵심 오브젝트와 스케일링 전략
XGEN 2.0 K3s 클러스터에서 실제 운영 중인 Kubernetes 오브젝트들을 분석한다. Pod, Deployment, Service의 관계부터 RollingUpdate 무중단 배포, HPA …
XGEN K3s 인프라 완전 해부 (5) — Istio 서비스 메시와 Observability 스택
XGEN 2.0 인프라의 네트워크 계층과 관측성 스택을 분석한다. Istio Gateway/VirtualService의 경로 기반 라우팅, SSE 스트리밍 버퍼링 문제 해결, DestinationR…
XGEN K3s 인프라 완전 해부 (1) — 전체 구조와 컨테이너 빌드 전략
XGEN 2.0 AI 에이전트 플랫폼의 K3s 기반 인프라를 처음부터 끝까지 해부한다. 1편에서는 전체 아키텍처 구조, Python/Rust/Node.js 4종 Dockerfile 멀티스테이지 빌드…
XGEN K3s 인프라 완전 해부 (3) — Helm 차트 설계: 하나의 Chart로 6개 서비스 배포
XGEN 2.0의 Helm 차트 아키텍처를 분석한다. 단일 Chart로 6개 마이크로서비스를 배포하는 구조, values 파일 계층화, _helpers.tpl의 4단계 config 병합 로직, 이미…
Technitium DNS로 홈서버 자체 DNS 구축: Docker 배포부터 Zone 설계, 운영까지
가비아 기본 네임서버에서 Technitium DNS Server로 전환하여 infoedu.co.kr 도메인을 자체 관리하는 과정을 기록한다. Docker Compose 배포, Primary Zone…
XGEN AWS EKS 신규 고객사 배포기 — 온프레미스에서 클라우드로
온프레미스 K3s에서 운영하던 XGEN 2.0 플랫폼을 AWS EKS 기반 신규 고객사 환경에 배포한 과정을 정리한다. 멀티 고객사 아키텍처가 실제로 통하는지 검증하고, 레지스트리 분리, MinIO…
FAISS 벡터 인덱스 적용과 GPU 디바이스 최적화
시맨틱 검색 API에 FAISS 벡터 인덱스를 도입하여 키워드 확장 검색을 구현하고, GPU/CPU 디바이스 분리 및 텐서 타입 이슈를 해결한 과정을 정리한다.
시맨틱 검색 API: 요약(Summary) 기능 온/오프 전략
이커머스 검색 API에서 상품 요약 기능을 GPT, EXAONE 로컬 LLM, FAISS 벡터 검색 세 가지 전략으로 시도하고, 운영 환경에서 온/오프 제어와 워커 스케일링까지 적용한 과정을 정리한…
OpenSearch Nori 분석기 커스터마이징 및 형태소 분석
x2bee-nest-search에서 OpenSearch Nori 토크나이저를 직접 커스터마이징한 과정 — decompound_mode 선택, stoptags 튜닝, 동사 판별, 동의어 확장, 사용자…
검색 결과 랭킹 스코어링 시스템 설계
x2bee-nest-search와 search-rust에서 구축한 3계층 랭킹 아키텍처 — OpenSearch function_score, Cross-Encoder Reranker, Redis 캐싱…
Cosine Similarity 직접 구현으로 검색 재순위화
OpenSearch Painless 스크립트가 아닌 NestJS 서버 측에서 cosine similarity를 직접 구현하여, 검색어의 성별/색상/계절 의도를 분석하고 동적 임계값으로 필터링하는 과…
이미지 기반 상품 검색: NestJS 통합 구현기
OWL-ViT 객체 탐지 + ViT 벡터화로 만든 이미지 검색을 NestJS 검색 엔진에 통합한 과정 — KNN 이중 벡터 검색, 성별 벡터 필터링, 상위 15% 전략, 전용 랭킹 쿼리까지의 구현과…
Reranker 모델 도입으로 검색 정확도 향상하기
이커머스 검색에서 OpenSearch 결과를 Cross-Encoder Reranker로 재순위화하고, Redis 캐시와 비동기 처리로 응답 속도를 유지한 구현 과정을 정리한다.
K3s 위에 AI 플랫폼 올리기: 인프라 설계부터 배포까지
Docker Compose 기반 단일 서버에서 K3s 클러스터로 전환하며 6개 마이크로서비스를 Helm + ArgoCD로 관리하는 과정. setup-k3s.sh 원클릭 자동화, 인프라/앱 분리 아키…
ArgoCD 멀티 고객사 배포 아키텍처 — ApplicationSet 시행착오와 단일 진입점 설계
XGEN 2.0 플랫폼을 다수 고객사(롯데, 제주 등)에 배포하면서 ArgoCD App of Apps 패턴을 Helm 기반으로 재설계한 과정을 정리한다. ApplicationSet 도입과 철회, p…
XGEN 멀티파드 분산 환경 마이그레이션 — Redis 분산 락과 직렬화 삽질기
XGEN 2.0의 워크플로우 엔진과 코어 서비스를 단일 파드에서 멀티파드로 전환하면서 겪은 문제들을 정리한다. APScheduler의 pickle 직렬화 실패, ScenarioStorageServi…
GitHub Pages 커스텀 도메인 마이그레이션 + GoatCounter 조회수 연동
MkDocs Material 블로그를 sonaiengine.github.io/sonblog에서 infoedu.co.kr 커스텀 도메인으로 전환하면서 발생한 경로 하드코딩 문제(Orama 검색, Kn…
GitHub Pages 블로그에 SEO + GEO 최적화 적용하기
MkDocs Material 블로그를 Google Search Console, Naver Search Advisor, Bing Webmaster Tools에 등록하고, robots.txt AI 크롤…
MkDocs 블로그에 온톨로지 기반 Knowledge Graph 구현하기
Sigma.js v3 WebGL + Graphology + ForceAtlas2로 블로그 글 간 관계를 시각화하는 Knowledge Graph를 처음부터 구현한 과정
Orama BM25로 MkDocs 블로그 검색을 완전히 교체한 과정
Knowledge Graph 노드 검색부터 사이트 전체 검색까지 — lunr.js를 Orama BM25로 대체하고, MutationObserver로 Material 검색 UI를 가로채는 구현기
새 탭 감지 및 자동 전환: 브라우저 자동화의 까다로운 문제
target=_blank 링크 클릭 시 새 탭이 열리는 상황에서, 빈 폴링 휴리스틱과 context.pages()로 탭을 감지하고, 캡처 스크립트 재주입까지 자동화한 과정
Agent 채팅 UI: 도구 메시지 정리와 액션 배지 디자인
Playwright MCP 도구 출력을 cleanToolContent로 요약하고, getActionLabel로 한글 액션 배지를 만들어 Agent 채팅 UI를 사용자 친화적으로 개선한 과정
시나리오 검증(Validation) 자동화: 녹화 -> 실행 -> 검증 파이프라인
AI Agent가 녹화한 시나리오 액션을 LLM이 자동 검증하여 중복 제거, 실패 재시도 정리, 누락 단계 경고, 대기 삽입까지 수행하는 파이프라인 구현
LLM 텍스트 우선 표시: Agent UX에서의 응답 순서 최적화
LLM의 텍스트 응답을 먼저 보여주고 브라우저 액션은 스트리밍 중에 병렬 실행하는 mid-stream 최적화로 Agent 체감 속도를 30-50% 개선한 과정
Playwright 스크롤바 강제 표시: headless 환경의 UI 트릭
Playwright Chromium의 --hide-scrollbars 플래그로 스크롤바가 사라지는 문제를 addStyleTag CSS 주입과 navigate 후 자동 재주입으로 해결한 과정
Agent 실시간 상태 바: 메시지 큐와 즉각 피드백 UX
AI Agent 실행 중 현재 도구/라운드/URL을 실시간 표시하는 Status Bar, 실행 중 사용자 지시를 주입하는 메시지 큐, 액션 뱃지와 즉각 피드백 UX 설계
Human-in-the-Loop: AI Agent에 사람 개입 지점 설계하기
AI 브라우저 자동화 Agent가 사용자와 협업하는 5가지 개입 시나리오, Promise 기반 일시정지/재개 메커니즘, 수동 조작 캡처와 컨텍스트 전달 설계
브라우저 자동화 시 페이지 네비게이션 생존 전략
페이지 전환 시 캡처 스크립트 소멸 문제를 sessionStorage 영속화, addInitScript 자동 재주입, 폴링 에러 복구로 해결한 과정
시나리오 배치 실행 엔진: selector fallback과 excel loop
녹화된 브라우저 자동화 시나리오를 엑셀 데이터 행마다 반복 실행하는 ScenarioExecutor 엔진의 설계와 구현 — selector fallback, 3-Phase 분류, 값 해석, Join …
CSS 셀렉터 대체 전략: selector_alternatives로 안정성 확보
브라우저 자동화에서 CSS 셀렉터가 깨지는 문제를 다중 후보 셀렉터(selector_alternatives)와 confidence 기반 fallback으로 해결한 설계
엑셀 루프 자동화: Agent + 스토리지 연동으로 반복 작업 처리
녹화된 시나리오를 엑셀 데이터 기반 반복 실행으로 변환하는 시스템 — LLM 자동 매핑, MinIO 스토리지, 멀티시트 조인, Phase 기반 루프 엔진
시나리오 레코더: 사용자 행동 녹화 및 재생 엔진
브라우저 이벤트 캡처 스크립트 주입, 셀렉터 생성 전략, 이벤트 병합 로직, 폴링 기반 수집 루프, 그리고 시나리오 재생 엔진의 전체 아키텍처
벡터 검색 유사도 임계값 동적 조정 (토큰 수 기반)
이커머스 검색에서 성별/색상/계절 벡터 필터 적용 여부를 결정하는 유사도 임계값을 검색어 토큰 수에 따라 동적으로 조정한 배경과 구현을 정리한다.
NestJS 기반 이커머스 검색 엔진 개발기 (x2bee-nest-search)
OpenSearch, Handlebars 템플릿, MeCab 형태소 분석, Redis 캐싱을 결합한 NestJS 검색 엔진 전체 아키텍처 설계와 구현 과정을 정리한다.
검색 품질 개선: 성별/색상/카테고리 필터링 최적화
x2bee-nest-search에서 임베딩 벡터 기반 성별/색상/계절/카테고리를 자동 감지해 검색 결과를 필터링하고 부스트하는 구현 전략과 시행착오를 정리한다.
시맨틱 검색과 키워드 검색의 하이브리드 전략
x2bee-nest-search에서 OpenSearch의 query_string 기반 키워드 검색과 kNN 벡터 검색을 결합한 하이브리드 검색 전략과 부스트 점수 설계를 정리한다.
GPT를 활용한 검색 쿼리 의도 분석 및 키워드 추출
이커머스 검색에서 자연어 쿼리를 GPT로 분석해 핵심 키워드와 추천 상품을 추출하고, 형태소 분석과 결합해 검색 품질을 개선한 과정을 정리한다.
Istio + ArgoCD 도메인 변경: Helm values 수정 포인트 정리
Kubernetes 환경에서 서비스 도메인을 변경할 때 Istio Gateway, ArgoCD Application, Helm values에서 수정해야 할 포인트를 정리한 실전 가이드.
마이크로서비스 라우팅 통합: session-station에서 core로 병합
독립 서비스였던 session-station을 xgen-core에 통합하면서 Gateway 라우팅과 인증 프로파일 시스템을 재설계한 과정
CLAUDE.md로 AI 코딩 어시스턴트 가이드라인 작성하기
팀 프로젝트에서 Claude Code가 일관된 방식으로 작업하도록 CLAUDE.md에 컨텍스트와 규칙을 기록하는 실전 가이드
인프라 모노레포 디렉토리 구조 설계: dockerfiles/compose/k3s 분리 전략
하나의 레포에 혼재하던 Dockerfile, Docker Compose, K3s 쿠버네티스 매니페스트를 역할별로 분리하고 ArgoCD와 연동하는 인프라 모노레포 구조 리팩토링 과정.
MCP(Model Context Protocol)로 Agent 속도 3-5x 개선
Playwright MCP 호출을 도구별로 최적화하고 시스템 프롬프트를 분리하여 Agent 속도를 3-5배 향상시킨 과정
Claude Code 수준의 Agent 정확도 달성하기: 12대 개선사항
실사이트 테스트를 통해 발견한 12가지 문제를 해결하고 snapshot 원본 전달로 Claude Code 수준의 정확도를 달성한 과정
AI Agent 기반 브라우저 자동화 시스템 구축기
Tauri(Rust) + Playwright MCP + LLM Agent 3계층 아키텍처로 브라우저 자동화 시스템을 구축한 과정
Remote WebView 아키텍처: 로컬 앱과 원격 서버 연동
Tauri 데스크톱 앱에서 원격 웹앱을 WebView로 로드하는 Remote WebView 패턴 구현기
TAURI_DEV_URL 환경변수로 개발/운영 환경 분리
Tauri 데스크톱 앱에서 개발 서버, Remote WebView, 로컬 번들 세 가지 프론트엔드 로딩 방식을 환경변수로 전환하는 과정과 시행착오
Redis 인증 설정과 K3s 분산 환경 시크릿 관리
REDIS_PASSWORD를 6개 서비스에 일관되게 적용하고, Docker Compose와 K3s 환경에서 시크릿을 안전하게 관리하는 방법
pyproject.toml dependencies 추출로 Docker 빌드 레이어 캐시 최적화
requirements.txt 없는 pyproject.toml 프로젝트에서 Docker 레이어 캐시를 최대한 활용하기 위해 의존성만 선별 추출하는 방법
롯데홈쇼핑 폐쇄망 서버 SSH 터널링과 접속 구성
방화벽으로 막힌 폐쇄망 환경에서 SSH 포트 포워딩으로 ArgoCD, Jenkins, MinIO에 접근하고 배포하는 실전 가이드
레포지토리 스케줄러의 분산 환경 전환
APScheduler와 Redis 분산 락을 활용한 멀티 POD 환경의 레포지토리 자동 동기화 스케줄러 구현
Redis로 멀티 Pod 파일 업로드 진행률 동기화하기
Kubernetes 멀티 Pod 환경에서 문서 처리 파이프라인(텍스트 추출, 청킹, 임베딩)의 진행률을 Redis로 중앙 관리하고 SSE로 실시간 전달하는 시스템 구현.
파일 기반 설정에서 Redis + API 기반 분산 설정으로 전환하기
단일 서버 config.json 파일 기반 설정 관리에서 Redis + DB + FastAPI 기반 분산 설정 시스템으로 전환한 과정. 멀티 Pod 환경에서 설정 불일치 문제 해결.
llama.cpp 서버 운영기: ROCm GPU에서의 삽질과 해결
AMD GPU 환경에서 llama.cpp 서버를 운영하며 겪은 ROCm GPU page fault, 메모리 크래시, Vulkan 전환까지의 실전 트러블슈팅 기록
AMD GPU에서 LLM 돌리기: Vulkan vs ROCm 비교
XGEN 모델 서버에서 AMD GPU로 LLM을 서빙할 때 Vulkan과 ROCm 백엔드를 선택하는 기준, mlock 설정, GPU 감지 fallback chain 구현까지 실전 비교
멀티 GPU LLM 배포: GPU 선택 및 레이어 오프로딩 전략
XGEN 모델 서버에서 멀티 GPU 환경을 지원하는 방법 - main_gpu, split_mode, tensor_split, n_gpu_layers를 통한 레이어 오프로딩 설계와 ProcessMan…
GPU 상태 모니터링 및 자동 모델 배포 시스템
amdsmi → pynvml → torch.hip → torch.cuda 순서의 Fallback Chain으로 GPU를 감지하고, xgen-model이 UI 설정에 따라 자동으로 vLLM 또는 ll…
임베딩 전용 서버 분리와 대용량 배치 처리 최적화
임베딩 모델을 LLM 서빙과 분리한 전용 서버 아키텍처 설계. switch-backend 기반 멀티모드 서빙과 batch size 512에서 2048로 확대한 대용량 문서 배치 처리 최적화 과정.
Embedding 모델 서빙: batch size 최적화로 긴 문서 처리
XGEN 모델 서버에서 임베딩 모델을 서빙할 때 batch size 512→2048 증가로 긴 문서 임베딩을 지원하고, n_ubatch와 n_batch 차이, CPU 전용 처리 결정까지의 실전 기록
Redis 기반 SSE 세션 상태 공유: 멀티 POD 환경
Kubernetes 멀티 POD 환경에서 SSE 문서 업로드 세션 상태를 Redis로 동기화한 구현 과정
HuggingFace 모델 검색 및 다운로드 자동화
XGEN 모델 서버에서 HuggingFace Hub API로 모델을 검색하고, 백그라운드로 다운로드하며 진행상황을 추적하는 DownloadService 구현과 xgen-app(Tauri)과의 연동
OpenAI 호환 API 서버 직접 만들기
XGEN 모델 서버에서 /v1/chat/completions, /v1/embeddings 등 OpenAI 호환 엔드포인트를 FastAPI로 구현하고, llama-server와 vLLM 백엔드를 프록…
로컬 LLM 모델 관리 시스템: 로드/언로드/활성화 라이프사이클
XGEN 모델 서버에서 LLM 모델의 로드, 언로드, 활성화 상태를 관리하는 ProcessManager 라이프사이클 설계 - ModelState, auto activate, loading_statu…
vLLM에서 llama.cpp로: LLM 서빙 아키텍처 통합 마이그레이션
vLLM Ray Serve 분산 구조에서 통합 모델 서빙 서비스로 마이그레이션한 과정. 백엔드 스위칭 매니저 설계, llama.cpp와 vLLM 런타임 전환까지.
vLLM vs llama.cpp: 백엔드 스위칭 아키텍처 설계
XGEN 모델 서버에서 vLLM과 llama-server를 런타임에 전환하는 UnifiedBackendManager 설계, switch-backend API, model_type에 따른 분기 전략,…
Jenkins executor 수 최적화: 6개 서비스 동시 빌드를 위한 성능 튜닝
numExecutors 2에서 6으로 증가, K3s 노드 리소스 계획, 빌드 큐 병목 해소 과정
Jenkins JCasC로 6개 서비스 빌드 Job 자동 생성하기
Configuration as Code와 seed job Groovy DSL로 Jenkins 파이프라인 수동 클릭 없이 자동 생성하는 과정
Istio Gateway HTTPS 설정과 TLS 인증서 관리
Istio Gateway에서 HTTPS 서버 설정, HTTP→HTTPS 리다이렉트, credentialName 기반 TLS 관리 구현 과정
Docker Compose로 개발 환경 구성: .env 기반 설정 관리와 서비스 설정 파일 분리 전략
XGEN 백엔드 게이트웨이의 설정 파일을 local/docker/k8s 환경별로 분리하고, .env 파일로 민감 정보를 관리하는 실전 구성 가이드
Let's Encrypt + cert-manager로 K3s HTTPS 자동화
K3s 환경에서 cert-manager와 Istio를 연동해 TLS 인증서를 자동 발급/갱신하는 과정과 iptables 포트 포워딩 삽질기
Docker BuildKit 캐시 전략과 NO_CACHE 옵션
Jenkins CI에서 Docker 빌드 캐시가 오히려 독이 된 상황, NO_CACHE 파라미터와 builder prune 자동화로 해결한 과정
Jenkins RBAC: Kubernetes watch 권한 누락으로 인한 배포 실패 삽질기
kubectl rollout status가 내부적으로 watch 권한을 요구한다는 사실을 몰라서 겪은 Jenkins RBAC 트러블슈팅
Dockerfile 최적화: COPY --chown vs chown -R 레이어 중복 제거
Frontend Dockerfile에서 불필요한 chown -R 레이어를 COPY --chown으로 통합해 이미지 크기와 빌드 시간을 줄인 최적화 사례
Kubernetes Downward API로 멀티 Pod 세션 라우팅 구현
POD_NAME과 POD_IP를 컨테이너 환경변수로 주입해 멀티 Pod 환경에서 세션 스티키니스와 분산 추적을 구현한 방법
FastAPI 워크플로우 엔진: 접근 제어와 감사 로깅 구현
FastAPI 기반 워크플로우 엔진에 엔터프라이즈급 권한 관리와 감사 추적 시스템을 구축한 과정. 실행 권한 체계 설계, IO 로깅 미들웨어, Redis 기반 세션 관리까지.
Kubernetes Health Probe 타임아웃 설정으로 Pod 재시작 방지
initialDelaySeconds, timeoutSeconds, failureThreshold 조정으로 무거운 AI 서비스의 불필요한 Pod 재시작을 방지한 실전 사례
문서 임베딩 파이프라인: 청킹 옵션과 전처리 전략
xgen-retrieval에서 PDF/DOCX/PPT 문서를 임베딩 파이프라인으로 처리하는 과정 - force_chunking, advanced chunking, OCR 처리, 텍스트 정제, 메타데…
K3s + ArgoCD로 AI 플랫폼 GitOps 배포 구축하기
K3s 기반 Kubernetes 클러스터에 ArgoCD, Istio, Grafana, Prometheus를 구성하여 AI 플랫폼 6개 마이크로서비스를 GitOps 방식으로 운영 배포한 과정.
데스크톱 앱에서 터널 URL 표시 UX 개선
Bore 터널 연결 시 사용자에게 원본 로컬 URL을 보여주고 내부적으로 터널 URL을 사용하는 이중 URL 전략
Bore 프로토콜로 터널 통신 구현하기
TCP 기반 bore 터널 프로토콜을 Rust로 직접 구현하여 로컬 LLM을 외부에 노출하는 과정
camelCase 직렬화로 Rust와 Frontend 데이터 통신
Tauri IPC에서 serde rename_all을 활용하여 Rust의 snake_case와 TypeScript의 camelCase 간 자동 변환 전략
Tauri Sidecar로 Python 워크플로우 엔진 자동 시작
Tauri 데스크톱 앱에서 Python 기반 xgen-workflow와 xgen-embedding을 sidecar로 자동 관리하는 구현기
Late Chunking과 Sparse Embedding: 차세대 검색 파이프라인
xgen-workflow에서 Late Chunking 기법으로 문서 컨텍스트를 보존하는 청킹과, Sparse Embedding을 결합한 차세대 RAG 검색 파이프라인 설계 및 구현
앱 모드 전환: Standalone vs Connected 아키텍처
Tauri 데스크톱 앱에서 Standalone, Service, Connected 세 가지 모드를 런타임에 전환하는 아키텍처 설계
API 추상화 레이어: 로컬 LLM과 원격 서비스 통합
Tauri 데스크톱 앱에서 Standalone(로컬 LLM), Service(Python Sidecar), Connected(원격 Gateway) 세 모드를 단일 API 인터페이스로 통합한 추상화 …
Tauri 앱 빌드: Linux deb/rpm 패키지 설정과 Remote WebView 아키텍처
Tauri 2.0으로 XGEN 데스크톱 앱을 Linux 배포 패키지(deb, rpm)로 빌드하는 설정과, frontendDist를 외부 URL로 지정하는 Remote WebView 구성
Tauri + Docker: 데스크톱 앱의 컨테이너화 전략
Tauri 데스크톱 앱의 프론트엔드를 Docker로 컨테이너화하고, 멀티 스테이지 빌드와 3가지 Compose 프로필로 개발/운영 환경을 분리한 과정
vLLM 모델 배포: 샘플링 파라미터 튜닝 가이드
xgen-model에서 vLLM과 llama-server 두 백엔드의 핵심 파라미터를 정리하고, GPU 메모리 활용률, 컨텍스트 길이, 배치 설정이 성능에 미치는 영향을 실전 경험으로 정리
Iterative RAG: 반복 검색으로 복잡한 질문 답변하기
xgen-workflow에서 단순 RAG의 한계를 넘어 Iterative 방식으로 반복 검색하며 컨텍스트를 보완하는 4단계 파이프라인 구현 - Query Expansion, Large-Scale S…
Agent Xgen Node: AI 에이전트를 워크플로우 노드로
LLM 에이전트를 워크플로우의 재사용 가능한 노드로 설계한 과정. Preparer-Executor 패턴, 멀티 프로바이더 지원, ReAct 도구 호출, 스트리밍/논스트리밍 통합까지.
aiohttp로 임베딩 API 클라이언트 만들기: 타임아웃과 배치 분할 최적화
llama.cpp 임베딩 서버와 통신하는 aiohttp 비동기 클라이언트를 구현하며 세션 재사용, 커넥션 타임아웃 설정, 대용량 텍스트 배치 분할, 지수 백오프 재시도 로직을 최적화한 과정.
Qdrant 하이브리드 검색: Sparse + Dense 벡터 통합
xgen-retrieval에서 Qdrant의 Prefetch+Fusion API로 BM25 Sparse Vector와 Dense Embedding을 결합하는 하이브리드 검색 구현, Full-Text…
Sparse Vector와 Full-Text Index 하이브리드 검색 구현
Qdrant에 Sparse Vector(BM25/SPLADE)와 Full-Text Index를 함께 구성하고, RRF Fusion으로 Dense+Sparse 하이브리드 검색을 구현한 과정
문서 디렉토리 트리 UI: 파일 카운트와 컴팩트 레이아웃
XGEN 2.0 문서 관리 시스템의 디렉토리 트리 컴포넌트 구현기 — 파일 카운트 배지, 컴팩트 레이아웃, 검색 하이라이팅, 점진적 로딩까지
클라이언트 연결 끊김에도 워크플로우 실행 유지하기
SSE 스트리밍 중 클라이언트가 연결을 끊어도 워크플로우 실행을 끝까지 완료하는 설계. Proactive Messaging 패턴, Deploy API, 결과 저장 분리 전략.
벡터DB 컬렉션 문서 요약 및 페이지네이션 API 설계
Qdrant scroll() API로 컬렉션 내 문서를 페이지네이션하고, document_id 기준으로 그룹핑해 디렉토리 트리용 요약 엔드포인트를 설계한 과정
워크플로우 실행 취소(Cancellation) 메커니즘 구현
SSE 스트리밍 중인 배치 워크플로우 실행을 안전하게 취소하는 메커니즘. 인메모리 플래그, 배치 그룹 경계 체크, Graceful Shutdown 패턴으로 데이터 무결성을 보장한다.
Python 싱글턴 풀 패턴으로 배치 실행 메모리 누수 해결하기
RAG 워크플로우를 배치로 100건 이상 반복 실행할 때 발생하는 메모리 누수를 싱글턴 풀 패턴으로 해결한 과정. LLM 클라이언트, 검색 캐시, RAG 서비스의 객체 재사용 설계와 캐시 비활성화의…
RAG 서비스의 토큰 관리와 컨텍스트 윈도우 최적화
xgen-workflow Iterative RAG에서 vLLM 32K 컨텍스트 한계를 관리하는 TokenBudgetManager 구현 - 한글/영문 토큰 추정, 배치 필터링 토큰 제한, 압축 단계 …
SSE 스트리밍으로 대규모 배치 워크플로우 결과 전달하기
xgen-workflow에서 100개 이상 테스트 케이스를 배치 처리하며 진행상황을 SSE로 실시간 전달하는 아키텍처 - batch_results에서 progress-only 방식으로의 전환, 취소…
SSE 기반 워크플로우 테스터: 실시간 실행 결과 스트리밍
수백 개의 테스트 케이스를 배치로 실행하면서 SSE로 실시간 진행률을 전송하는 워크플로우 테스터 구현기. 배치 버퍼링, 메모리 최적화 v9, DB 분리 전략까지.
문서 처리 서비스에 DeepSeek 지시문 적용하기
vLLM 기반 DeepSeek 모델을 문서 메타데이터 자동 생성 파이프라인에 통합하고 지시문을 최적화한 과정
Admin 모델 서빙 매니저: GPU 현황과 모델 배포 UI
XGEN 2.0의 모델 서빙 관리 UI 구현기 — 다중 백엔드(vLLM/llamacpp/sglang) 지원, GPU 자동 감지, HuggingFace 검색, safetensors 샤드 그룹화까지
XGEN 1.0 프론트엔드 모델 관리 UI 구현
Next.js와 TypeScript로 GPU 모델 관리, 실시간 모니터링, 워크플로우 관리 UI를 구현한 과정. XGEN 1.0 플랫폼의 관리자 대시보드 설계까지.
Workflow Execution Panel: 검증과 에러 핸들링 UI 패턴
XGEN 2.0 워크플로우 에디터의 실행 패널 구현기 — 3단계 검증 레이어, 타입 가드 기반 출력 분기, SSE 스트리밍 실행, 일시정지/재개까지
FastAPI 워크플로우 엔진에 Qdrant 하이브리드 검색 붙이기
FastAPI 기반 워크플로우 엔진과 Qdrant 벡터 DB를 결합하여 Dense+Sparse 하이브리드 검색 파이프라인을 구축한 과정. Circuit Breaker 패턴으로 장애 전파 차단까지.
SSE 기반 파일 업로드 진행률 표시 + 취소 기능
문서 업로드의 OCR/임베딩/LLM 단계별 진행률을 SSE로 실시간 표시하고, AbortSignal로 개별/전체 취소를 구현한 과정. SSE 재연결 로직, Next.js API Route 프록시까지…
Gateway 서비스 매핑: LLM/Crawler/ML 통합 구성
Rust API Gateway에서 YAML 기반 서비스 매핑으로 8개 마이크로서비스의 모듈별 라우팅을 구성한 과정
vLLM + llama.cpp GPU 모델 서빙 최적화 실전기
대규모 언어 모델의 효율적인 서빙을 위해 vLLM과 llama.cpp 기반 추론 엔진을 구축한 과정. GPU 리소스 최적화, 동적 배칭, CUDA 메모리 관리까지 프로덕션 경험을 정리한다.
MinIO 기반 모델 선택 UI: 로딩 상태와 에러 처리
XGEN 2.0의 MinIO 오브젝트 스토리지에서 LLM/임베딩 모델을 선택하는 UI 구현기 — 3단계 상태 분기 렌더링, 이중 입력 모드, 모델 그룹화, Adapter 패턴까지
인증 플로우 개선: 토큰 검증과 리프레시 처리
XGEN 2.0 프론트엔드의 인증 시스템 구현기 — CookieProvider Context, apiClient 자동 토큰 갱신, AuthGuard 깜빡임 방지, Tauri 다중 모드까지
2GB 파일 업로드를 위한 프록시 body size 설정
Rust Gateway에서 대용량 파일 업로드를 지원하기 위한 스트리밍 프록시와 body size 제한 설정
Rust로 API Gateway 만들기: JWT 검증 + CORS + 프록시
Axum 기반 Rust API Gateway의 JWT 인증, CORS 설정, 리버스 프록시, WebSocket 프록시 구현 과정
YAML + 환경변수 이중 설정 파싱 시스템
Rust Gateway에서 YAML 파일과 환경변수를 결합한 다중 계층 설정 관리 시스템 구현
데이터셋 컬럼 관리: 삭제/치환/연산 모달 컴포넌트 설계
XGEN 2.0 데이터 프로세서의 13개 모달 컴포넌트 설계 — 단일 책임 모달 패턴, 3단 사이드바 네비게이션, PyArrow 콜백 코드 에디터까지
HuggingFace 업로드 모달: 파라미터 검증과 에러 핸들링
XGEN 2.0 데이터 프로세서에서 HuggingFace Hub으로 데이터셋을 업로드하는 모달 구현기 — 3단계 검증 레이어, 선택적 파라미터 처리, 관심사 분리까지
React Hot Toast로 알림 시스템 개선하기
XGEN 2.0 데스크톱 앱의 알림 시스템을 alert/confirm에서 react-hot-toast 기반으로 전환한 과정 — 커스텀 삭제 확인, 키보드 지원, 30개 이상의 도메인 특화 함수까지
데이터 프로세서 UI: 파일 업로드/내보내기/통계 대시보드
XGEN 데스크톱 앱의 데이터 프로세서 구현기. DataStation/DataProcessor 컴포넌트, 13개 모달 시스템, HuggingFace 연동, 기술통계 대시보드, PyArrow 콜백 코…
워크플로우 공유 권한 시스템: 읽기 전용 vs 편집 모드
XGEN 워크플로우 에디터에 공유 권한 체계를 구현한 과정. SectionGuard 컴포넌트, share_permissions 필드 설계, 소유권 판별 로직, 읽기 전용 모드 제어까지.
DocumentsGraph: 문서 관계 시각화 컴포넌트
D3.js force-directed graph로 RAG 문서의 청크-개념 관계를 시각화하는 컴포넌트 구현기 — 해시 기반 노드 색상, 줌/패닝, 전체화면 모달까지
비주얼 워크플로우 에디터: 노드 기반 AI 파이프라인 설계
React + SVG 기반 커스텀 캔버스 에디터를 직접 구현한 과정. 노드 드래그 앤 드롭, 베지어 엣지, 포트 스냅핑, Undo/Redo 히스토리, 셀렉션 박스, 예측 노드 자동 생성까지.
React에서 Undo/Redo 구현: 워크플로우 에디터 히스토리 관리
워크플로우 에디터에 Undo/Redo를 추가한 과정. Snapshot(Memento) 패턴 선택 이유, useHistoryManagement 훅 설계, 키보드 단축키, HistoryPanel UI까…
아이스크림몰 AI Search 구축 사례
교육전문 쇼핑몰 아이스크림몰에 AI 기반 통합 검색 시스템을 도입한 사례를 정리한다. 초당 5,000건 이상의 검색 트래픽 대응, 검색엔진 인프라 재구성, AI 모델 최적화 과정을 다룬다.
Vast.ai GPU 인스턴스 관리 API 사용법 정리
Vast.ai에서 GPU 인스턴스를 검색, 생성, 관리하는 REST API 사용법을 정리한다. 오퍼 검색 필터링, 인스턴스 생성/삭제, SSH 접속까지.
Morphik — 페이지 이미지 기반 문서 검색과 RAG 파이프라인
OCR/파싱 대신 페이지 이미지 자체를 활용하는 Morphik의 RAG 접근 방식을 정리한다. 비전 LLM 기반 문서 검색이 기존 텍스트 파싱 대비 정확도와 속도를 모두 확보하는 원리를 다룬다.
RAG 청킹 전략 — 문서 분할 방식 비교와 최적화
RAG 시스템의 문서 전처리 핵심인 청킹 전략을 정리한다. 문자 수 기반, 토큰 기반, 재귀적 분할, 시맨틱 청킹 등 다양한 분할 방식의 장단점과 검색 정확도에 미치는 영향을 다룬다.
RAG 챗봇 대화 기록 유지 — 메모리 관리 전략과 구현
RAG 기반 챗봇에서 대화 이력을 유지하고 관리하는 메모리 전략을 정리한다. 프롬프트에 이력 직접 삽입, 요약 메모리, 토큰 제한 윈도우 등 실용적인 대화 관리 방법을 다룬다.
RAG 고도화 개요 — Retrieval, Generation, 평가 전략 로드맵
RAG 시스템 고도화의 전체 로드맵을 정리한다. 청킹 전략, 질의 변형, 검색 알고리즘 최적화, 리랭킹 후처리, 프롬프트 엔지니어링, 생성 품질 평가까지 각 단계별 개선 포인트를 다룬다.
LangChain SemanticChunker — 의미 기반 텍스트 분할 가이드
LangChain의 SemanticChunker를 활용한 의미 기반 텍스트 분할을 정리한다. 문장 임베딩 유사도로 청크 경계를 결정하는 방식, breakpoint_threshold 설정, RAG 검…
LangChain PydanticOutputParser — LLM 출력을 구조화된 데이터로 변환
LangChain의 PydanticOutputParser를 활용해 LLM 출력을 타입이 명확한 구조화된 데이터로 파싱하는 방법을 정리한다. Pydantic 모델 정의, 포맷 인스트럭션 생성, 유효성…
vLLM vs LMDeploy vs SGLang: LLM 서빙 프레임워크 3종 벤치마크 비교
vLLM, LMDeploy, SGLang 세 가지 LLM 추론 프레임워크의 처리 속도, 메모리 효율, 동시 요청 처리 능력을 벤치마크 기반으로 비교 분석한다.
SGLang vs vLLM 비교: LLM 추론 프레임워크 선택 가이드
UC 버클리에서 개발된 SGLang과 vLLM의 아키텍처, 처리량, 지연 시간, 메모리 효율을 비교 분석한다. RadixAttention vs PagedAttention, 배치 스케줄링 전략 차이까…
LLM 멀티턴 vs 싱글턴 대화: 차이점과 구현 전략
LLM 기반 챗봇에서 멀티턴(Multi-turn)과 싱글턴(Single-turn) 대화 방식의 차이를 정리한다. 대화 컨텍스트 유지, KV Cache 관리, 토큰 예산 전략까지.
OpenSearch 클러스터 구성 전략 — node.roles와 샤드 분산 설계
OpenSearch 클러스터의 노드 역할(cluster_manager, data, ingest, ml, search) 분리와 샤드 분산 전략을 정리한다. 노드 역할별 리소스 배분과 인덱스 분산 설계…
OpenSearch 샤드 구성 — number_of_shards 설정 가이드
OpenSearch에서 인덱스의 number_of_shards를 설정하는 기준을 정리한다. 데이터 분산 저장, 병렬 검색 처리, 수평 확장을 위한 샤드 수 결정 방법과 주의사항을 다룬다.
OpenSearch ML 모델 배포 시 메모리 99% 점유 원인과 해결법
OpenSearch에 Hugging Face 임베딩 모델을 배포한 후 메모리가 급격히 차오르는 원인을 분석한다. ML Commons 기반 추론의 모델 크기, JVM 힙, 동시 요청 처리, 노드 역할…
OpenSearch 벡터 인덱스 생성 가이드 — k-NN 인덱스 설정과 매핑
OpenSearch에서 k-NN 벡터 인덱스를 생성하는 기본 절차를 정리한다. knn_vector 필드 매핑, 엔진 선택(NMSLIB, Faiss, Lucene), space_type과 dimens…
OpenSearch 설치 및 빌드를 위한 서버 자원 확인 절차
OpenSearch 설치 전 필요한 서버 자원 점검 명령어를 정리한다. CPU, 메모리, 디스크, 커널 파라미터, Docker 환경, GPU 자원 등 안정적인 운영을 위해 확인해야 할 항목과 명령어…
단일 서버에서 OpenSearch 최적 배포 — 노드 역할 분리와 자원 격리
단일 서버에서 Docker Compose로 OpenSearch를 배포할 때 ML 노드 역할 분리와 자원 격리를 구현하는 방법을 정리한다. 데이터 노드와 ML 전용 노드를 분리하여 벡터 임베딩 기능을…
OpenSearch 성능 벤치마크와 TPS별 서버 구성 가이드
OpenSearch의 워크로드별 성능 벤치마크와 TPS 기준 서버 구성 사례를 정리한다. Trail of Bits 테스트 결과, CPU/RAM 사양별 권장 구성, GPU 노드 활용 시나리오를 다룬다…
목적에 맞는 OpenSearch Docker Compose 구성
OpenSearch를 Docker Compose로 배포하는 환경별 구성을 정리한다. 개발/PoC용 단일 노드 구성부터 프로덕션 멀티 노드 클러스터, ML 노드 분리 구성까지 목적에 맞는 docker…
RAG Document Loader — .doc/.docx 문서 변환과 파싱
LibreOffice CLI로 .doc 파일을 .docx로 변환하고 LangChain Docx2txtLoader로 파싱하는 파이프라인을 정리한다. 레거시 문서 포맷을 RAG 시스템에 적용하기 위한 …
한글 PDF 텍스트 + OCR 하이브리드 파서 구축기
한국어 PDF의 CID 인코딩 깨짐 문제를 해결하기 위한 텍스트 + OCR 하이브리드 파싱 파이프라인을 정리한다. pdfplumber와 Tesseract OCR을 결합해 이미지 기반 PDF까지 대응…
LangGraph 활용 시나리오 — RAG 고도화, 웹 검색, 대화 라우팅
LangGraph를 활용한 고급 RAG 파이프라인 구성 시나리오를 정리한다. 문서 기반 검색 + 요약, 웹 검색 결합, 대화 맥락 유지, 인간 개입 라우팅, 상태 기반 제어 방법을 다룬다.
“Qdrant를 위한 Semantic Chunking — 임베딩 기반 문서 분할”
“Qdrant에 저장할 문서를 의미적으로 분할하는 Semantic Chunking 방법을 정리한다. 문장 임베딩 유사도로 청크 경계를 결정하고, 고정 길이 분할 대비 검색 정확도를 높이는 구현 방법…
LangChain과 Qdrant 통합 — Dense, Sparse, Hybrid 검색 구현
langchain-qdrant 모듈을 사용해 Qdrant를 LangChain과 연동하는 방법을 정리한다. Dense Vector, Sparse Vector, Hybrid 검색, 메타데이터 필터링, …
“Qdrant + FastAPI 문서 기반 RAG 파이프라인 구현”
“FastAPI와 Qdrant를 활용한 문서 기반 RAG 파이프라인 예제를 정리한다. 파일 업로드부터 확장자별 로더, 청킹, Qdrant 벡터 색인, Dense/Sparse/Hybrid 검색까지 전…
Qdrant Points — 벡터 데이터 CRUD와 Payload 필터링 가이드
Qdrant의 핵심 데이터 단위인 포인트(Point)를 정리한다. 벡터와 페이로드를 포함하는 레코드의 생성, 조회, 수정, 삭제(CRUD) 연산과 배치 업서트, 스크롤 API 사용법을 다룬다.
Qdrant 개발 및 테스트 환경 설정 — Docker, 빌드, 포트 구성
Qdrant를 개발/테스트 환경에서 실행하고 관리하는 방법을 정리한다. Docker 실행, 소스 빌드, REST/gRPC 포트 설정, 분산 클러스터 네트워크 구성을 다룬다.
Qdrant Multivector Reranking — ColBERT 멀티벡터 저비용 운용 전략
Qdrant에서 ColBERT 같은 Late-Interaction 모델의 멀티벡터를 효율적으로 운용하는 방법을 정리한다. RAM 절감, 삽입 지연 최소화, 2단계 검색(oversample + res…
Qdrant Payload — 벡터에 메타데이터 저장하고 필터링하기
Qdrant의 Payload 기능을 정리한다. 벡터에 JSON 형태의 부가 정보를 저장하고, 텍스트/숫자/날짜/위치 등 다양한 타입을 활용한 필터링과 패싯 검색 구현 방법을 다룬다.
Qdrant Optimizer — 세그먼트 병합과 인덱스 자동 최적화
Qdrant의 자동 최적화(Optimizer) 기능을 정리한다. 세그먼트 병합, 디스크 공간 회수, HNSW 인덱스 자동 생성, Proxy Segment와 Copy-On-Write 전략에 의한 무중…
FastEmbed — ONNX 기반 경량 고성능 임베딩 라이브러리
Qdrant의 FastEmbed 라이브러리를 정리한다. ONNX Runtime 기반으로 PyTorch 없이 경량 임베딩을 생성하는 방법, 서버리스 환경 활용, MTEB 벤치마크 성능 비교를 다룬다.
Qdrant GPU 인덱싱 가속 — Docker 이미지와 설정 가이드
Qdrant v1.13.0부터 지원하는 GPU 인덱싱 가속 기능을 정리한다. GPU 전용 Docker 이미지 사용법, production.yaml gpu 블록 설정, CUDA/Vulkan 디바이스 …
Qdrant Capacity Planning — RAM, 디스크, CPU 산정 가이드
Qdrant 벡터 데이터베이스의 용량 계획을 정리한다. 벡터 수와 차원에 따른 RAM 산정 공식, HNSW 오버헤드, 디스크/mmap 전략, CPU 코어 수 결정 기준을 다룬다.
Qdrant 하이브리드 검색 + ColBERT 재랭킹 구현 가이드
Qdrant에서 Dense, Sparse, Late-Interaction 임베딩을 한 컬렉션에 저장하고 하이브리드 검색 후 ColBERT로 재랭킹하는 전 과정을 정리한다. Python 예시 코드와 …
Hugging Face 데이터셋을 Qdrant에 로드하고 검색하기
Hugging Face에 공개된 사전 임베딩 데이터셋을 Qdrant에 로드하여 즉시 벡터 검색을 실습하는 방법을 정리한다. arxiv-titles 데이터셋 예시로 대규모 벡터 업로드와 검색 과정을 …
Qdrant로 코드베이스 시맨틱 검색 구현하기
Qdrant를 활용해 코드베이스에 시맨틱 검색을 적용하는 방법을 정리한다. 자연어 질의용 sentence-transformers와 코드 유사도 검색용 jina-embeddings-v2-base-co…
Qdrant Similarity Search — 벡터 유사도 검색 API 완벽 가이드
Qdrant의 유사도 검색(Similarity Search) API를 정리한다. k-NN 기반 벡터 검색, Query API 통합 인터페이스, 스코어 부스팅, 필터 결합 등 고속 유사도 검색 방법을…
Qdrant로 대규모 PDF 검색 확장하기 — ColPali 멀티벡터 최적화
Qdrant에서 ColPali/ColQwen2 비전 LLM의 멀티벡터로 대규모 PDF를 검색하는 방법을 정리한다. Mean Pooling으로 벡터 수를 축소하고 2단계 검색(HNSW + rescor…
Qdrant Hybrid Queries — 다중 벡터 검색과 Fusion 전략
Qdrant의 Query API를 활용한 하이브리드 검색 전략을 정리한다. Named Vector 결합, Dense/Sparse 퓨전, prefetch 다단계 검색, 점수 보정과 비즈니스 로직 반영…
Qdrant 데이터 탐색 — 추천, Discovery, 그룹 검색 API
Qdrant의 벡터 검색 외 데이터 탐색 API를 정리한다. 긍정/부정 예시 기반 추천(Recommend), Discovery 검색, 그룹화 결과 분석, 랜덤 샘플링 등 다양한 데이터 탐색 방법을 …
Qdrant 분산 배포 — 클러스터 노드 수 결정과 복제 전략
Qdrant의 분산 배포 구성을 정리한다. 비용, 내구성, 성능 우선순위에 따른 노드 수 결정, 샤드 복제(replication) 전략, 장애 허용 구성 방법을 다룬다.
Qdrant Async API — Python 비동기 벡터 검색 클라이언트 활용
Qdrant의 Python AsyncQdrantClient를 활용한 비동기 벡터 검색을 정리한다. FastAPI/Quart 환경에서의 비동기 CRUD, gRPC 비동기 통신, 동시성 성능 향상 전략…
Static Embedding 다시 주목해야 할까
최근 자원-제약 환경에서 정적 임베딩(static embedding)이 재조명되고 있다. 트랜스포머 계열 모델이 성능 면에서 우위를 점하고 있음에도, 정적 임베딩은 속도·메모리 이점을 앞세워 적지 …
Qdrant Collection — 컬렉션 생성, 설정, 고급 기능 가이드
Qdrant의 핵심 개념인 컬렉션(Collection)을 정리한다. 거리 측정 방식(Cosine, Euclid, Dot), 벡터 차원 설정, 샤딩, 레플리카, Write Ahead Log 등 컬렉션…
Qdrant Vectors — Dense, Sparse, Multivector 벡터 유형 가이드
Qdrant에서 사용하는 벡터의 개념과 유형을 정리한다. Dense Vector, Sparse Vector, Named Vector, Multivector의 차이와 각 유형의 설정 방법, 양자화(Q…
Qdrant 시맨틱 검색 튜토리얼 — 5분 만에 검색 엔진 만들기
Qdrant와 Sentence Transformer를 활용해 간단한 시맨틱 검색 엔진을 만드는 튜토리얼을 정리한다. NeuralSearcher 클래스 구현, 쿼리 임베딩, 필터 결합 검색까지 다룬다…
Qdrant Storage — 벡터 저장 구조와 메모리/디스크 전략
Qdrant의 세그먼트 기반 저장 구조를 정리한다. 벡터와 페이로드의 In-memory, Memmap, On-disk 저장 방식, WAL 설정, 버전 관리 전략을 다룬다.
Qdrant Filtering — Payload 기반 필터링 조건과 구문 가이드
Qdrant의 벡터 검색에서 payload와 ID 기반 필터링을 적용하는 방법을 정리한다. must/should/must_not 논리 연산자, 범위/매칭/지리 필터, 중첩 필터 구문까지 다룬다.
Qdrant + LangChain 연동 — 벡터 스토어와 Retriever 설정 가이드
langchain-qdrant 모듈로 Qdrant를 LangChain 벡터 스토어로 활용하는 방법을 정리한다. Dense/Sparse/Hybrid 검색 설정, 메타데이터 필터링, Retriever …
Qdrant Indexing — 벡터 인덱스와 페이로드 인덱스 구성 가이드
Qdrant의 인덱싱 구조를 정리한다. HNSW 기반 벡터 인덱스, 페이로드 필드별 인덱스 타입, 인덱싱 임계값 설정, 필터링 성능 최적화를 위한 인덱스 구축 전략을 다룬다.
macOS에서 USB 포맷 실패 시 해결 방법
macOS의 디스크 유틸리티(Disk Utility)를 이용해 USB를 포맷하려고 할 때, 간혹 포맷이 실패하는 경우가 있다. 특히 “파티션 맵을 수정할 수 없습니다. (-69874)”라는 오류와 …
Scaled Dot-Product Attention 동작 원리와 수식 정리
스케일드 닷 프로덕트 어텐션은 쿼리(Query), 키(Key), 밸류(Value) 삼중 구조를 사용해, 유사도 계산 → 스케일 조정 → 확률 정규화 → 가중합의 네 단계를 거쳐 문맥 정보를 추출하는…
Transformer의 Query, Key, Value 행렬 생성 과정
Transformer 어텐션에서 Q, K, V 행렬이 생성되는 과정을 단계별로 정리한다. 입력 임베딩에서 가중치 행렬을 곱해 Query, Key, Value를 만들고 어텐션 스코어를 계산하기까지.
셀프 어텐션(Self-Attention) 동작 과정 단계별 정리
셀프 어텐션은 입력 시퀀스 내부에서 각 토큰이 다른 모든 토큰과의 관계를 학습해 문맥 정보를 재구성하는 메커니즘이다. 이 과정을 거친 출력은 이후 피드포워드 네트워크나 다음 레이어로 전달되어 문장 …
OpenSearch Nested Field로 다중 벡터 검색 구현하기
OpenSearch에서 nested 필드를 활용해 하나의 문서에 여러 벡터를 저장하고 검색하는 방법을 정리한다. 문단, 이미지, 설명 등 구성 요소별 벡터를 knn_vector로 인덱싱하는 매핑 설…
OpenSearch Vector Search 가이드 — Raw Vector와 Neural 검색 비교
OpenSearch의 벡터 검색 방식을 정리한다. knn 쿼리로 직접 벡터를 입력하는 Raw Vector 검색과, neural 쿼리로 텍스트/이미지를 자동 임베딩하는 방식의 차이와 사용법을 다룬다.
OpenSearch Exact k-NN Search — Scoring Script 기반 정확 벡터 검색
OpenSearch의 Scoring Script 기반 Exact k-NN 검색을 정리한다. 필터링 조건과 함께 정확한 벡터 유사도를 계산하는 브루트포스 방식의 사용법과 적용 시나리오를 다룬다.
OpenSearch Hybrid Search — 키워드와 시맨틱 검색 결합 가이드
OpenSearch 2.11의 Hybrid Search 기능을 정리한다. Search Pipeline을 통해 키워드 검색(BM25)과 Neural Search 결과를 결합하고 normalizatio…
OpenSearch Painless 스크립트로 벡터 유사도 계산하기
OpenSearch의 k-NN Painless Scripting Extension을 정리한다. knn_vector 필드에 대해 L2, cosine similarity, L1 등의 거리 함수를 Pai…
OpenSearch Approximate k-NN — 근사 벡터 검색 알고리즘과 설정 가이드
OpenSearch에서 대규모 벡터 데이터를 빠르게 검색하기 위한 Approximate k-NN(ANN) 기능을 정리한다. NMSLIB, Faiss, Lucene 기반 알고리즘의 차이와 HNSW/I…
OpenSearch 벡터 인덱싱 성능 최적화 가이드
OpenSearch에서 대량 벡터 데이터를 빠르게 색인하기 위한 최적화 설정을 정리한다. Refresh Interval 비활성화, 레플리카 제거, 네이티브 메모리 프리로드, 병렬 인제스트 등 색인 …
OpenSearch 3.0 GPU 기반 원격 벡터 인덱스 구축 가이드
OpenSearch 3.0의 GPU 가속 원격 인덱스 빌드 기능을 정리한다. Faiss HNSW + FP32 벡터 대상으로 GPU를 활용해 인덱스 구축 속도를 높이고 CPU 대비 비용을 절감하는 방…
OpenSearch Radial Search — 유사도 임계값 기반 반경 벡터 검색
OpenSearch의 Radial Search(반경 검색) 기능을 정리한다. Top-k 방식 대신 거리 또는 유사도 점수 임계값을 기준으로 벡터를 검색하는 방법과 max_distance, min_s…
Dropout이란? PyTorch 신경망에 Dropout 적용하기
딥러닝 모델의 과적합(Overfitting)을 방지하는 Dropout 기법의 원리와 PyTorch에서 신경망에 적용하는 방법. 훈련/평가 모드 전환, 드롭 확률 설정까지.
GPT 모델 처음부터 만들기 (2) - 셀프 어텐션 구현
GPT 구현 시리즈 2편. 셀프 어텐션 메커니즘의 원리를 이해하고 PyTorch로 직접 구현한다. Query/Key/Value 행렬 생성, 어텐션 스코어 계산, 마스킹까지.
Thompson Sampling: 탐색과 활용의 균형을 잡는 알고리즘
A/B 테스트, 추천 시스템, 광고 최적화에서 활용되는 Thompson Sampling 알고리즘의 원리. 베타 분포 기반 확률적 탐색으로 최적의 선택지를 찾는 Multi-Armed Bandit 문제…
GPT 모델 처음부터 만들기 (1) - 데이터 전처리와 기본 구조
GPT 언어 모델을 처음부터 구현하는 시리즈 1편. 텍스트 데이터 전처리, 문자 단위 토크나이저 구현, 입력/타겟 시퀀스 생성, 기본 신경망 구조 설계까지.
OpenSearch 벡터 검색 성능 최적화 가이드
OpenSearch에서 벡터 검색 성능을 향상시키는 전략을 정리한다. 세그먼트 수 축소, 벡터 메모리 적재, 쿼리 결과 캐싱, source 필드 제외 등 쿼리 지연을 줄이기 위한 설정과 방법을 다룬…
OpenSearch UBI Schema — 사용자 행동 데이터 구조화와 검색 활용
OpenSearch의 UBI(Universal Business Insights) 스키마를 정리한다. 클릭, 뷰, 구매 등 사용자 행동 로그를 정형화하여 검색 품질 개선과 추천 시스템 구축에 활용하는…
“OpenSearch Learning to Rank(LTR) — 머신러닝 기반 검색 랭킹 핵심 개념”
“OpenSearch의 Learning to Rank(LTR) 기능의 핵심 개념을 정리한다. Feature Store, 판단 리스트(Judgment List), RankLib 모델 학습과 배포, 검…
KoBERT: 한국어 BERT 모델 소개와 파인튜닝 예제
KoBERT는 한국어 위키 5백만 문장으로 사전학습된 BERT 모델이다. 한국어 텍스트 분류, 감성 분석 등에 파인튜닝하는 방법과 BERTDataset, BERTClassifier 구현 코드를 정리…
OpenSearch & Dashboards 3.1.0 릴리즈 노트
OpenSearch 3.1의 주요 변경사항을 정리한다. GPU 가속 인덱싱 정식 적용, 검색 품질 향상, AI 에이전트 지원, Observability 개선 등 성능과 기능 양면의 업그레이드를 다룬…
OpenSearch Star-tree Index — 사전 집계로 Aggregation 성능 극대화
OpenSearch 2.18에서 실험적으로 도입된 Star-tree Index를 정리한다. 인덱싱 시점에 다차원 집계를 미리 계산해 저장함으로써 쿼리 시 Aggregation 성능을 극대화하는 구조…
OpenSearch 3.0.0 릴리즈 하이라이트 – 성능, 벡터 검색, 보안, AI 기능 대폭 강화
OpenSearch 3.0은 검색, 분석, 모니터링 및 AI 기반 애플리케이션을 위한 고성능 데이터 플랫폼으로 거듭났습니다. 이 버전에서는 범용 성능 향상, 벡터 데이터베이스 기능 개선, 보안 프레…
OpenSearch 사용자 사전 등록 방식에 따른 시스템 부하 테스트 결과
OpenSearch에서 사용자 정의 사전(user_dictionary)을 settings 직접 입력 방식과 txt 외부 파일 참조 방식으로 비교 테스트한 결과를 정리한다. 6만 건 사전 등록 시 성…
OpenSearch Embedding 모델 등록 및 활용
OpenSearch에서 OpenAI API를 사용해 임베딩 모델을 등록하고 자동 임베딩 생성 파이프라인을 구성하는 방법을 정리한다. ML Commons connector 설정부터 text_embed…
OpenSearch에서 OpenAI API 임베딩 모델 등록 및 사용 가이드
OpenSearch에서 OpenAI API 기반 임베딩 모델을 등록하고 인제스트 파이프라인으로 자동 벡터 생성을 구성하는 방법을 정리한다. connector 생성, 모델 배포, text_embedd…
커스텀 노드 에디터: 드래그 앤 드롭 + 엣지 스냅핑 구현
워크플로우 에디터의 핵심 인터랙션 구현. 노드 드래그 앤 드롭, 엣지 스냅핑(자동 연결), 포트 타입 호환성 체크, 줌/패닝 최적화까지 실전 구현기.
OpenSearch 인덱싱 서비스: 스트리밍 vs 배치 처리 비교
Rust 검색 엔진의 OpenSearch 인덱싱을 기존 배치 방식에서 스트리밍 방식으로 전환한 과정과, BatchOrchestratorService를 통한 통합 배치 파이프라인 설계를 다룬다.
Next.js 기반 AI 워크플로우 에디터 만들기 (from scratch)
Next.js 15 + React 19 + TypeScript로 무한 캔버스 기반 워크플로우 에디터를 처음부터 구현한 과정. Canvas, Node, Edge 컴포넌트 설계부터 패닝/줌, 그리드 배…
Tauri 2.0으로 AI 데스크톱 앱 만들기
Next.js 프론트엔드와 Rust 백엔드를 결합한 XGEN 데스크톱 AI 워크스테이션 개발기
Rust 검색 엔진에 Redis 캐싱 적용기
Axum 기반 Rust 검색 엔진에 Redis 캐싱 레이어를 추가하여 OpenSearch 필드 설정 조회 성능을 개선한 과정을 다룬다.
PostgreSQL과 MySQL 동시 지원하는 Rust DB 추상화 레이어 구현
커머스 검색 엔진에서 고객사별로 다른 DB를 사용하는 문제를 Rust의 트레잇 기반 추상화로 해결한 과정. 동적 디스패치, 스트리밍 쿼리, 커넥션 풀 캐싱까지.
커머스 상품 추천 검색 API 설계 (goods + marketing)
Rust 검색 엔진에서 상품, 마케팅, 이벤트 데이터에 대한 추천 검색어(recomword) API를 설계하고 구현한 과정. 인덱싱 파이프라인부터 Terms Aggregation 기반 자동완성, 문…
OpenSearch Aggregation 검색 구현 및 에러 핸들링 전략
Rust 기반 커머스 검색 엔진에서 OpenSearch Aggregation을 활용한 카테고리/브랜드/가격대 집계 검색과, 세마포어 기반 동시성 제한 및 타임아웃 에러 핸들링 전략을 다룬다.
OpenSearch 동의어(Synonym) 사전 관리 자동화
Rust 검색 엔진에서 DB 기반 동의어 사전을 OpenSearch에 자동 반영하는 파이프라인을 구축한 과정. SSH 업로드, 분석기 재로드, 멀티 인덱스 지원까지.
Rust 검색 엔진의 CI/CD 파이프라인 구축 (GitLab + EC2)
GitLab CI/CD로 Rust 검색 엔진의 동의어 사전 파일을 EC2에 자동 배포하고, 애플리케이션 내부에서 파이프라인을 트리거하는 구조를 설계한 과정.
GitLab CI/CD에서 EC2 배포 자동화: SCP + SSH 파이프라인 구축
synonym.txt 파일을 GitLab에서 EC2 OpenSearch 서버로 자동 배포하는 CI/CD 파이프라인 구축 과정. 12번의 삽질 끝에 완성한 .gitlab-ci.yml 실전 가이드
Rust 검색 엔진에서 SSH 터널링으로 원격 DB 접근하기
Rust 검색 엔진에서 ssh2 크레이트를 활용하여 OpenSearch 서버에 동의어 사전을 SSH/SFTP로 업로드하고, 분석기를 실시간 재로드하는 파이프라인을 구현한 과정을 다룬다.
Axum + OpenSearch: Rust 검색 API 아키텍처 설계
Axum 웹 프레임워크와 OpenSearch를 결합하여 커머스 검색 API를 설계한 과정. Handlebars 템플릿 기반 동적 쿼리, 필드 가중치 시스템, Aggregation 처리까지.
Handlebars 템플릿으로 동적 검색 쿼리 생성하기
Rust 검색 엔진에서 Handlebars 템플릿을 활용해 OpenSearch 쿼리를 동적으로 생성하는 방법. once_cell 싱글톤 레지스트리, 커스텀 헬퍼, DB 기반 필드 설정까지.
커서 기반 인덱싱 vs 전체 인덱싱: 성능 비교
Rust 검색 엔진에서 INDEX_YN 커서 패턴과 전체 인덱싱의 차이를 구현 코드와 함께 분석한다.
Rate Limiting이 적용된 검색 API 설계
Tokio Semaphore 기반 동시성 제어로 OpenSearch 과부하를 방어하는 Rust 검색 API Rate Limiting 구현기.
Rust로 커머스 검색 엔진을 처음부터 만들기
NestJS 기반 검색 서비스의 한계를 넘어, Rust로 이커머스 검색 엔진을 처음부터 설계하고 구현한 과정을 다룬다.
Tokenization 기법 정리: BPE, WordPiece, SentencePiece 비교
NLP에서 텍스트를 토큰으로 분할하는 주요 기법(BPE, WordPiece, SentencePiece)의 원리와 차이를 정리한다. BERT, GPT 등 Transformer 모델에서 사용하는 토크나…
Intel NPU 가속을 활용한 TinyLlama 챗봇 구현
Intel NPU Acceleration Library를 사용하여 TinyLlama 모델을 NPU에서 추론하는 챗봇을 구현한 과정. transformers 버전 호환성 문제와 NPU 가속 설정을 정…
Tauri - 크로스 플랫폼 앱 개발 프레임워크
Tauri 프레임워크의 개요와 아키텍처를 정리한다. Rust 백엔드와 WebView 기반 프론트엔드(React, Next.js)를 결합한 데스크톱 앱 개발 방식을 다룬다.
RxDB 란 무엇인가? (OpenSearch 연동)
RxDB(Reactive Database)의 개념과 Frontend 애플리케이션에서의 활용법을 정리한다. OpenSearch 연동을 통한 실시간 상태 변경 감지와 NoSQL 기반 로컬 DB 구성 방…
OJT 리팩토링과 Kotaemon RAG 구현기
기존 OJT 시스템의 한계를 해결하고자 전면 리팩토링을 진행했다. Kotaemon RAG 프레임워크를 도입하여 문서 기반 질의응답 성능을 대폭 개선한 과정을 공유한다.
Search API와 LLMOps Docker 구성기
검색 API 성능 최적화와 LLMOps 파이프라인의 Docker 환경 구성을 진행했다. 아키텍처 설계와 컨테이너화 전략, docker-compose 멀티 서비스 구성까지.
GliNER과 DPO-LoRA를 활용한 모델 파인튜닝
GliNER NER 모델과 DPO, LoRA를 결합한 파인튜닝 파이프라인 구축 과정. 데이터 수집부터 학습, 평가, 배포까지 실전 경험을 정리한다.
시맨틱 검색이란 - 이미지 의미 기반 검색 기술
이미지의 의미와 내용을 기반으로 유사 이미지를 검색하는 시맨틱 검색 기술을 정리한다. 기존 메타데이터 기반 검색과의 차이점, 벡터 임베딩 활용 방식을 다룬다.
가상 피팅(Virtual Try-On) 기술 개요
쇼핑몰 상품 이미지에서 의류 객체를 추출하고, 사용자 사진에 가상 피팅을 적용하는 AI 기술의 개념과 동작 원리를 정리한다.
이미지 검색 기술과 객체 추출 기반 검색
이미지를 바탕으로 유사한 상품을 검색하는 AI 기술을 정리한다. 쇼핑몰 상품 이미지에서 가방, 안경 등 객체를 추출하고 유사 이미지를 매칭하는 구조를 다룬다.
Code Assistant 개발기 - AI 기반 개발 도우미 시스템 구축
OpenAI API와 로컬 모델을 결합하여 개발자의 생산성을 높이는 AI 코드 어시스턴트를 구축한 경험담. RAG 기반 코드베이스 검색, VSCode 플러그인 연동까지.
순차처리 vs 일괄처리 vs 비동기 처리 비교
파이썬에서 순차 처리, 일괄(배치) 처리, 비동기 처리 세 가지 방식을 비교한다. 각 방식의 동작 원리, 성능 차이, 적합한 사용 시나리오를 코드 예제와 함께 정리한다.
파이썬 비동기 작업의 과부하 제어
비동기 I/O에서 동시 작업 수가 과도하면 오히려 성능이 저하되는 문제를 다룬다. Chunking/Batching 기법으로 작업을 일정 크기로 나누어 부하를 제어하는 방법을 정리한다.
파이썬 비동기 프로그래밍 소개
I/O 대기 시간을 활용하는 비동기 프로그래밍의 기본 개념을 정리한다. 커널의 I/O 처리 구조, 동시성 프로그램의 특징, 경쟁 상태 주의점 등 비동기 입문에 필요한 핵심을 다룬다.
파이썬 비동기 프로그래밍: 콜백과 퓨처
이벤트 루프 기반 비동기 프로그래밍의 두 가지 패러다임인 콜백과 퓨처를 비교한다. 콜백 지옥 문제와 퓨처를 통한 해결, 실전 코드 패턴을 정리한다.
파이썬의 MVC 패턴 구현
파이썬에서 MVC(Model-View-Controller) 디자인 패턴을 적용하는 방법을 정리한다. 애플리케이션을 Model, View, Controller로 분리하여 유지보수성과 확장성을 높이는 …
파이썬 multiprocessing - 병렬 처리로 성능 향상하기
파이썬 multiprocessing 모듈을 활용한 프로세스/스레드 기반 병렬 처리를 다룬다. 몬테 카를로 원주율 추정, Pool 기반 소수 검색, Queue와 포이즌 필을 통한 작업자 관리까지 실전…
파이썬 클래스의 `__enter__`와 `__exit__` 메서드
파이썬 with 문에서 자동 호출되는 __enter__와 __exit__ 특수 메서드를 정리한다. 컨텍스트 매니저 프로토콜 구현으로 파일, DB 연결, 락 등의 리소스를 안전하게 관리하는 방법을 다…
OpenSearch 기반 시맨틱 검색 로직 구현
OpenSearch에서 텍스트로 이미지를 검색하는 시맨틱 검색 로직을 정리한다. 벡터 임베딩 기반 유사도 검색과 전통적 키워드 검색을 결합한 하이브리드 검색 구조를 다룬다.
이미지 검색 기능 구현기 - 시맨틱 검색과 AI 분류의 만남
2024년 7월부터 9월까지 진행한 이미지 기반 상품 검색 시스템 개발기. CLIP 모델로 이미지를 벡터화하고 배경 제거, AI 분류를 결합한 시맨틱 이미지 검색 구현 과정이다.
벡터 기반 시맨틱 검색 구현기
Python FastAPI와 OpenSearch를 활용해 Dense Vector 기반 시맨틱 검색을 구현한 과정. 임베딩 모델 선택, 벡터 인덱스 설계, 하이브리드 검색까지.
챗봇 UI 개발기 - WebSocket 기반 실시간 스트리밍
WebSocket을 활용한 LLM 스트리밍 챗봇 UI 개발 과정. Next.js 프론트엔드와 FastAPI 백엔드 간 실시간 토큰 스트리밍, 대화 히스토리 관리까지.
상품 리뷰 분석 API 개발기 - 형태소 분석기 성능 최적화
상품 리뷰 텍스트 분석의 정확도를 높이기 위한 형태소 분석기 교체 작업. Elasticsearch nori 분석기 전환, 한국어 NLP 처리 최적화 과정을 정리한다.
해당 카테고리의 글이 없습니다.