韓 국채 WGBI 편입…"전쟁 장기화땐 효과 반감"

https://plus.hankyung.com/apps/newsinside.view?aid=2026032940561&category=NEWSPAPER

 

韓 국채 WGBI 편입…"전쟁 장기화땐 효과 반감"

한국 국고채가 다음달 1일 세계국채지수(WGBI)에 편입되면서 주요국 국채에 투자하는 해외 자금이 국내로 유입된다. 증권가에서는 약 8개월에 걸쳐 520억~620억달러(약 70조~90조원) 규모의 투자금이

plus.hankyung.com

 

  • 한국 국고채가 4월 1일 세계 3대 채권지수인 WGBI에 공식 편입되며, 약 70조~90조 원의 해외 자금이 유입될 전망이다.
  • 이번 편입으로 전쟁 여파에 치솟았던 국채 금리가 약 0.2~0.3%포인트 정도 낮아지는 안정 효과가 기대된다.
  • 달러당 1500원을 넘나드는 불안한 환율 역시 해외 자금 유입(원화 매수 수요) 덕분에 다소 진정될 것으로 보인다.
  • 다만, 전쟁 장기화로 인해 지수 추종 자금 자체가 줄어들거나 환헤지(위험 회피) 비율에 따라 효과가 반감될 우려도 존재한다.
  • 정부는 전쟁이 단기전에 그칠 경우 환율이 1400원대 중반 아래로 내려갈 수 있을 것으로 조심스럽게 예측하고 있다.

 

 

* WGBI(World Government Bond Index)는 전 세계 주요 국가들의 국채(나라가 빌린 돈의 증서)를 한데 모아놓은 '국가 채권 종합 성적표'와 같다. 전 세계 큰손 투자자(연기금, 보험사 등)들은 이 지수를 보고 "여기에 포함된 나라들은 믿을 만하니 내 돈을 맡기자"라고 결정한다.

 

美·이란 전쟁에 탄소배출권 ETF 잘나가네

https://plus.hankyung.com/apps/newsinside.view?aid=2026032940201&category=NEWSPAPER

 

  • 최근 미국과 이란 간의 전쟁 여파로 천연가스 가격이 급등하자 대체재인 석탄 사용량이 늘어났다.
  • 석탄은 탄소를 많이 배출하기 때문에 기업들의 탄소배출권 수요가 폭증하며 관련 ETF 수익률이 10% 이상 급등했다.
  • 원유 가격 상승으로 미국 원유 생산 기업 관련 ETF도 높은 수익률을 기록했다.
  • 게임주(펄어비스 등)와 2차전지 소재 ETF 역시 신작 기대감과 산업 수요에 힘입어 상위권에 올랐다.
  • 투자 자금은 향후 성장이 기대되는 반도체 ETF와 안전하게 돈을 보관하는 파킹형 ETF로 대거 유입되었다.

"불확실성 커진 증시…머니마켓 ETF로 방어적 대응을"

https://plus.hankyung.com/apps/newsinside.view?aid=2026032940161&category=NEWSPAPER

 

  • 현재 증시는 기업 실적보다 전쟁 공포 등 '투자 심리'에 의해 흔들리는 불안정한 상태이다.
  • 불확실성이 클 때는 무리하게 주식을 사기보다 현금성 자산인 '머니마켓 ETF'를 활용해 방어적으로 대응해야 한다.
  • 전체 투자 포트폴리오에서 현금 비중을 20% 정도 유지하며 뇌동매매를 피할 것을 권고한다.
  • 하반기 유망 테마로는 AI 성장의 다음 단계인 '광통신(네트워크)' 분야를 주목해야 한다.
  • 국내 투자는 삼성전자·SK하이닉스 중심의 반도체 전략을 유지하되, 채권이 섞인 혼합형 상품으로 위험을 낮추는 것이 좋다.

닭고기 공급가 줄인상…'치킨플레이션' 오나

https://plus.hankyung.com/apps/newsinside.view?aid=2026032940601&category=NEWSPAPER

 

 

 

 

  • 고병원성 조류인플루엔자(AI) 확산으로 부모 닭(육용 종계) 살처분이 전년 대비 3.7배 급증하며 닭고기 공급이 줄었다.
  • 환율 상승에 따른 수입 사료비 부담까지 더해지면서 하림, 마니커 등 주요 업체가 공급가를 5~10% 인상했다.
  • 닭고기 소매가격이 1kg당 6612원을 기록하며 약 2년 9개월 만에 최고치를 경신했다.
  • 정부는 여름철 수요에 대비해 종란 800만 개 수입을 결정했으나, 수급 불안으로 인한 치킨값 추가 인상 우려가 크다.
  • 배달비와 이중가격제 영향으로 소비자가 체감하는 치킨 가격은 사실상 '3만 원 시대'에 진입했다.

'에너지 다변화' 수십년째 난제…한국은 왜 '탈중동' 못하나

https://plus.hankyung.com/apps/newsinside.view?aid=2026032940851&category=NEWSPAPER

 

  • 한국의 중동산 원유 의존도가 최근 다시 70%를 돌파하며 에너지 수급 구조의 취약성이 드러났다.
  • 중동 원유는 가격이 싸고 물량이 풍부하며 장기 계약이 가능해 경제적이지만, 전쟁 등 지정학적 리스크에 매우 취약하다.
  • 국내 정유 설비가 중동산 원유(중질유)에 최적화되어 있어, 미국산 등 다른 종류의 원유를 쓰면 효율이 떨어지는 구조적 문제가 있다.
  • 아람코(사우디)가 에쓰오일의 대주주인 것처럼, 자본과 공급망이 복잡하게 얽혀 있어 수입처 다변화가 쉽지 않다.
  • 진정한 '탈중동'을 위해서는 단순 수입처 변경을 넘어 정유 설비의 유연성 확보와 에너지 전환(수소·전기)이 필수적이다.

* 원유는 밀도와 황 함유량에 따라 크게 경질유(Light Oil), 중질유(Medium/Heavy Oil)로 나뉜다.

 

  • 물리적 특징: 중질유는 끈적거리는 점도가 높고 비중이 크다. 비유하자면 경질유가 '물'이라면, 중질유는 '꿀'이나 '타르'처럼 걸쭉한 상태라고 보면 된다.
  • 화학적 특징: 중질유는 불순물인 황(Sulfur) 성분이 많이 들어 있는 경우가 많다. 그래서 정제 과정에서 환경 오염 물질을 걸러내는 비용이 더 많이 든다.
  • 경제성: 중질유는 뽑아내기 어렵고 정제하기도 까다롭기 때문에 보통 경질유보다 가격이 저렴하다.

*

 

 

 

성과급 더 달라며…'평균연봉 1.6억' 삼성전자 노조, 5월 총파업 결의

https://plus.hankyung.com/apps/newsinside.view?aid=2026031805611&category=NEWSPAPER

 

  • 삼성전자 노조가 성과급 산정 방식 및 상한선 폐지 등을 요구하며 5월 총파업을 결의했다.
  • 쟁의행위 찬반투표 결과 93.1%라는 압도적인 찬성률로 법적 쟁의권을 확보한 상태이다.
  • 사측은 임금 인상 및 자사주 지급 등 파격적인 안을 제시했으나, 성과급 상한 폐지에서 의견 차이를 좁히지 못했다.
  • 파업 현실화 시 메모리 반도체 생산 차질로 인해 최대 9조 원의 영업이익 손실이 우려된다.
  • 업계에서는 중동 사태 등 대외 불확실성이 큰 시기에 고연봉 노조의 파업이 과도하다는 비판이 제기되고 있다.

'AI거품' 선 그은 젠슨 황 "올 주문액 1조弗 크게 넘을 것"

https://plus.hankyung.com/apps/newsinside.view?aid=2026031805261&category=NEWSPAPER

 

  • 젠슨 황 엔비디아 CEO는 올해 AI 칩 주문액이 1조 달러(약 1,500조 원)를 크게 넘어설 것이라고 발표했다.
  • AI 스타트업 투자를 통한 '매출 부풀리기' 논란에 대해, 실제 수요가 확실한 기업에 투자하는 것이라며 거품론을 일축했다.
  • 차세대 GPU인 블랙웰과 베라루빈 외에도 CPU, LPU 등 전 분야에서 기하급수적인 수요가 발생하고 있다고 강조했다.
  • 삼성전자와는 추론용 칩인 '그록(Groq)' 생산을 위해 협력 중이며, 중국 수출용 칩(H200) 판매 재개도 공식화했다.
  • 미래에는 AI 에이전트 수백만 명이 직원들과 함께 24시간 일하며 생산성을 극대화하는 시대가 올 것이라고 전망했다.

주춤하던 신용대출 급증…이달만 1.7조 늘어

https://plus.hankyung.com/apps/newsinside.view?aid=2026031803591&category=NEWSPAPER

 

 

  • 5대 시중은행의 신용대출 잔액이 이달에만 1.7조 원 넘게 늘어나며 4개월 만에 증가세로 돌아섰다.
  • 주택담보대출 규제가 강화되자 신용대출로 수요가 몰리는 '풍선효과'가 뚜렷하게 나타나고 있다.
  • 중동 사태 등으로 증시 변동성이 커지자, 이를 저가 매수 기회로 본 투자자들이 '빚투(빚내서 투자)'를 위해 마이너스 통장을 대거 개용했다.
  • 은행의 대기 자금인 요구불예금은 줄어들고 증시로 자금이 이동하는 '머니 무브' 현상이 심화되고 있다.
  • 향후 대형 공모주 청약 일정이 겹치면서 신용대출 증가세는 당분간 지속될 전망이다.

 

'금융지주 지배구조 개선' 딜레마 빠진 금융당국

https://plus.hankyung.com/apps/newsinside.view?aid=2026031803611&category=NEWSPAPER

 

  • 금융당국이 금융지주의 회장 연임 제한과 사외이사 독립성 강화를 골자로 한 '지배구조 개선안' 발표를 다음 달 이후로 연기했다.
  • 회장 연임 시 주주총회에서 더 까다로운 '특별결의'를 거치게 하는 방안 등 강력한 규제가 검토되고 있다.
  • 당국은 규제 수위와 적용 범위를 두고 고심 중이며, 은행뿐 아니라 비은행 금융지주와 상호금융까지 대상을 넓힐 가능성도 있다.
  • 성과급을 환수하는 '클로백(Clawback)' 제도와 주주가 보수 체계에 의견을 내는 '세이 온 페이' 도입도 논의 중이다.
  • 당장 이번 3월 주총에 반영하기 어려워진 만큼, 정책의 실효성과 추진 동력을 잃지 않기 위한 막판 조율이 길어지고 있다.

 

 

What are skills?

 

  • Skills는 Claude Code에게 특정 작업을 자동으로 수행하는 방법을 가르치는 재사용 가능한 Markdown 파일(SKill.md) 이다.
  • Claude는 skill의 description을 기준으로 사용자 요청과 매칭해 필요한 skill을 자동으로 활성화한다.
  • 개인 skills은 ~/.claude/skills에 저장되어 모든 프로젝트에서 사용된다.
  • 프로젝트 skills은 .claude/skills에 저장되어 repo와 함께 공유된다.
  • Skills는 필요할 때만 로드되며, 항상 로드되는 CLAUDE.md나 명령형 slash command와 다르다.

*동작 흐름

사용자 요청
   ↓
Claude 요청 분석
   ↓
Skill description과 비교
   ↓
매칭되는 skill 자동 로드
   ↓
해당 instructions 적용

 

Creating your first skill

  • Skill은 디렉토리 + SKILL.md 파일로 구성되며, frontmatter에 name과 description을 정의한다.
  • Claude Code는 시작 시 skill의 name과 description만 로드하고 전체 내용은 로드하지 않는다.
  • 사용자의 요청이 description과 의미적으로 매칭되면 skill 사용을 제안한다.
  • 사용자가 확인하면 SKILL.md 전체 내용을 context에 로드하여 작업을 수행한다.
  • Skill 충돌 우선순위는 Enterprise → Personal → Project → Plugins 순이다.

skill 위치

우선순위 Skill 유형 위치 특징 사용 목적 예
1 (가장 높음) Enterprise 조직 관리 환경 (관리자가 배포) 조직 전체에 강제 적용되는 규칙 회사 코드 리뷰 규칙, 보안 검사
2 Personal ~/.claude/skills/ 개인이 만든 skill, 모든 프로젝트에서 사용 개인 commit 메시지 스타일, 코드 설명 방식
3 Project project/.claude/skills/ 특정 repo와 함께 공유되는 skill 팀 coding standards, 프로젝트 문서 템플릿
4 (가장 낮음) Plugins 플러그인/확장 기능 내부 외부 도구나 plugin이 제공 IDE plugin skill, MCP plugin 기능

 

SKILL.md 작성

---
name: pr-description
description: Writes pull request descriptions when creating or summarizing PR changes
---

When writing a PR description:

1. Run `git diff main...HEAD`
2. Write the description with this format:

## What
Explain what the PR does

## Why
Why this change is needed

## Changes
- bullet list of changes

 

구조

skills/
   pr-description/
        SKILL.md

 

Claude 내부 동작

Claude Code 시작
      ↓
skills 폴더 스캔
      ↓
name + description만 로드
      ↓
사용자 요청 분석
      ↓
description과 semantic match
      ↓
skill 로드 여부 확인
      ↓
SKILL.md 전체 로드

Configuration and multi-file skills

 

  • Skill frontmatter 필수 필드는 name과 description이며, allowed-tools와 model은 선택적 고급 옵션이다.
  • description은 “무엇을 하는 skill인지 + 언제 사용해야 하는지”를 명확히 써야 매칭이 잘 된다.
  • allowed-tools를 사용하면 skill 실행 중 Claude가 사용할 수 있는 도구를 제한할 수 있다.
  • 큰 skill은 progressive disclosure 방식으로 여러 파일로 나누어 관리한다.
  • scripts는 코드 자체를 context에 로드하지 않고 실행 결과만 사용하므로 token 효율이 좋다.

Skill Metadata Fields

필드 필수 여부 역할
name 필수 skill 식별자 (폴더 이름과 동일) pr-review
description 필수 Claude가 언제 skill을 사용할지 판단 PR 리뷰 요청 시 사용
allowed-tools 선택 skill 실행 중 사용 가능한 도구 제한 Read, Grep, Glob
model 선택 해당 skill에 사용할 Claude 모델 지정 sonnet

 

 

예시

---
name: codebase-onboarding
description: Helps new developers understand the codebase structure and architecture
allowed-tools: Read, Grep, Glob, Bash
model: sonnet
---

 

* 큰 skill은 한 파일에 모든 내용을 넣지 않는다.

skill-name/
 ├─ SKILL.md
 ├─ references/
 │   └─ architecture-guide.md
 ├─ scripts/
 │   └─ validate-env.sh
 └─ assets/
     └─ template.md
  • The open standard suggests organizing your skill directory with
    • scripts/ — Executable code
    • references/ — Additional documentation
    • assets/ — Images, templates, or other data files

Skills vs. other Claude Code features

 

  • CLAUDE.md는 모든 대화에 항상 로드되는 설정 파일로, 프로젝트 전반의 규칙·코딩 스타일 같은 항상 적용되는 기준을 정의할 때 사용한다.
  • Skills는 필요할 때 자동으로 로드되는 지식 패키지로, 특정 작업(PR 리뷰, 배포 절차 등)에만 필요한 전문 지식을 제공한다.
  • Subagents는 별도의 실행 컨텍스트에서 작업을 수행하는 독립 작업 에이전트로, 메인 대화와 분리된 작업 위임에 적합하다.
  • Hooks는 이벤트 기반 자동 실행 기능으로, 파일 저장·툴 호출 등 특정 이벤트 발생 시 자동 검증·자동 작업을 수행한다.
  • MCP servers는 외부 도구와 통합하는 구조로, Claude에 새로운 툴·데이터·시스템 연동 기능을 제공한다.

* Claude Code 커스터마이징은 각 기능이 역할이 명확히 분리된 구조

* 이 구조는 AI 협업에서도 Delegation (작업 분배) 개념과 연결되며,

AI Fluency에서 말하는 Delegation은 인간과 AI 간 작업 분배 전략을 의미

기능 역할사용 목적
CLAUDE.md 항상 적용되는 규칙 프로젝트 정책
Skills 필요할 때 로드되는 지식 특정 작업 전문성
Subagents 독립 실행 컨텍스트 작업 위임
Hooks 이벤트 기반 자동 실행 자동화
MCP 외부 시스템 연결 툴 확장
  • CLAUDE.md      → TypeScript strict mode, coding style
  • Skills         → PR review checklist, security audit
  • Hooks          → commit 전 lint 실행
  • Subagent       → 테스트 자동 생성 작업 위임
  • MCP            → GitHub / Jira / Browser / Docker 연결

Sharing skills

 

  • Skills는 공유할 때 가치가 커지며, 팀이나 조직 전체에 배포할 수 있다.
  • 가장 간단한 방법은 .claude/skills 디렉터리를 Git 저장소에 커밋하는 것이다.
  • Plugins를 사용하면 여러 프로젝트에서 재사용할 수 있고 마켓플레이스 형태로 배포할 수 있다.
  • Enterprise managed settings는 조직 전체에 강제로 적용되는 skill 배포 방식으로 보안·컴플라이언스에 적합하다.
  • Subagent는 skill을 자동으로 상속하지 않으며, agent 정의의 skills: 필드에 명시적으로 지정해야 한다.

Skill 공유 방식 3가지

  • Git repository
  • Plugin
  • Enterprise managed settings

예 (팀 프로젝트)

repo
 └ .claude
     └ skills
         ├ pr-review
         ├ security-check
         └ test-guidelines

 

 

 

* Subagent는 완전히 새로운 context에서 시작한다. 따라서 명시적으로 지정해야 한다.

Subagent 설정 예

---
name: frontend-security-accessibility-reviewer
description: Review frontend code
model: sonnet
skills: accessibility-audit, performance-check
---

 

*Claude Code 기본 agent는 skills 사용 불가, kills 사용하려면 custom subagent 만들어야 한다.

  • Explorer
  • Plan
  • Verify

*실제 개발팀 Claude Code 구조 참고

.claude
 ├ skills
 │   ├ pr-review
 │   ├ security-check
 │   └ performance-audit
 │
 ├ agents
 │   ├ frontend-reviewer
 │   └ backend-reviewer
 │
 ├ hooks
 └ settings.json
frontend-reviewer agent
 → accessibility skill
 → performance skill

backend-reviewer agent
 → security skill
 → database skill

Troubleshooting skills

 

  • 문제 해결은 먼저 Skills Validator로 구조 오류를 확인하는 것이 가장 빠르다.
  • Skill이 실행되지 않는 경우 대부분 description 문제이며, 실제 사용자가 말할 표현(trigger phrase)을 추가해야 한다.
  • Skill이 로드되지 않으면 구조 확인 — SKILL.md는 반드시 skills/skill-name/SKILL.md 형태여야 한다.
  • 잘못된 skill이 실행되면 description이 너무 비슷한 것이 원인이므로 역할을 더 명확히 구분해야 한다.
  • runtime 오류는 의존성, 실행 권한(chmod +x), 경로(path separator) 문제인 경우가 대부분이다.

*path 문제

Claude Code는 forward slash 권장 (Window 포함)

scripts/run-test.sh

 

 

'개발 > AI' 카테고리의 다른 글

Model Context Protocol: Advanced Topics  (0) 2026.03.15
Introduction to Model Context Protocol  (1) 2026.03.14
AI Fluency: Framework & Foundations  (0) 2026.03.08
Claude 101  (0) 2026.03.08
Claude Code in Action  (0) 2026.03.07

Core MCP features

Sampling

Sampling은 단순 편의 기능이 아니라 공개형 MCP 생태계에서 비용 통제와 보안 경계를 분리하는 핵심 패턴

 

  • Sampling은 MCP 서버가 직접 Claude를 호출하지 않고, 연결된 MCP 클라이언트에게 모델 호출을 대신 요청하는 방식이다.
  • 이렇게 하면 서버는 API 키, 인증, 과금, 모델 연동 로직을 직접 관리하지 않아도 된다.
  • 흐름은 서버가 작업 수행 → 프롬프트 생성 → 클라이언트에 생성 요청 → 클라이언트가 Claude 호출 → 결과를 서버에 반환 순서다.
  • 특히 공개 MCP 서버에서 유리한데, 서버 운영자가 사용자들의 생성 비용을 대신 부담하지 않아도 되기 때문이다.
  • 구현 시에는 서버 쪽 create_message() 요청 코드클라이언트 쪽 sampling_callback 처리 코드가 모두 필요하다.

*참고

 

  • 서버 역할: 데이터 접근, 툴 실행, 외부 시스템 연결
  • 클라이언트 역할: 모델 호출, 인증, 비용 부담, 사용자 세션 관리
  • Sampling이 적합한 경우: 요약, 재작성, 보고서 생성, 설명 생성처럼 도구 실행 후 LLM 후처리가 필요한 경우
  • Sampling이 덜 필요한 경우: 단순 조회, 계산, 변환처럼 모델 호출 없이도 끝나는 작업
MCP Server
   │
   │ create_message()
   ▼
MCP Client
   │
   │ sampling_callback 실행
   ▼
Claude API 호출
   │
   ▼
결과 반환

 

 

Log and progress notifications

 

  • Logging과 Progress Notifications는 MCP Tool 실행 중 사용자에게 현재 작업 상태를 알려주는 기능이다.
  • 오래 걸리는 작업(연구, 데이터 처리 등)에서 진행 상황을 실시간으로 전달해 UX를 개선한다.
  • 서버에서는 Context 객체를 통해 context.info() (로그 메시지)와 context.report_progress() (진행률)을 보낸다.
  • 클라이언트에서는 logging callbackprogress callback을 구현해 이 메시지를 받아 표시한다.
  • CLI, Web, Desktop 환경에 따라 터미널 출력, progress bar, UI 상태 업데이트 등 다양한 방식으로 표시 가능하다.

*MCP 서버

@mcp.tool(
    name="research",
    description="Research a given topic"
)
async def research(
    topic: str = Field(description="Topic to research"),
    *,
    context: Context
):
    await context.info("About to do research...")
    await context.report_progress(20, 100)
    sources = await do_research(topic)
    
    await context.info("Writing report...")
    await context.report_progress(70, 100)
    results = await generate_report(sources)
    
    return results
  • context.info()
  • context.report_progress()

 

*MCP 클라이언트

async def logging_callback(params: LoggingMessageNotificationParams):
    print(params.data)

async def print_progress_callback(
    progress: float, total: float | None, message: str | None
):
    if total is not None:
        percentage = (progress / total) * 100
        print(f"Progress: {progress}/{total} ({percentage:.1f}%)")
    else:
        print(f"Progress: {progress}")

async def run():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(
            read,
            write,
            logging_callback=logging_callback
        ) as session:
            await session.initialize()
            
            await session.call_tool(
                name="add",
                arguments={"a": 1, "b": 3},
                progress_callback=print_progress_callback,
            )
  • logging_callback : 서버 로그 수신, MCP 서버가 보내는 로그 메시지를 받아 출력
  • print_progress_callback — 진행률 표시 , 이 함수는 Tool 실행 중 진행률을 표시

 

Roots

Roots는 MCP에서 “AI가 접근 가능한 파일 시스템 범위”를 정의

 

  • Roots는 MCP 서버가 로컬 파일 시스템에서 접근할 수 있는 디렉토리를 제한하는 권한 시스템이다.
  • 사용자는 "convert biking.mp4"처럼 파일 이름만 말해도, Claude가 Roots 내부에서 파일을 탐색할 수 있다.
  • Claude는 먼저 list_roots → read_dir 등을 호출해 접근 가능한 디렉토리에서 파일을 찾는다.
  • Roots는 보안 경계를 제공하여 허용된 폴더 밖의 파일에는 접근할 수 없게 만든다.
  • SDK가 자동으로 막아주지 않기 때문에 서버에서 is_path_allowed() 같은 검증 로직을 직접 구현해야 한다.

* Roots는 단순한 permission이 아니라 AI 탐색 범위 설정

Transports and communication

JSON message types

 

  • MCP는 모든 통신을 JSON 메시지 형태로 주고받는 프로토콜이다.
  • 메시지는 크게 Request → Result 쌍Notification(단방향 이벤트) 두 종류로 나뉜다.
  • 예: Call Tool Request → Call Tool Result 처럼 요청 후 결과 응답 구조로 동작한다.
  • MCP 메시지 구조는 공식 GitHub MCP Specification에 정의되어 있으며 TypeScript 타입으로 설명된다.
  • MCP는 양방향(bidirectional) 프로토콜이라 Client → Server뿐 아니라 Server → Client 메시지도 가능하다.

* MCP는 "JSON 메시지 기반의 양방향 RPC 프로토콜"이며, Tool / Resource / Prompt 호출을 표준화한 AI-tool 연결 규격

* Transport에 따라 메시지 방향이 제한될 수 있다.

Transport 특징
stdio 로컬 프로세스 통신
streamable HTTP HTTP streaming
websocket 완전 bidirectional

 

*https://github.com/modelcontextprotocol/modelcontextprotocol

 

GitHub - modelcontextprotocol/modelcontextprotocol: Specification and documentation for the Model Context Protocol

Specification and documentation for the Model Context Protocol - modelcontextprotocol/modelcontextprotocol

github.com

이 저장소는 Model Context Protocol(MCP)의 공식 사양(specification)과 문서가 들어있는 레포지토리다.
즉, MCP를 사용하는 라이브러리나 서버 구현이 아니라 “프로토콜 표준 정의”가 담긴 곳이다.

modelcontextprotocol
   ↑
   ├─ spec (이 repo)
   │
   ├─ python-sdk
   ├─ typescript-sdk
   ├─ java-sdk
   └─ rust-sdk

The STDIO transport

 

  • STDIO transport는 MCP에서 가장 기본적인 통신 방식으로 **표준 입력(stdin)과 출력(stdout)**을 이용해 JSON 메시지를 주고받는다.
  • 클라이언트가 MCP 서버를 subprocess로 실행하고 stdin으로 요청을 보내면 서버는 stdout으로 응답한다.
  • client ↔ server 모두 언제든 메시지를 보낼 수 있는 완전한 양방향 통신이 가능하다.
  • 단점은 같은 머신에서만 동작한다는 것(프로세스 간 통신 방식이기 때문).
  • MCP 연결은 항상 Initialize Request → Initialize Result → Initialized Notification 순서의 3단계 handshake로 시작한다.
Client process
   │
   │ stdin (JSON message)
   ↓
MCP Server process
   ↑
   │ stdout (JSON response)
   │
Client

 

 

The StreamableHTTP transport

  • Streamable HTTP transport는 MCP 서버를 원격 서버로 배포하고 HTTP로 연결할 수 있게 하는 방식이다.
  • STDIO와 달리 클라이언트와 서버가 다른 머신에서도 통신 가능하다.
  • 그러나 HTTP 특성상 서버가 클라이언트에게 먼저 요청을 보내기 어렵다는 제약이 있다.
  • stateless_http, json_response 설정을 사용하면 progress notification, logging, server-initiated request 같은 기능이 제한될 수 있다.
  • 따라서 원격 MCP 서버에는 유용하지만 일부 실시간 기능이 줄어드는 trade-off가 존재한다.
client
   │
HTTP connection
   │
remote MCP server

 

StreamableHTTP in depth

 

  • StreamableHTTP는 HTTP 환경에서 MCP의 양방향 통신을 가능하게 하기 위한 transport 방식이다.
  • HTTP는 원래 Client → Server 요청만 자연스럽게 가능하므로 MCP의 서버→클라이언트 기능을 구현하기 어렵다.
  • 이를 해결하기 위해 **SSE(Server-Sent Events)**를 사용해 지속적인 스트리밍 연결을 만든다.
  • 연결 후에는 **session ID 기반으로 여러 SSE 채널(Primary + Tool-specific)**을 사용해 메시지를 전달한다.
  • stateless_http 또는 json_response 설정을 켜면 이 SSE 구조가 깨져 notifications·logging·server-initiated request 기능이 제한된다.

 

State and the StreamableHTTP transport

 

  • treamableHTTP는 기본적으로 stateful 방식이며 세션(session)과 SSE 연결을 유지한다.
  • 하지만 서버를 여러 인스턴스로 수평 확장(load balancer 뒤)하려면 상태 관리가 어려워진다.
  • stateless_http=True는 세션을 없애고 서버 간 상태 공유 문제를 제거한다.
  • 대신 SSE 기반 기능(진행률, 로그, 서버→클라이언트 요청, sampling 등)을 사용할 수 없다.
  • json_response=True는 단순히 스트리밍을 끄고 최종 JSON 응답만 반환하도록 만든다.

* stateless_http는 “확장성을 위해 세션과 SSE를 포기하는 설정”, json_response는 “스트리밍 대신 최종 JSON만 반환하는 설정”이다.

 

 

옵션 의미 영향
stateless_http 서버 상태 제거 SSE 기능 대부분 비활성
json_response streaming 응답 제거 중간 메시지 없음

 

'개발 > AI' 카테고리의 다른 글

Introduction to agent skills  (0) 2026.03.15
Introduction to Model Context Protocol  (1) 2026.03.14
AI Fluency: Framework & Foundations  (0) 2026.03.08
Claude 101  (0) 2026.03.08
Claude Code in Action  (0) 2026.03.07

Introducing MCP

 

  • MCP(Model Context Protocol) 는 Claude가 외부 서비스(GitHub, DB, API 등)의 도구와 데이터에 접근하도록 해주는 표준 통신 레이어다.
  • 기존 방식에서는 개발자가 직접 API 호출용 tool schema와 integration 코드를 모두 작성해야 했다.
  • MCP는 이 작업을 MCP Server로 분리하여, 서버가 이미 정의된 tools와 API 연결을 제공한다.
  • 애플리케이션은 MCP Client → MCP Server → 외부 서비스 구조로 연결되어 기능을 사용한다.
  • 결과적으로 복잡한 API 통합 코드를 직접 작성할 필요 없이, 이미 구현된 MCP 서버를 재사용할 수 있다.
User
  ↓
LLM (Claude)
  ↓
MCP Client (your app/server)
  ↓
MCP Server
  ↓
External Service (GitHub, Slack, DB 등)

 

  • MCP Client
    • Claude가 호출하는 인터페이스
    • 실제 서버 또는 앱
  • MCP Server
    • 특정 서비스용 tool 집합 제공
    • 예: GitHub MCP, Playwright MCP
  • External Service
    • GitHub, AWS, DB, Browser 등

API SDK 대신 AI용 Tool Gateway 같은 개념이다.

MCP clients

  1. MCP Client는 애플리케이션 서버와 MCP Server 사이의 통신 브리지 역할을 한다.
  2. Client는 tool 목록 조회(ListTools)tool 실행(CallTool) 같은 MCP 메시지를 주고받는다.
  3. MCP는 transport-agnostic 구조라서 STDIO, HTTP, WebSocket 등 다양한 프로토콜로 통신할 수 있다.
  4. 일반적인 흐름은 사용자 요청 → Claude → MCP Client → MCP Server → 외부 API → 결과 반환 구조다.
  5. MCP Client 덕분에 개발자는 프로토콜 처리 대신 애플리케이션 로직에 집중할 수 있다.

주요 기능

  • MCP Server 연결 관리
  • Tool 목록 조회
  • Tool 실행 요청 전달
  • 결과 수신 및 반환

Hands-on with MCP servers

Defining tools with MCP

 

  • Python MCP SDK를 쓰면 MCP 서버를 훨씬 쉽게 만들 수 있고, 복잡한 JSON Schema를 직접 작성할 필요가 없다.
  • FastMCP("DocumentMCP")처럼 서버를 초기화한 뒤, Python 함수에 decorator를 붙여 tool을 등록한다.
  • 함수의 type hint와 Pydantic Field(description=...) 를 사용하면 입력 스키마와 파라미터 설명이 자동 생성된다.
  • 예시처럼 read_doc_contents, edit_document 같은 tool을 만들어 문서를 읽거나 문자열 치환 편집을 수행할 수 있다.
  • 결과적으로 MCP 서버 개발은 “스키마 작성 작업”이 아니라 일반 Python 함수 설계 작업에 가깝게 바뀐다.

예제에서 꼭 이해할 포인트

1. FastMCP는 서버 본체

from mcp.server.fastmcp import FastMCP
mcp = FastMCP("DocumentMCP", log_level="ERROR")

여기서 mcp 객체가 tool 등록과 서버 실행의 중심이다.

 

2. @mcp.tool(...) 가 tool 등록

@mcp.tool(name="read_doc_contents", description="...")
def read_document(...):
    ...

 

이 decorator가 붙은 함수는 Claude가 호출 가능한 tool이 된다.

 

3. 함수 시그니처가 곧 tool 계약

doc_id: str = Field(description="Id of the document to read")

이 정보가 Claude가 이해하는 tool argument schema로 바뀐다.

* Claude가 tool을 사용할 때 실제로 보는 것은 함수 코드가 아니라 JSON schema입니다.

 

4. 예외 처리가 중요

if doc_id not in docs:
    raise ValueError(...)

MCP tool은 정상 경로보다 오류 메시지 품질이 더 중요할 때가 많다.
LLM이 실패 원인을 보고 다음 행동을 결정하기 때문이다.

The server inspector

 

  • MCP Inspector는 MCP 서버를 실제 앱에 연결하지 않고도 브라우저에서 바로 테스트할 수 있는 개발 도구다.
  • mcp dev mcp_server.py 명령으로 실행하면 로컬 개발 서버와 함께 웹 UI(예: http://127.0.0.1:6274) 가 열린다.
  • Inspector에서 Tools / Resources / Prompts 목록을 확인하고 직접 실행할 수 있다.
  • Tool을 선택하고 입력값을 넣어 실행하면 성공 여부와 반환 데이터를 즉시 확인할 수 있다.
  • 여러 tool을 순서대로 실행해 상태 변화나 상호작용(workflow) 도 테스트할 수 있어 개발 속도를 크게 높여준다.

*pip install mcp

Connecting with MCP clients

Implementing a client

 

  • 이제 MCP 서버가 준비됐으니, 애플리케이션이 그 서버와 통신하기 위한 MCP Client를 구현하는 단계다.
  • 실무에서는 보통 MCP 서버만 만들거나, MCP 클라이언트만 붙여서 쓰는 경우가 많고, 둘 다 직접 만드는 경우는 학습 목적일 때가 많다.
  • 클라이언트는 보통 직접 만든 wrapper class와, Python SDK가 제공하는 client session으로 구성된다.
  • 핵심 기능은 두 가지로, list_tools() 로 서버의 tool 목록을 받고 call_tool() 로 특정 tool을 실행한다.
  • 이 클라이언트가 있어야 앱이 Claude에게 tool 목록을 보내고, Claude가 요청한 tool을 실제로 실행해 결과를 다시 전달할 수 있다.

* MCP client는 앱과 MCP server 사이의 실행 담당자

*VSCode 에서 MCP 구조

VSCode Extension (AI agent / tool runtime)
        │
        │  ← MCP Client 역할
        │
   MCP Server
        │
 External Service
 
 // VSCode = MCP Client

 

 

 

* 개발자가 직접 MCP Client 만드는 경우

 

  • CLI AI tool 만들 때
  • custom agent 만들 때
  • backend service에서 MCP 쓸 때

* MCP CLI(mcp dev)는 MCP 서버 테스트 도구이고, MCP client는 별도의 테스트 코드(harness)로 검증

 

Defining resources

 

  • MCP Resource는 클라이언트가 서버에서 데이터를 읽어오는 인터페이스로, HTTP의 GET endpoint와 비슷한 개념이다.
  • Tool이 “행동(실행)”이라면 Resource는 “데이터 조회” 역할을 한다.
  • Resource는 URI 기반으로 요청되며 ReadResourceRequest → ReadResourceResult 형태로 응답한다.
  • 두 가지 종류가 있다: Direct Resource(고정 URI)Templated Resource(파라미터 포함 URI).
  • Python MCP SDK에서는 @mcp.resource() 데코레이터로 정의하고, 반환값은 SDK가 자동으로 JSON/텍스트 등으로 직렬화한다.
구분 역활
Tool 행동 수행 (action)
Resource 데이터 조회 (read)

 

*참고

  • 예를 들어 MCP 서버에 문서가 있다고 가정하면
    • report.pdf
      plan.md
      spec.txt
  • 클라이언트가 서버에 이렇게 요청합니다.
    • docs://documents/report.pdf
  • 그러면 서버가 데이터를 반환합니다.
    • The report details the state of a 20m condenser tower.
Client → Resource 요청 → Server → 데이터 반환 구조입니다.
 

Accessing resources

 

  • Resource access는 MCP 서버의 데이터를 tool 호출 없이 바로 읽어와 프롬프트에 넣는 방식이다.
  • 클라이언트는 read_resource(uri) 함수를 통해 MCP 서버에 ReadResourceRequest 를 보낸다.
  • 서버 응답에는 보통 contents 리스트와 함께 MIME type 이 들어 있어, 클라이언트가 데이터 해석 방식을 결정한다.
  • application/json이면 JSON으로 파싱하고, 그 외에는 보통 텍스트 그대로 반환한다.
  • 이렇게 읽어온 Resource는 @document 같은 UX와 결합되어 Claude가 추가 tool 호출 없이 바로 문맥을 이해하게 만든다.

* Accessing resources는 MCP 클라이언트가 서버의 데이터를 미리 읽어와, 그 내용을 AI 프롬프트 문맥으로 직접 넣는 구조

* MCP 클라이언트가 Resource를 읽는 것은 MCP가 자동으로 하는 것이 아니라 애플리케이션 코드가 호출해서 실행

 

 

Defining prompts

  1. MCP Prompt는 서버에서 미리 정의한 프롬프트 템플릿으로, 사용자가 직접 프롬프트를 작성하지 않아도 고품질 지시를 사용할 수 있게 한다.
  2. @mcp.prompt() 데코레이터로 정의하며, 입력 파라미터를 받아 Claude에게 보낼 메시지 리스트를 반환한다.
  3. 사용자는 /format doc_id 같은 명령 형태로 프롬프트를 실행할 수 있다.
  4. 서버 작성자는 검증된 프롬프트 구조와 도메인 지식을 템플릿에 넣어 일관된 결과를 보장한다.
  5. MCP Inspector에서 프롬프트가 실제로 Claude에 어떻게 전달되는지 테스트하고 검증할 수 있다.

* MCP에는 3가지 인터페이스

  • Tool → 행동 실행
    Resource → 데이터 조회
    Prompt → 프롬프트 템플릿
@mcp.prompt(
    name="format",
    description="Rewrites the contents of the document in Markdown format."
)
def format_document(doc_id: str):

 

 

이 코드는 format이라는 프롬프트 명령을 정의합니다.

Prompts in the client

  • MCP Client의 Prompt 기능은 서버에 정의된 프롬프트 목록을 가져오고, 특정 프롬프트를 변수와 함께 실행할 수 있게 한다.
  • list_prompts()는 서버의 모든 프롬프트를 조회하고, get_prompt()는 특정 프롬프트를 변수 값을 넣어 가져온다.
  • get_prompt(prompt_name, args)에서 args는 프롬프트 템플릿의 변수 값으로 사용된다.
  • 클라이언트는 이렇게 생성된 메시지 리스트를 Claude에게 그대로 전달한다.
  • 이 구조 덕분에 재사용 가능한 고품질 프롬프트 템플릿을 여러 클라이언트에서 동일하게 사용할 수 있다.

* 왜 Prompt를 서버에 두는가 ?

: 사용자가 직접 작성 시, 품질이 매번 달라지므로

장점 설명
일관성 항상 동일한 프롬프트
재사용 여러 앱에서 사용
유지보수 서버에서 수정
품질 검증된 prompt

 

 

  • MCP 서버에는 **3가지 핵심 구성요소(primitive)**가 있다: Tools, Resources, Prompts.
  • ToolsClaude가 직접 제어하며 필요할 때 자동으로 호출한다.
  • Resources애플리케이션 코드가 제어하며 UI나 프롬프트에 넣을 데이터를 가져올 때 사용한다.
  • Prompts사용자가 직접 실행하는 워크플로(슬래시 명령, 버튼 등)이다.
  • 선택 기준은 간단하다: 능력 추가 → Tool / 데이터 제공 → Resource / 사용자 워크플로 → Prompt.

 

'개발 > AI' 카테고리의 다른 글

Introduction to agent skills  (0) 2026.03.15
Model Context Protocol: Advanced Topics  (0) 2026.03.15
AI Fluency: Framework & Foundations  (0) 2026.03.08
Claude 101  (0) 2026.03.08
Claude Code in Action  (0) 2026.03.07

中 78일뿐인데…'208일 쟁여둔' 한국 초비상 걸린 이유

https://plus.hankyung.com/apps/newsinside.view?aid=2026030866291&category=NEWSPAPER

 

  • 중동 전쟁 장기화 조짐으로 전 세계 원유 확보 비상이 걸렸으며, 특히 호르무즈 해협 봉쇄 시 아시아 국가들의 타격이 예상된다.
  • 한국은 208일치, 일본은 254일치의 비축유를 보유해 수치상으로는 중국(78일)이나 인도(25일)보다 방어력이 높다.
  • 하지만 한국과 일본은 중동 원유 의존도가 매우 높아 전쟁이 1년을 넘길 경우 공급망 차질로 경제적 타격이 불가피하다.
  • 반면 중국과 인도는 비축량은 적어도 러시아산 원유라는 확실한 대체 공급처가 있어 장기전에서 오히려 유리할 수 있다.
  • 정부는 에너지 위기 경보 '관심' 단계를 발령했으며, 나프타 등 석유제품 수입 차질로 인한 국내 제조 산업의 생산 위축도 우려되는 상황이다.

엔비디아 '괴물 AI칩' 심장엔 삼성·SK뿐…추격하던 마이크론 탈락

https://plus.hankyung.com/apps/newsinside.view?aid=2026030866861&category=NEWSPAPER

 

  • 엔비디아의 차세대 AI 칩 '베라루빈'에 들어갈 핵심 부품인 HBM4(6세대) 공급사로 삼성전자와 SK하이닉스가 선정되었다.
  • 강력한 경쟁자였던 미국 마이크론은 기술력 차이로 인해 최고급 모델인 베라루빈 공급망에서 탈락하며 'K-반도체'의 승기가 굳어졌다.
  • 삼성전자는 이미 품질 테스트를 사실상 통과하고 초기 물량을 출하하며 앞서나가고 있고, SK하이닉스도 막바지 최적화 작업 중이다.
  • 엔비디아는 삼성전자의 협상력이 커지는 것을 견제하기 위해 SK하이닉스를 독려하는 등 공급처 관리에 나선 모습이다.
  • 범용 D램 가격 상승이라는 변수가 있지만, 삼성과 SK는 이달부터 HBM4 양산에 돌입하며 AI 메모리 패권을 이어갈 전망이다.

이번엔 인프라 슈퍼사이클…K철강 '고부가 제품' 승부수

https://plus.hankyung.com/apps/newsinside.view?aid=2026030865931&category=NEWSPAPER

  • 미국의 AI 데이터센터 건설 붐으로 인해 건물 골조에 쓰이는 한국산 봉형강(철근, H형강) 수출이 1년 새 약 10배(927.8%) 급증했다.
  • 국내 건설 경기 침체로 낮아진 한국 철강 가격이 미국의 가파른 물가 상승과 맞물려, 장거리 운송비를 감당하고도 남을 만큼의 가격 경쟁력을 갖게 되었다.
  • 현대제철은 아마존과 저탄소 강재 협력을, 동국제강은 초고하중을 견디는 '디-메가빔' 등 데이터센터 맞춤형 고부가 제품으로 승부수를 던지고 있다.
  • 판재류나 강관 등 다른 철강 제품은 수출이 감소했으나, 봉형강만 '나홀로' 성장하며 철강 산업 내에서도 희비가 엇갈리고 있다.
  • 전문가들은 데이터센터 용량이 2030년까지 매년 14%씩 성장할 것으로 보며, 이제 막 인프라 투자 슈퍼사이클의 초입에 진입했다고 평가한다.

중동전쟁發 '大인플레이션' 우려…부담 커진 중앙은행 [한상춘의 국제경제 읽기]

https://plus.hankyung.com/apps/newsinside.view?aid=2026030866081&category=NEWSPAPER

 

 

  • 중동 전쟁으로 인한 유가 상승과 트럼프 정부의 고관세 보호주의가 결합하며 전례 없는 물가 상승(대인플레이션) 우려가 커지고 있다.
  • 과거와 달리 현재 미국은 국가 채무가 너무 많아, 중앙은행(Fed)이 금리를 내려도 시중 금리는 오히려 오르는 기현상이 발생하고 있다.
  • 트럼프 대통령의 압박으로 Fed의 독립성이 훼손되면서, 물가를 잡아야 할 중앙은행이 제 역할을 못 할 것이라는 비관론이 우세하다.
  • 미국 재무부 또한 성장을 위해 돈을 더 풀려는 경향(현대통화이론 선호)을 보여 인플레이션 억제 정책과 엇박자를 내고 있다.
  • 한국 역시 유가 급등에 취약한 구조이므로, 곧 임기가 끝나는 한국은행 총재 선임 시 '정치적 독립성'을 최우선으로 고려해야 한다.

* 보통 중앙은행이 기준금리를 내리면 시중 금리도 내려가야 정상이다. 하지만 기사에서는 기준금리를 내려도 10년 만기 국채 금리가 올랐다고 한다. 이는 시장이 "정부가 돈을 너무 많이 빌려 쓰고 물가도 못 잡을 것 같다"라고 믿기 때문이다. 투자자로서는 금리 인하 수혜주(기술주 등)를 고를 때, 기준금리 수치보다 실제 시장 금리(국채 수익률)의 움직임을 더 예민하게 체크해야 한다.

* 다음 달 한국은행 총재가 바뀐다. 만약 새로 오는 총재가 정부의 압박에 취약해 보인다면, 외국인 투자자들은 한국 경제의 안정성을 의심하며 돈을 뺄 수 있다. 이는 원·달러 환율 급등으로 이어질 수 있으므로, 환율 민감도가 높은 수출입 관련 기업 투자자들은 인사 소식에 귀를 기울여야 한다.

 

 

 

 

+ Recent posts