본문으로 건너뛰기

개발 블로그를 위한 MCP 서버 구축기 (1): Git 기반 설계와 기본 구현

· 약 7분
Nam Young Kim
Data Fullstack Engineer

Claude Desktop에서 개발 블로그 콘텐츠를 실시간으로 조회할 수 있도록 하는 MCP 서버를 만들어보겠습니다.

🎯 들어가며

블로그 포스트와 기술 문서가 늘어나면서 한 가지 고민이 생겼습니다. "Claude에게 내 블로그 내용을 어떻게 알려줄 수 있을까?"

매번 대화할 때마다 복사-붙여넣기로 콘텐츠를 전달하는 건 비효율적입니다. 그래서 MCP (Model Context Protocol) 서버를 구축해서 Claude Desktop이 직접 블로그 콘텐츠에 접근할 수 있도록 만들기로 했습니다.

개발 블로그를 위한 MCP 서버 구축기 (2): 인메모리 역인덱스로 검색 기능 구현

· 약 8분
Nam Young Kim
Data Fullstack Engineer

키워드 기반 검색을 위한 역인덱스(Inverted Index)를 설계하고 가중치 기반 점수 시스템을 구현합니다.

🎯 들어가며

1편에서는 Git 기반 MCP 서버의 기본 구조와 콘텐츠 조회 기능을 구현했습니다. 하지만 블로그 포스트가 늘어나면 문제가 생깁니다.

"Python에 대한 글이 있나요?"

목록을 일일이 확인하는 건 비효율적입니다. 검색 기능이 필요합니다.

개발 블로그를 위한 MCP 서버 구축기 (3): Cold Start 1초 미만을 위한 캐싱과 에러 복구

· 약 7분
Nam Young Kim
Data Fullstack Engineer

Git Commit Hash 기반 캐싱으로 서버 시작 시간을 1초 미만으로 줄이고, 에러 복구 전략을 구현합니다.

🎯 들어가며

1편에서 Git 기반 아키텍처를, 2편에서 역인덱스 검색 기능을 구현했습니다. 하지만 실제로 사용해보면 한 가지 불편함이 있습니다.

"서버 시작이 너무 느려요"

매번 Claude Desktop을 열 때마다 Git clone과 인덱스 빌드가 발생합니다. 콘텐츠가 늘어날수록 점점 더 오래 걸리죠.

이번 편에서는 캐싱 시스템을 구현해서 Cold Start를 1초 미만으로 줄이고, 에러 복구 전략으로 안정성을 높입니다.

Bhattacharyya Distance (바타차리야 거리) 쉽게 이해하기

· 약 6분
Nam Young Kim
Data Fullstack Engineer

두 확률 분포의 차이를 측정하는 Bhattacharyya Distance를 실생활 예시와 수식으로 완벽히 이해하기

🎯 핵심 개념

Bhattacharyya Distance는 두 개의 확률 분포가 얼마나 다른지를 측정하는 지표입니다. 쉽게 말하면, 두 그룹이 얼마나 "구별 가능한지"를 숫자로 나타낸 것이죠.

📊 실제 예시 1: 키 분포

두 그룹의 키를 비교한다고 생각해봅시다:

  • 그룹 A: 한국 성인 남성 (평균 175cm, 표준편차 6cm)
  • 그룹 B: 한국 성인 여성 (평균 162cm, 표준편차 5cm)
그룹 A:        ___
/ \
/ \___
/ \
165 175 185 (cm)

그룹 B: ___
/ \
/ \___
/ \
155 162 170 (cm)

**Bhattacharyya Coefficient (BC)**는 두 분포의 겹치는 부분(overlap)을 측정합니다:

  • BC ≈ 0.3 → 겹치는 부분이 적음 → 두 그룹이 잘 구별됨
  • Bhattacharyya Distance = -ln(0.3) ≈ 1.2

기하평균의 의미와 수학적 감각 익히기

· 약 6분
Nam Young Kim
Data Fullstack Engineer

산술평균과 기하평균의 차이를 직관적으로 이해하고, 왜 Bhattacharyya Coefficient에서 기하평균을 사용하는지 알아봅니다

1️⃣ "각 점에서 두 확률의 기하평균을 더한 값" 상세 설명

단계별 이해

이산 분포 예시:

두 확률 분포가 있다고 가정:

    x₁   x₂   x₃   x₄   x₅
p: 0.3 0.2 0.1 0.2 0.2
q: 0.1 0.3 0.2 0.3 0.1

각 점에서의 계산:

x₁: √(0.3 × 0.1) = √0.03 = 0.173
x₂: √(0.2 × 0.3) = √0.06 = 0.245
x₃: √(0.1 × 0.2) = √0.02 = 0.141
x₄: √(0.2 × 0.3) = √0.06 = 0.245
x₅: √(0.2 × 0.1) = √0.02 = 0.141

합산 (BC):

BC = 0.173 + 0.245 + 0.141 + 0.245 + 0.141 = 0.945

시각적 이해:

각 점에서:
p(x) ━━━━━━━━━ (높이)
q(x) ━━━━ (높이)

기하평균 ━━━━━ (두 높이의 "균형잡힌" 중간)

이걸 모든 점에서 더함

VSCode Python 개발환경 완벽 설정 가이드 (2025)

· 약 6분
Nam Young Kim
Data Fullstack Engineer

Black, isort, Flake8을 Ruff 하나로 통합하고, 생산성을 극대화하는 VSCode 설정

들어가며

Python 개발을 하다 보면 코드 포맷팅, 린팅, import 정리 등 여러 도구를 조합해서 사용하게 됩니다. 기존에는 Black + isort + Flake8 조합이 일반적이었지만, 이제는 Ruff 하나로 이 모든 것을 대체할 수 있습니다.

이 글에서는 Ruff를 중심으로 한 VSCode Python 개발환경 설정을 정리합니다.

Data Fullstack Engineer로의 여정

· 약 2분
Nam Young Kim
Data Fullstack Engineer

안녕하세요! 이 블로그에 오신 것을 환영합니다.

저는 데이터 사이언티스트로 시작해 파트 리더, 팀 리더, Data PM을 거쳐 현재 Data Fullstack Engineer로 활동하고 있습니다. 이는 단순한 직급의 변화가 아닌, 경험의 확장을 통해 데이터의 전 영역을 이해하고 구현할 수 있게 된 여정입니다.