LIGHT
IT 2026. 10. 11. 21:30

AI로 업무 효율 늘리기(MCP-Claude)

회의가 끝나면 브라우저를 열지 않는다, 팀 업무 도구에 MCP를 붙이고 달라진 것

왜 만들었나

혼자 쓰는 도구가 아니라, 같이 일하는 도구가 필요했다

일을 하다 보면 기록은 늘 흩어진다. 회의 내용은 누군가의 노트에, 결정사항은 메신저 어딘가에, 할 일은 각자의 메모장에 남는다. 회의 때 분명히 정한 일인데 일주일 뒤에 "그거 누가 하기로 했었지?"라는 말이 나온다. 혼자 정리를 잘한다고 해결되는 문제가 아니었다. 팀이 같은 기록을 보고, 같은 할 일 목록을 기준으로 움직여야 했다.

그래서 팀이 함께 쓰는 업무 서비스를 직접 만들었다. 회의록을 올리면 요약, 결정사항, 할 일이 정리되고, 그 할 일이 담당자의 「오늘」 화면, 일정, 마일스톤, 주간보고로 이어진다. 회의록 하나에서 팀 전체의 일정과 할 일이 만들어지는 구조다. 팀원들은 같은 워크스페이스에서 같은 기록을 보고, 권한에 따라 직접 고칠 수도 있다.

그런데 정작 나는 터미널에 있었다

문제는 나 자신이었다. 하루 대부분을 이 서비스가 아니라 터미널에서 보낸다. 회사 PC에서 Claude Code를 켜두고 개발도 하고 문서도 쓴다. 그러다 "이번 주에 뭐 하기로 했더라" 싶으면 하던 일을 멈추고 브라우저를 열고, 로그인하고, 할 일 화면을 찾아 들어가야 했다. 한 번이면 별일 아니지만, 하루에 몇 번씩 반복되니 흐름이 계속 끊겼다.

회의가 끝나면 정리가 또 하나의 일이었다

팀이 함께 보는 기록이 되려면 누군가는 회의를 정리해서 올려야 한다. 녹음을 듣고, 요약을 쓰고, 결정사항과 할 일을 뽑아서 하나씩 옮긴다. 회의보다 정리가 더 귀찮을 때도 있었다. 정리가 늦어지면 팀원들은 그만큼 늦게 할 일을 받는다.

그래서 바라는 모습은 두 가지였다.

  1. 터미널에서 "이번 주 내 할 일 보여줘"라고 물으면 팀 서비스에 쌓인 데이터로 답이 온다.
  2. "오늘 회의록 올려줘" 한마디로 녹음 정리부터 등록까지 끝나고, 팀원들이 바로 볼 수 있다.

이걸 가능하게 해주는 연결 방식이 MCP(Model Context Protocol)다.


어떤 구조로 되어 있나

한 줄 요약: AI가 쓸 수 있는 도구 상자를 서비스가 직접 내준다

MCP는 AI 도구(여기서는 Claude Code)와 다른 서비스를 잇는 표준 연결 방식이다. 서비스가 "나는 이런 기능들을 갖고 있고, 각 기능은 이런 정보를 받는다"는 목록을 내주면, Claude Code는 연결하는 순간 그 목록을 받아 필요한 기능을 알아서 골라 쓴다.

사용자 입장에서 중요한 건 이 점이다. 사용 설명서를 따로 써줄 필요가 없다. 설명은 서비스 서버 안에 들어 있고, 기능이 바뀌어도 서버만 고치면 된다. 팀원마다 설정 문서를 따로 챙길 필요도 없다.

연결은 명령 한 줄

서비스 설정 화면의 「외부 접근」 카드에서 토큰을 발급하면, Claude Code 등록 명령이 토큰까지 채워진 채로 나온다. [명령 복사]를 눌러 터미널에 붙이면 연결이 끝난다.

claude mcp add --transport http team-tool https://<주소>/api/mcp \
  --header "Authorization: Bearer <토큰>" --scope user

토큰 원문은 발급 직후 한 번만 보여주고, 그 뒤에는 끝 4자리만 남는다.

토큰마다 볼 수 있는 범위와 할 수 있는 일이 정해진다

팀이 함께 쓰는 서비스라 권한 구분이 특히 중요했다. 토큰을 발급할 때 두 가지를 정한다.

  • 어느 워크스페이스인가. 토큰 하나는 워크스페이스 하나만 볼 수 있다. 회사 PC에서 토큰이 유출되더라도 다른 팀의 공간은 열리지 않는다.
  • 읽기만 할 것인가, 쓰기도 할 것인가. 처음엔 읽기 전용으로 시작하고, 쓰기가 필요해지면 그때 따로 발급하면 된다.

읽기 전용 토큰으로 연결하면 쓰기 기능은 목록에 아예 나타나지 않는다. 막혀 있는 게 아니라 처음부터 없는 것이다. MCP로 연결해도 팀 안에서 정한 권한은 그대로 적용된다. 보기 전용 권한인 팀원에게는 회의록 원문 자체가 응답에 들어가지 않고, 가계부는 관리자 이상만 읽을 수 있다.

쓸 수 있는 기능 19개

구분 도구 하는 일
확인 get_workspace 지금 연결된 공간, 내 권한, 토큰 권한
읽기 list_items, list_meetings, get_meeting, search 외 할 일, 회의록, 마일스톤, 프로젝트, 전체 검색 등
쓰기 preview_changes 바꿀 내용을 미리 보여주기만 함 (실제 데이터는 그대로)
쓰기 apply_changes 실제로 적용. 삭제는 한 번 더 확인해야 통과
쓰기 undo_changes 방금 적용한 묶음을 통째로 롤백

읽기 16개, 쓰기 3개다. 쓰기는 미리보기 → 적용 → 롤백 세 단계가 한 세트다. AI가 바로 데이터를 바꾸지 않고, 무엇을 바꿀지 먼저 보여준 뒤 내가 확인하면 적용한다.

AI가 바꾼 기록은 팀이 보는 화면에 남는다

서비스 웹 화면의 어시스턴트에는 「채팅 / MCP」 탭이 있다. MCP 탭에는 Claude Code가 어떤 토큰으로, 언제, 무엇을, 몇 건 바꿨는지가 쌓이고, 마음에 안 드는 변경은 거기서 [롤백]으로 취소한다. AI가 팀 데이터를 바꾼 기록이 팀 모두가 볼 수 있는 곳에 남는 셈이다.

회의 정리는 MCP 두 개를 잇는다

회의 녹음은 Tiro로 한다. Tiro도 MCP를 제공하기 때문에, Claude Code 스킬 하나가 Tiro와 서비스를 이어준다.

  1. 회의를 Tiro로 녹음한다.
  2. Claude Code에서 "오늘 회의록 올려줘"라고 입력한다.
  3. Claude Code가 Tiro에서 전사본을 읽고, 정해둔 템플릿(정기 회의, 외부 미팅, 결정 회의)으로 요약, 결정사항, 할 일을 정리한다.
  4. 정리안을 보여주고, 내가 확인하면 서비스에 올린다.
  5. 결정사항과 할 일을 방금 만든 회의록에 연결한다. 이때부터 팀원들도 같은 회의록과 할 일을 본다.

반대 방향의 연결도 있다. 팀원이 서비스에 새 회의록을 올리면 내 Claude Code 세션에 한 줄 알림이 뜬다. PC를 꺼둔 사이에 올라온 회의록도 다음에 켤 때 알려준다.


이걸 하면 뭐가 좋은가

1. 팀의 기록이 한곳에 모인다

회의록, 결정사항, 할 일이 각자의 메모장이 아니라 팀이 함께 보는 서비스에 쌓인다. 정리하는 수고가 줄어 기록이 밀리지 않고, 덕분에 팀원들이 같은 정보를 같은 시점에 본다. "그거 누가 하기로 했었지?"를 물을 일이 줄었다.

2. 일하던 자리를 떠나지 않는다

할 일 확인, 회의록 검색, 마일스톤 확인을 터미널에서 묻고 바로 답을 받는다. 브라우저를 열고 로그인하고 메뉴를 찾아 들어가는 몇 단계가 질문 한 줄로 줄었다. 작은 차이 같지만, 하루에 몇 번씩 끊기던 흐름이 이어진다.

3. 회의 뒤처리가 대화 한 번으로 끝난다

녹음을 다시 듣고, 요약을 쓰고, 할 일을 하나씩 옮기던 일이 "오늘 회의록 올려줘"로 바뀌었다. 나는 AI가 만든 정리안을 읽고 확인만 하면 된다. 템플릿이 정해져 있어서 누가 정리해도 회의록 형식이 같고, 팀원들이 읽기도 편하다.

4. 비용이 따로 들지 않는다

원래 웹 화면의 [요약 생성] 버튼은 서버에서 Claude API를 호출해서 쓸 때마다 비용이 들었다. 이 흐름은 내가 이미 쓰고 있는 Claude Code 구독 안에서 끝난다.

5. AI에게 맡겨도 불안하지 않다

팀이 함께 쓰는 데이터를 AI가 직접 바꾼다고 하면 걱정이 먼저 든다. 그래서 안전장치를 겹겹이 뒀다.

  • 쓰기 전에 공간부터 확인한다. Claude Code는 쓰기 전에 get_workspace로 지금 연결된 공간이 어디인지 확인한다. 엉뚱한 팀의 공간에 회의록을 올리는 실수를 막기 위해서다.
  • 바꾸기 전에 미리보기로 보여준다. 삭제는 한 번 거절된 뒤 다시 확인해야 통과한다.
  • 적용한 뒤에도 롤백할 수 있다. 터미널에서 AI가 한 일을 브라우저에서 검토하고 취소할 수 있다는 게 생각보다 든든하다.
  • 토큰은 공간 하나, 권한 하나로 묶인다. 팀 안에서 정한 권한도 그대로 적용된다.

솔직히 롤백이 없었다면 쓰기 토큰은 발급하지 않고 읽기 전용에서 멈췄을 것이다.

6. 팀원이 올린 회의록을 놓치지 않는다

새 회의록이 올라오면 내가 일하는 터미널로 알림이 온다. 새 회의록이 있는지 서비스에 들어가 확인할 필요가 없다. 내가 올리면 팀원이 보고, 팀원이 올리면 내가 바로 안다.


마무리

처음 목표는 혼자 정리를 잘하는 게 아니라, 팀이 같은 기록을 보며 함께 일하는 것이었다. 그래서 팀 업무 서비스를 만들었고, 거기에 MCP를 붙이면서 가장 큰 걸림돌이었던 "기록을 올리는 수고"를 덜었다. 지금은 회의가 끝나도 브라우저를 열지 않는다. 녹음은 Tiro가, 정리는 Claude Code가, 기록과 공유는 서비스가 맡고, 나는 확인만 한다.

팀과 함께 쓰는 업무 도구가 있고, 하루 대부분을 AI 도구 안에서 보내고 있다면, MCP로 둘을 이어 보는 것도 방법이다. 도구를 오가는 시간이 생각보다 많았다는 걸 알게 된다.

h

hyos

IT · 스타트업 · 개인기록. 만들고, 실패하고, 기록합니다.

IT 2026. 9. 27. 22:51

MCP 란 무엇인가?

MCP

MCP 두 편 · 1 설명

회사 PC 의 Claude Code 에서 내 업무 도구를 쓰고 싶어서 MCP 서버를 하나 만들었다. 시작하기 전에 찾아본 설명은 대부분 「AI 의 USB-C」라는 비유에서 끝났고, 그걸로는 뭘 만들어야 하는지 감이 오지 않았다. 다 만들고 나서 보니 프로토콜은 생각보다 단순했고, 시간은 엉뚱하게 권한 쪽에서 다 썼다. 그 순서대로 적어 본다.

2026년 9월 · 읽는 데 약 7분 · foronelab Phase 30 기록

1한 줄로 말하면

AI 앱이 바깥의 데이터나 도구에 닿는 방법을 규격 하나로 정해 둔 것. 이름은 Model Context Protocol 이고, 2024년 11월 25일 앤트로픽의 David Soria Parra 와 Justin Spahr-Summers 가 공개했다.

USB-C 비유가 왜 붙었는지는 그 전 상황을 보면 이해가 된다.

2그 전에는 어떻게 했나

회사 DB 를 ChatGPT 에 붙이려면 ChatGPT 용 연동을 만들고, Claude 에 붙이려면 Claude 용을 또 만들었다. Cursor, Copilot, 사내 챗봇까지 치면 같은 데이터 하나에 연동이 다섯 벌이다.

거꾸로 봐도 마찬가지다. Claude 하나에 노션, 슬랙, 깃허브, DB 를 붙이면 또 네 벌.

AI 앱이 N 개, 데이터 소스가 M 개면 연동은 N×M 개가 된다. 흔히 N×M 문제라고 부른다. MCP 는 그 사이에 규격을 하나 끼워 넣어서 이걸 N+M 으로 바꾼다. 데이터 쪽은 MCP 서버 하나, AI 앱 쪽은 MCP 클라이언트 하나만 만들면 서로 붙는다.

MCP 없이 연동 20개, MCP 로 연동 9개
앱 5개와 데이터 4개. 왼쪽은 짝마다 연동을 따로 만들고, 오른쪽은 각자 규격 하나만 맞춘다.

기기마다 따로 굴러다니던 충전기가 USB-C 하나로 정리된 것과 모양이 같다. 비유는 여기서 나왔다.

3구조는 셋으로 나뉜다

이름 무엇인가 예
호스트 사람이 직접 쓰는 AI 앱. 모델과 대화 창을 쥐고 있다 Claude Code, Claude 데스크톱, ChatGPT, Cursor
클라이언트 호스트 안에서 서버 하나와의 연결을 맡는 부분 서버 1개당 클라이언트 1개
서버 도구와 데이터를 내놓는 쪽 내 DB, 깃허브, 파일시스템
호스트 안의 클라이언트 3개가 서버 3개와 각각 연결된다
서버 하나에 클라이언트 하나. 호스트와 클라이언트는 Claude Code 에 이미 있고, 내가 만든 건 보라색 한 칸이다.

내가 만든 건 서버다. 호스트와 클라이언트는 Claude Code 안에 이미 있어서 건드릴 일이 없었다. 처음엔 이 구분을 몰라서 클라이언트도 만들어야 하나 한참 찾아봤다.

4서버가 내놓을 수 있는 것 세 가지

실제로 코드를 쓰는 건 여기부터다. 서버가 내놓을 수 있는 건 세 종류이고, 스펙은 이걸 누가 쓰기로 정하느냐로 나눈다.

종류 누가 정하나 성격
도구 (Tools) 모델 (model-controlled) 함수 호출. 「이번 주 할 일 보여줘」라고 하면 모델이 알아서 list_items 를 부른다
리소스 (Resources) 앱 (application-driven) 읽을거리. 파일, 문서, 레코드를 컨텍스트에 넣는다
프롬프트 (Prompts) 사용자 (user-controlled) 서버가 준비해 둔 프롬프트 템플릿. 사용자가 메뉴에서 고른다

나는 도구만 만들었다. 읽기 도구 다섯, 쓰기 도구 셋. 리소스나 프롬프트가 하나도 없어도 잘 돈다. 셋을 다 채워야 하는 줄 알았는데 아니어서, 처음 만들 때 제일 반가웠던 부분이다.

도구 하나는 대략 이렇게 생겼다. 이름, 설명, 입력 스키마, 실행 함수.

server.registerTool("list_items", {
  title: "할 일 목록",
  description: "할 일을 조회한다. when: today(오늘) · week(7일) · late(지연) · all(전체)…",
  inputSchema: {
    when: z.enum(["today", "week", "late", "all"]).default("today"),
    limit: z.number().int().min(1).max(100).default(50),
    // status · projectId · owner 는 생략
  },
}, async ({ when, limit }) => {
  // 기존 조회 함수를 그대로 부른다
  return { content: [{ type: "text", text: JSON.stringify(payload) }] };
});

여기서 description 이 사실상 문서 역할을 한다. 모델은 이 글을 읽고 언제, 어떤 인자로 부를지 정한다. REST API 로 붙였다면 CLAUDE.md 같은 데 엔드포인트 목록을 따로 적어 두고 관리해야 했을 거다. MCP 에서는 그 설명이 코드 옆에 붙어 있어서, 코드를 고치는 커밋에서 설명도 같이 고치게 된다. REST 대신 MCP 를 고른 이유가 사실 이거 하나였다.

클라이언트 쪽이 서버에 내주는 기능도 있다. 루트(Roots — 서버에게 작업할 디렉터리 범위를 알려 준다), 샘플링(Sampling — 서버가 클라이언트 쪽 모델을 빌려 쓴다), 일리시테이션(Elicitation — 서버가 작업 도중 사용자에게 추가 정보를 묻는다). 그런데 2026-07-28 개정에서 루트와 샘플링, 그리고 서버 쪽 기능인 로깅이 폐기 예고(deprecated)됐다. 당장 사라지는 건 아니고 최소 12개월의 이행 기간이 있다. 지금 새로 만든다면 이 셋에는 기대지 않는 게 낫겠다.

5붙이는 방법은 둘

전송 방식 어디서 성격
stdio 내 PC 안 호스트가 서버를 자식 프로세스로 띄우고 표준 입출력으로 주고받는다. 로컬 파일이나 DB 를 붙일 때
Streamable HTTP 원격 HTTP 로 JSON-RPC 를 주고받는다. 이미 배포된 웹 서비스에 붙일 때

내 서비스는 Vercel 에 올라가 있어서 HTTP 쪽이었다. 등록은 명령 한 줄로 끝난다.

claude mcp add --transport http foronelab https://<주소>/api/mcp \
  --header "Authorization: Bearer <토큰>" --scope user

HTTP+SSE 라는 방식도 있었는데 2025-03-26 개정에서 Streamable HTTP 로 대체됐다. 검색하면 아직 그 방식 예제가 꽤 나오니 글 날짜를 보고 거르는 게 좋다.

6표준은 1년 8개월 사이 네 번 개정됐다

버전 시점 비고
2024-11-05 최초 공개 공개 발표는 2024-11-25. 버전 이름과 날짜가 다르다
2025-03-26 Streamable HTTP 도입. OpenAI 채택(2025-03), Google DeepMind(2025-04)
2025-06-18
2025-11-25 2025-12 앤트로픽이 MCP 를 리눅스 재단 산하 Agentic AI Foundation 에 기부. 재단은 앤트로픽·Block·OpenAI 공동 설립
2026-07-28 최신 하위 호환이 깨지는 변경. 무상태 전환

2026-07-28 의 큰 변화는 무상태(stateless) 전환이다. 그 전까지 MCP 는 initialize 로 세션을 열고 Mcp-Session-Id 헤더로 그 세션을 이어 가는 방식이었다. 이번 개정에서 이 두 가지가 빠졌고, 요청마다 프로토콜 버전과 기능 정보를 직접 싣는다. 세션을 들고 있을 필요가 없으니, 공유 저장소 없이 평범한 라운드로빈 로드밸런서 뒤에 서버를 여러 대 둘 수 있다.

다른 변경도 대체로 같은 쪽을 본다. 게이트웨이가 JSON 본문을 열어 보지 않고 헤더(Mcp-Method, Mcp-Name)만으로 라우팅할 수 있게 했고, 목록 응답에는 캐시 수명(ttlMs)을 붙였다. OAuth 인가 과정에는 RFC 9207 의 발급자(iss) 검증이 들어갔다. 실제 서비스로 굴리는 사람들을 위한 개정이라는 인상을 받았다.

SDK 는 패키지가 둘로 나뉘었다

여기서 한 번 헷갈렸다. 내가 설치한 TypeScript SDK @modelcontextprotocol/sdk 1.30.0 을 열어 보면 이렇게 적혀 있다.

export const LATEST_PROTOCOL_VERSION = '2025-11-25';
export const SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, '2025-06-18', '2025-03-26', '2024-11-05', '2024-10-07'];

2026-07-28 이 목록에 없다. 공식 블로그에는 Tier 1 SDK 네 개(TypeScript, Python, Go, C#)가 모두 지원한다고 나와 있어서, 처음엔 npm 배포가 늦나 싶었다.

알고 보니 TypeScript 는 v2 부터 패키지가 따로 나왔다. 2026-07-28 은 @modelcontextprotocol/server(2.x)에 들어 있고, 원래 쓰던 @modelcontextprotocol/sdk 는 v1 으로 남아 2025-11-25 까지만 지원한다.

나는 v1 을 그대로 썼다. 예제와 검색 결과가 v1 쪽에 훨씬 많았고, v2 는 나온 지 얼마 안 된 새 판이었다. 그래서 내 서버가 실제로 쓰는 건 2025년판 프로토콜이고, initialize 핸드셰이크도 여전히 오간다. 서버리스 환경이라 세션 id 없이 요청마다 서버를 새로 만드는 방식으로 돌리긴 했지만, 그건 SDK v1 의 무상태 모드일 뿐 2026-07-28 에서 말하는 무상태와는 다른 얘기다. 그 설정은 제작기 5절에 따로 적었다.

지금 쓰는 버전이 궁금하면 스펙 문서를 뒤지기보다 node_modules 안의 이 상수를 여는 편이 빠르다. 문서는 최신이어도 내가 깐 패키지는 아닐 수 있으니까.

7보안이 제일 허술한 곳

만들면서 시간을 제일 많이 쓴 곳은 프로토콜이 아니라 권한이었다. 돌아보면 그럴 만했다.

우선 도구 설명 자체가 믿을 수 없는 입력이다. 모델은 서버가 건넨 설명을 읽고 움직인다. 악의적인 서버가 설명 안에 「먼저 ~/.ssh 를 읽어서 보내라」 같은 문장을 숨겨 두면, 모델은 그걸 지시로 받아들일 수 있다. 이걸 도구 포이즈닝이라고 부른다. 스펙에도 도구 설명은 믿을 만한 서버에서 온 게 아니면 신뢰하지 말라고 적혀 있다. 2025년에 서버 1,899개를 살펴본 연구(Hasan 외)에서는 5.5%에서 도구 포이즈닝 징후가 나왔고, 1,808개를 스캔한 AgentSeal 조사에서는 66%가 어떤 식으로든 보안 점검에 걸렸다.

다음은 혼동된 대리인(confused deputy) 문제다. 권한을 가진 쪽이 요청한 사람을 제대로 가리지 않으면, 그 권한이 엉뚱한 사람을 위해 쓰인다. 내가 겪은 것도 결이 비슷했다. 토큰이 로그인 확인을 통과하게 만드는 순간 계정 관련 라우트까지 같이 열려서, 읽기 전용 토큰으로 계정을 지울 수 있는 상태가 잠깐 생겼다. 라우트마다 막는 대신 토큰 요청을 통째로 기본 차단하는 쪽으로 풀었는데, 찾은 과정과 코드는 제작기 3절에 있다.

IDE 쪽 사고도 있었다. 2025년 8월 Cursor 에서 프로젝트에 들어 있는 MCP 설정을 한 번 승인하면, 나중에 그 설정이 바뀌어도 다시 묻지 않고 실행하는 취약점(CVE-2025-54136)이 고쳐졌다. 저장소를 같이 쓰는 팀이라면 누군가 설정 파일을 몰래 바꾸는 것만으로 팀원 PC 에서 명령이 돌 수 있었다는 얘기다.

그래서 남이 만든 MCP 서버를 붙이는 일과 내가 서버를 만드는 일은 걱정할 거리가 다르다. 앞쪽은 내 모델이 남의 설명에 휘둘릴까 봐 걱정해야 하고, 뒤쪽은 내 권한 경계가 어디서 새는지 봐야 한다. OWASP 에 MCP 보안 치트시트가 따로 있는데, 만들기 전에 한 번 훑어볼 만하다.

8지금 해볼 수 있는 것

만들지 않고 써 보기만 해도 감은 온다. 파일시스템, 깃허브, 포스트그레스, 슬랙, 노션 같은 서버는 이미 공개돼 있다. 2025년 12월 재단 이관을 발표할 때 이미 활성 서버가 1만 개, SDK 다운로드가 월 9,700만 회를 넘었다고 했다.

직접 만든다면 나는 이 순서가 편했다.

  1. 도구 하나만 먼저 만든다. 리소스나 프롬프트는 나중 일이다.
  2. 이미 있는 조회 함수를 그대로 부른다. 나는 조회 쪽 코드를 한 줄도 고치지 않았다.
  3. DB 행을 통째로 넘기지 말고 필요한 필드만 골라 담는다. 모델이 읽을 분량이 줄고, 나중에 컬럼이 늘어도 응답이 모르는 새 불어나지 않는다.
  4. 쓰기는 기존 쓰기 경로를 다시 쓴다. 따로 만들면 변경 이력과 되돌리기가 두 군데로 갈라진다.
  5. 권한은 기본 차단에 허용 목록. 제일 귀찮은 일인데, 이걸 빼먹으면 앞의 네 개가 다 소용없어진다.

마치며

MCP 는 AI 앱과 데이터 사이에 규격 하나를 둔 것이고, 서버를 만드는 입장에서는 도구 몇 개만으로도 충분히 쓸모가 있다. 표준은 빠르게 바뀌는 중이라, 글이나 예제를 볼 때는 어느 버전 얘기인지부터 확인하는 게 좋다. TypeScript 라면 설치한 패키지 이름부터 보면 된다.

프로토콜을 붙이는 데는 오래 걸리지 않았다. 시간 대부분은 누가 무엇을 할 수 있는지 정하는 데 들어갔는데, 다시 해도 그렇게 쓸 것 같다.

참고

h

hyos

IT · 스타트업 · 개인기록. 만들고, 실패하고, 기록합니다.

IT 2026. 9. 13. 21:40

??? : 2개월 동안 토큰 71억개 쓰셨습니다.

영수증을 열어봤다

클로드 코드로 두 달쯤 일했다. 개발도 하고 사업 문서도 쓰고 리서치도 시켰다. 그러다 문득 궁금해졌다. 나는 토큰을 도대체 얼마나 쓴 걸까.

찾아보니 기록이 다 남아 있었다. ~/.claude/projects/ 아래에 세션마다 파일이 하나씩 있고, 그 안에 응답 한 번당 토큰을 몇 개 썼는지가 그대로 적혀 있다. 추정할 필요가 없다. 영수증이 있는 셈이다.

전부 긁어모아 합산했다. 세션 28개, 7월 9일부터 9월 13일까지.

총 71억 5,000만 토큰

숫자만 보면 무섭다. 그런데 뜯어보니 이 71억의 정체가 내 생각과 달랐다.


토큰은 한 종류가 아니다

토큰은 네 가지로 나뉘고, 종류마다 가격이 다르다.

종류 두 달 합계 비중 무슨 뜻인가
캐시 읽기 68억 8,000만 96.2% 이미 나눈 대화를 다시 읽는 것
캐시 저장 2억 4,600만 3.4% 새로 오간 대화를 다음 질문에 대비해 저장
출력 2,250만 0.3% AI가 실제로 써낸 글자
캐시 안 걸린 입력 7만 4,000 0.001% 캐시에 없어서 그대로 읽은 입력

AI가 실제로 써낸 글은 전체의 0.3%다. 나머지는 읽는 데 들어갔다.

AI는 매번 처음부터 다시 읽는다

왜 이렇게 되나. AI에게 기억이 없기 때문이다.

대화가 이어지는 것처럼 보이지만, 실제로는 질문 하나에 답할 때마다 그 세션의 대화를 처음부터 끝까지 다시 읽는다. 100번째 질문에 답하려면 앞의 99번을 읽어야 한다. 200번째면 199번을 읽는다.

그래서 대화가 길어지면 한 마디 주고받는 비용이 계속 올라간다. 질문이 어려워져서가 아니라 읽어야 할 앞부분이 길어져서다.

캐시는 이걸 싸게 만들어주는 장치다. 같은 내용을 다시 읽을 때는 정가의 10%만 받는다. 그래서 개수로는 96%를 차지해도 실제 비용은 그만큼 나오지 않는다. 반대로 출력은 입력의 5배로 비싸다. 0.3%밖에 안 되는 출력이 비용에서는 꽤 큰 자리를 차지하는 이유다.

아래부터는 종류별 가격 차이를 반영해서 환산한 값으로 비교했다. 그래야 같은 기준으로 놓고 볼 수 있다.

긴 대화는 9배 비싸다

세션을 길이별로 묶어서 질문 한 번 던지는 데 얼마가 드는지 계산했다.

세션 길이 질문 1회당 비용(환산)
대화 200번 미만 11만 9,000
500~900번 67만 1,000
1,500번 이상 110만

똑같이 "이거 고쳐줘" 한 줄을 쳐도 긴 대화 끝에서 치면 9배가 든다.

제일 긴 세션은 대화가 2,495번까지 갔다. 이 세션은 질문 한 번에 720만 토큰을 썼다. 짧게 끝낸 세션들은 30만 토큰 언저리였다. 같은 일을 시켜도 어디서 시키느냐에 따라 20배가 갈린다.

대화가 길어지면 느려진다는 건 알고 있었다. 느려지는 게 아니라 비싸지고 있었다.

세션을 쪼개 쓰고 있었다

나는 몇 달 전부터 작업을 좀 이상하게 하고 있다. 세션 하나를 관제탑으로 정해두고 실제 작업은 다른 세션들에 맡긴다. 관제탑은 지시를 내리고 결과를 기록 파일에 한 줄씩 적는다. 개발은 개발 세션에서, 문서는 문서 세션에서 한다.

원래는 맥락이 섞이지 않게 하려고 만든 방식이다. 코드 얘기하다 사업 문서 얘기를 꺼내면 둘 다 흐려지니까.

이번에 집계하면서 다른 게 하나 눈에 들어왔다.

세션 수 질문 수 질문 1회당 비용 질문당 도구 사용
관제탑 10개 852회 52만 5,000 3.9회
실행 세션 4개 284회 100만 9.0회

관제탑이 딱 절반이다.

그런데 이걸 관제가 효율적이라는 뜻으로 읽으면 안 된다. 맨 오른쪽 칸을 보자. 관제탑은 질문 하나에 도구를 3.9번 쓰고 실행 세션은 9번 쓴다. 관제탑이 하는 일은 파일 위치를 알려주고 기록에 한 줄 적는 거라 원래 가볍다. 실행 세션은 코드를 읽고 고치고 테스트를 돌리니 무거울 수밖에 없다. 하는 일이 다른 둘을 비용으로만 비교한 셈이다.

진짜 이유는 다른 데 있다.

일을 여러 세션으로 쪼개면 각 세션이 짧게 유지된다.

한 세션에 전부 밀어넣으면 뒤로 갈수록 질문 한 줄이 계속 비싸진다. 나눠서 맡기면 모든 세션이 앞쪽 구간, 그러니까 싼 구간에 머문다. 관제탑도 결과 요약만 받으니 살이 안 찐다.

돈을 아끼려고 만든 방식이 아니었는데 그렇게 굴러가고 있었다.

그래서 뭘 바꿨나

세 가지를 바꿨다.

일이 끝나면 세션을 끊는다. 아깝다고 붙잡고 있으면 다음 질문부터 비싸진다. 맥락이 필요하면 결과를 파일로 남기고 새로 시작하는 편이 싸다.

무거운 일과 가벼운 일을 섞지 않는다. 코드를 한참 읽힌 세션에서 문장 하나 다듬어달라고 하면, 그 한 문장을 위해 앞의 코드를 전부 다시 읽는다.

요약을 파일로 남긴다. 대화를 통째로 이고 다니는 것보다 결론만 적어두고 다음 세션에서 그 파일만 읽히는 게 훨씬 싸다. 내 경우엔 그게 그 기록 파일이었다.

남은 한계

몇 가지는 짚어둬야겠다.

세션을 제목으로 분류했다. 기록에 세션 고유번호가 안 남아서 어느 세션 것인지 정확히 가려내지는 못한다.

AI가 따로 띄운 보조 세션이 쓴 토큰은 저장 위치가 달라서 이 집계에 안 들어갔다. 48건이다. 실제 총량은 이보다 크다.

캐시 저장 단가를 1.25배로 잡았다. 캐시를 오래 물고 있는 설정이면 2배가 된다. 어느 쪽이든 긴 세션이 비싸다는 결론은 그대로다.

h

hyos

IT · 스타트업 · 개인기록. 만들고, 실패하고, 기록합니다.

일상/창업 2026. 8. 30. 06:06

[창업] 브랜드 네임밍 다시 진행하게 SSUL (특허 번호 신청 & 상표권 신청 방법, in 특허로)

(잡SSUL)

 

사업을 시작하면서

이런 서비스를 만들어야지!

이런 이름으로 해야지!

하고 호기롭게 시작했는데, 여러가지 찾아보고 강의를 듣다보니까

 

① 네이밍이 중요해요! => 나는 아주 잘 어울려 들으면 뭔지 아는 서비스야

② 상표 등록도 해야해요! => 상표 없는거 확인했는데 다시 한 번 볼까?

 

🤖 : 비슷한 이름이면 반려 당할 수 있다 휴먼.

 

????? 그걸 왜 지금 말해 임마

 

그래서... 로고, 이름 싹다 버렸다..

 

① 비슷하면 안됨

② 이름을 들었을 때 브랜드가 무슨 브랜드인지 알 수 있어야함

③ 너무 어려워도 안됨

④ 너무 유치해도 안됨

⑤ 내 맘에 안들면 안됨

 

2번을 할 때 다시 초심으로 돌아간 것 처럼, 새로운 마음으로 고민을 했다...

 

내 서비스는 뭐지?

내 서비스만의 특장점은 뭐지?

내 서비스만의 아이덴티티를 만들 수 있는 이름이 뭘까

 

그래서 하루종일 Claude, Gemi, ChatG 3개를 야무지게 돌렸다.

Gemi는 너무 단조롭고, 유치해서 패스 => 넌 유료인데 왜???

ChatG는 제법 잘 주길래 좀 갈궜더니 맘에드는걸 몇개 추리더라 =>무료인데...?

Claude는 제법 잘 주길래, ChatG랑 두개 가지고 핑퐁을 했고,

 

ChatG 자료로 최종 결정 완료!

 

그리고 그 다음은 로고 만들자!

 

Gemi는 넌 탈락이야. 상상력과 감수성이 좀 부족해 => 데이터 수집이랑 실사화 이미지 만드는거만 특화인듯

ChatG는 아 이 친구 잘해. 너 재능있어. 감수성이 있어서 잘만듦

Claude 말은 잘 알아들었는데 내가 원하는 느낌이 1도 없음 진짜 무슨 그냥 노가다 하는 애처럼 하길래 패스

 => 대표 마인드 ON(이게 기획서야? 이게 최선이야?)

 

ChatG 자료로 최종 결정 완료했고, 상표권 등록도 진행을 하게 됐다.

 

(잡SSUL 끝)

===============

0.상표 신청(in 특허로)

 

개인(1인) 사업자로 상표를 등록한 방법이니 참고만해주세요!

 

준비물

0. 크롬(chrome) 브라우저

 

1. 특허 번호 고객 발급 

   1-1. 인감 이미지 => 저는 A4 종이에 도장찍어서 카메라 로 캡쳐해서 냈습니다. 선명하게 나오면 문제 없다구 합니다.

   1-2. 서명 이미지 => 저는 태블릿으로 서명해서 캡쳐해서 썼어요!

 

2. 은행 공인인증서 => 마지막 제출할 때 필요합니다.

 

======

1. 특허고객등록

상표 등록 시 특허 고객 번호가 있어야 합니다.

안내상으로 2일정도 소요된다고 하는데, 저는 하루만에 승인 됐습니다.

비용은 0원입니다.

 

메인페이지 상단에 '특허고객등록' 으로 들어가주세요

 

좌측에 특허고객등록 눌러주시고

 

보안 프로그램 설치 페이지가 나오는데, 설치 다하시고

 

 

아래로 쭉 내려보시면 정보 입력하는 페이지가 나옵니다.

 

저는 '국내자연인'으로 선택하고

개인정보 입력 쭉쭉하고 다음으로 진행했습니다.

 

근데 실명인증 누르면 개인정보를 또 입력해야해요(?)

인증 다 하고 다음 누를 때 있어야하니까 입력해봅시다..

 

 

실명인증 누르면 나오는 또하나의 입력창..

 

저는 이 글 작성 당시 발급이 되어있어서, 추가로 가이드를 드릴 수 없는 점 양해부탁드립니다 ㅠㅠ

미리 준비하신 서명과, 직인을 첨부하셔서 신청하시면 됩니다.

 

========

2. 상표 등록

특허로(https://www.patent.go.kr/smart/portal/Main.do) 메인페이지에 들어가면

웹작성/제출에 '상표' 메뉴가 있습니다.

 

특허로 > 상표

 

상표에 상표등록출원서를 눌러주시고

상표 > 상표등록 출원서

 

 

작성 제출 창이 나옵니다.

출원인 정보는 개인으로 진행하시는거면 자동으로 등록이 됩니다.

출원인이 추가로 있다면 '추가' 버튼을 누르셔서 등록하시면 됩니다.

출원인 입력

 

공동 출원 있으시면 작성하고 DB 입력하시면 될 듯합니다. (출원인 정보 입력창인데 저는 따로 없으니 팻스~)

출원인 추가

 

 

등록 대상 입력방법은 '고시 명칭만 입력' 으로 진행하시면 됩니다.

'고시되지 않는 명칭 입력'은 내가 텍스트로 입력해야하는데

추후 심사 시 해당 명칭에 대해 심사 당시 의견 제출이 날라올 수 있습니다.

 

※ 비용도 차이가 있습니다

고시명칭 : 46,000원

고시되지 않은 명칭 : 52,000원

등록대상 입력방법

 

 

- 상품류 선택 하시는데 등록하실 상표의 상품들이 어느 파트에 들어가는지 선택하시고

 상품 검색 해주시면 됩니다. 

 

참고하시라고 링크 전달 드립니다. 검색해서 사용해주세요!

https://claude.ai/code/artifact/94a7dd25-932b-4afb-9b25-72c0eadf1937

지정상품 찾기 (참고용)

 

검색하시고,

상세 세목의 항목을 선택하셔서 '선택 추가' 클릭하여서

지정 상품으로 지정해주세요

 

※ 상품류가 늘어날수록 신청 금액이 늘어납니다. 금액을 아끼고 싶으시다면 같은 류로 진행하시길 권고드립니다.

키워드 검색

 

 

지정 상품을 다 추가하셨으면, '지정상품 추가'를 꼭!! 눌러주세요!!!!

※ 그냥 적용누르면 처음부터 다시 해야합니다.

지정 상품 추가 꼭!!!

 

 

다음은 상표 유형인데요. 

상표 유형의 '추가' 버튼 클릭하시면 어떤 상표를 추가할 것인지 선택하는 창이 나옵니다.

문자 상표 하시는거면 '일반상표' 체크하시고 적용 누르시면됩니다.

 

적용을 누르시면 팝업이 하나 나올탠데, 일반상표는 취소누르시면 됩니다.

특수 상표의 그림으로 보여줄 수 없는 상표를 위한 내용을 입력하는 입력창입니다. 

글자 상표에 내용을 적게되면 권리의 범위를 좁히는 근거가 되기 때문에 안적는걸 추천합니다.

 

상표유형
일반상표
따로 입력 안해도 된다고 합니다.

 

 

다음은 수수료 입니다. (납부하실 금액)

- 수수료의 경우 N류 x 등록대상 입력방법 별 금액(46,000 or 52,000)

이건 작성 완료하고 나중에 납부합니다.

내가 신청한 상품류가 맞는지 체크!

 

- 자동 납부번호가 있으시다면 찾기하셔서 입력하시면 되겠습니다.(저는 없어서 안했습니다.)

 

 

- 상품 견본은 텍스트로 진행합니다. 텍스트 입력해주시고 '변환' 눌러주시면 미리보기로 나옵니다.

상품 이미지가 있으시다면 넣어서 진행하시는것도(?) 가능한걸로 보입니다.

전 아직 확정이 안난상태라서 텍스트로 진행했습니다.

 

- 첨부서류가 따로 없기 때문에 첨부서류 체크박스 해제 해주시면 됩니다.

 

 

페이지 제일 위 우측 상단 '작성완료 및 서명' 눌러주시면

 

 

아래와 같이 제출을 위한 서류가 준비가 됩니다.

'온라인 제출' 눌러주시고 공인인증서 사용하셔서 최종 제출 완료하시면 됩니다!

 

==============================

3. 수수료 납입

제출 완료하시고 나면 납입고지서 나올껍니다.

 

저는 처음에 가상계좌로 입금하려했으나 '입금이 불가능한 계좌?'로 나와서 그냥 온라인으로 납부했습니다.

 

계좌해보시고 안되면 저처럼 온라인 납부로 진행하시면 될 것 같습니다.

 

특허로 메인페이지 > 수수료관리 > 수수료 납부 메뉴로 들어가주시고

 

 

지식재산처 사이트 납부 > 온라인납부 바로가기 로 들어가시면

 

 

저는 이미 등록을 완료 한 상태라 항목이 나오지는 않지만

'결제'를 진행하게 되면 보통 사용하시는 카드사 선택, 결제 방법 선택이 나와서 쭉 결제를 진행하시면됩니다. (전 네이버페이 - 머니 결제로 진행했습니다.)

 

이러면 특허고객 등록부터 상표까지 끝납니다.

 

특허고객번호는 바로 발급되는게 아니라서, 발급완료됐다 싶으면

상표 등록 진행하시면 되겠습니다~!

 

처음 해봤는데 크게 특이하거나 어려운 점이 없어서 잘 진행한 것 같습니다.

도움 되셨길 바랍니다~!

h

hyos

IT · 스타트업 · 개인기록. 만들고, 실패하고, 기록합니다.

일상/창업 2026. 8. 4. 16:38

대체 뭐가 문제야????(주저리 주저리)

문제가 뭔데
대체 무슨 문제야
문제야 뭐야
대체로 문제야??

대체 뭐가 문제야?

라는 책을 읽었습니다.

오늘은 AI 없이 글을 써보려고 합니다.

왜냐하면 일상글 like 한 게시글이거든요.
(주저리 주저리 말고 책 내용 궁금하시면 스크롤 해서 내려가주세요!. 휘리릭 휘리릭)



퇴사한지 어언 3개월차...
SI에서 다른 길을 찾아보고 싶어서 나왔는데

제법 괜찮은 아이템, 직접 구현할 수 있는 환경(claude), 평소부터 가지고 있던 ⭐️창업의 꿈⭐️과 열정🔥

을 가지고 호기롭게 시작하였으나

- 연이은 창업프로그램 탈락
- 설계 당시 발견하지 못했던 사업 구조
- 인생의 방향을 잃고 찾아온 무기력, 우울감
- 떨어지는 주식(?) 등

'이 상태는 답이 없다',  '이건 위험하다!', '나는 이럴 수 없다' - (ESTJ 특)

하고 혼자만의 휴가를 왔습니다.
처음부터 다시 생각해봐야겠다 라는 생각을해서
나름의 휴식을 하러왔습니다. (그만 쉬고싶어)

카페 오가소 in 강화도

날씨 너무 덥네요. 다들 더위 조심하시기 바랍니다..



------
대체 뭐가 문제인데?는
기획자/PM이라면 한 번 쯤 읽어보면 좋은 책이라고 생각한다.

이 책을 읽으면서 느낀건, 독자에게 정답을 알려주기 보다,
생각의 패러다임을 바꿀 수 있는, 다른 시각에서 생각할 수 있는 방법을 제시한다.

당신 문제의 본질은 무엇인가?

문제를 문제라고 생각하지 않고, 어떠한 현상이라고 인식하고 진짜 본질적인 문제가 무엇인지 생각해보라

한 빌딩에서 '엘리베이터가 느려서 불편하다' 라는 불편사항이 접수되었다.

해결 방안으론 여러가지가 있을 것이다.
- 엘리베이터의 속도를 높인다.
- 엘리베이터를 수직으로 하나 추가한다.
- 업무 시간을 조정한다.
- 건물을 불태워서 보험금을 받는다.

위 방안들이 문제를 해결할 수 있지만 '누구'의 문제인가?, 어떤 문제인가?, 정말 문제인가?를 생각해봐야한다.





문제란 바라는 것과 인식하는 것 간의 차이다.

엘리베이터 문제에 대한 인식으로 예를 들면 인식은 '엘리베이터가 느리다' 이고, 바라는 것은 '오래 기다리지 않는 것' 으로 정의했다.
이 문제를 해결하기 위해, 실제로 시간을 단축하거나, 엘리베이터를 기다리는 시간이 길다고 느껴지지 않도록 방안을 내놓을 수 있다.

기다리는 시간이 길다는 것을 느끼지 못하도록
거울을 설치하여 사람들이 옷매무새를 다듬고, 외모를 정리하는 등 시간을 보낼 수 있도록 조치하였다.

근데 거울이 늘어나자 낙서들이 생기는 문제가 생겼다.
담당자는 '이상하게 생긴 낙서가 문제야' 라고 판단하고, 크레용을 비치하여
낙서를 하도록 하는 '문제를 악화하여 문제를 해결' 하는 방안으로 처리하였다.

위 방안들이 근본적인 해결책은 아니었다.
시공사의 입장에선 확인하자 실제로 엘리베이터에 시스템적 문제가 있었고, 엔지니어들은 문제를 확인하고 해결하였다.
실제로 문제가 해결되자, 지하철역에 사람들이 쏟아져 나와서 건물주의 장례식이 열렸다나 뭐라나...

여기서 생각이 드는건
' 어떻게 인식하느냐', '정답도 정답이 아닐 수 있으니, 여러가지 리스크를 고민하고, 일단 해보자'






문제 정의를 위해, 문제를 제시한 쪽의 방법을 선택하지 마라

만약 문제를 너무 쉽게 해결한다면,
문제를 제시한 사람은 결코
당신이 문제를 해결했다고
믿지 않을 것이다.

클라이언트와의 커뮤니케이션을 효과적인 결과를 이끌어 내기 위한 조언이라고 생각한다. 원하는 결과를 얻어내기 위해서 적당한 긴장감(시간)은 필요하다고 생각한다.




또 다른 해결안을 얻기 위해 어떻게 문제를 바꾸어 기술할 것인가?

하나의 문제에 대해서 여러가지로 기술해보는 것이다.
- 다음 그림은 매우 친숙한 물건을 나타낸다. 무엇일까?
- 다음 그림은 물건을 나타낸다. 무엇일까?
- 다음 그림은 친숙한 물건을 나타낸다. 무엇일까?
- 다음 그린은 매우 친숙하지 않은 물건을 나타낸다. 무엇일까?

이런 사소한 변화로 여러가지 방안을 생각할 수 있을 것이다.





따분한 문제 정의의 경로를 조심조심 따라가더라도, 때때로 제자리로 돌아와서
혹시나 잘못 가는 건 아닌지 검토해 보라

빠진 것 없는지 다시 검토해!!








그들 스스로 문제를 완벽하게 풀 수 있을 때에는 그들의 문제 해결에 끼어들지 않는다.
만약 그것이 그들의 문제라면 그들의 문제가 되도록 하라.

이건 SI 하면서도 느낀건데, 클라이언트의 문제는 클라이언트가 제일 잘 알고 있다. 괜히 내가 이해한 내용으로 어줍잖게 해결하다가,
나중에 책임소재가 누구한테 있느냐, 니가했네 내가했네 말이 많이 나온다..
당신들의 문제는 당신들이 정의해서 해결해라...







겉으로 어떻게 드러나든, 사람들은 자신들이 필요로 하는 것을 갖기 전까지는
자신들이 뭘 원하는지 거의 알지 못한다.

문제를 해결하기 전까진, 고민하기 전까진 문제인지 인식하지 못한다. 처음에 말했던 인식의 문제와 연관된다고 생각한다. 사람은 '적응'하기 때문에

h

hyos

IT · 스타트업 · 개인기록. 만들고, 실패하고, 기록합니다.

COMMENTS