<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>현또의 코딩세상</title>
    <link>https://rhsgutj01.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 27 Jun 2026 17:14:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>또코딩</managingEditor>
    <image>
      <title>현또의 코딩세상</title>
      <url>https://tistory1.daumcdn.net/tistory/5000949/attach/a2b357b2cebb4ab0bdaa74a2a3d3d94c</url>
      <link>https://rhsgutj01.tistory.com</link>
    </image>
    <item>
      <title>[Claude Code] CLAUDE.md가 수백 줄이 되면 생기는 일, 그리고 &amp;quot;.claude/rules/&amp;quot;</title>
      <link>https://rhsgutj01.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;실무에서 &lt;code&gt;CLAUDE.md&lt;/code&gt; 하나에 모든 규칙을 쌓다 보면 어느 순간 파일이 수백 줄이 됩니다. 그리고 그때쯤 Claude는 규칙을 잘 따르지 않기 시작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이유는 단순합니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;는 세션 시작 시 전체가 컨텍스트 윈도우에 올라갑니다. 파일이 길수록 토큰을 낭비하고 준수율이 떨어집니다. 공식 문서도 &lt;b&gt;파일당 200줄 이하&lt;/b&gt;를 권장하며, 그 이상이 되면 path-scoped rules로 분리하라고 명시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서에서 이 문제의 해법으로 제시하는 게 &lt;code&gt;.claude/rules/&lt;/code&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;두 가지 메모리 시스템&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;와 &lt;code&gt;.claude/rules/&lt;/code&gt;는 로드 방식 자체가 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;는 세션이 시작될 때 항상 전체가 로드됩니다. 그래서 여기에는 어떤 파일을 작업하든 항상 알아야 하는 것만 넣어야 합니다. (ex. 빌드 명령, 폴더 구조, &quot;항상 X를 수행한다&quot; 같은 규칙)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;.claude/rules/&lt;/code&gt;는 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;code&gt;paths&lt;/code&gt; frontmatter로 범위를 지정하면, Claude가 해당 패턴과 일치하는 파일을 Read할 때만 로드됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, C 파일 작업할 때 Python 규칙이 올라올 필요가 없고, DB 건드릴 때만 DB 규칙이 올라오면 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;rules 로드 흐름&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;1484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCyqfw/dJMcabqSfmq/QLfE2HZVq5besqvfo3gpL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCyqfw/dJMcabqSfmq/QLfE2HZVq5besqvfo3gpL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCyqfw/dJMcabqSfmq/QLfE2HZVq5besqvfo3gpL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCyqfw%2FdJMcabqSfmq%2FQLfE2HZVq5besqvfo3gpL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1094&quot; height=&quot;1484&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;1484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할 점은, 경로별 규칙은 도구를 사용할 때마다 트리거되는 게 아니라 &lt;b&gt;파일을 Read하는 시점&lt;/b&gt;에 트리거됩니다.&lt;br /&gt;&lt;code&gt;client/foo.cs&lt;/code&gt;를 열면 그때 &lt;code&gt;c-style.md&lt;/code&gt;와 &lt;code&gt;client.md&lt;/code&gt;가 로드되는 식입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실무 폴더 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C/Python 혼합, Git 기반 프로젝트 기준으로 구성하면 이렇습니다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;project/
├── CLAUDE.md
└── .claude/
    └── rules/
        ├── git-workflow.md          &amp;larr; paths 없음, 항상 로드
        ├── languages/
        │   ├── c-style.md           &amp;larr; paths: &quot;**/*.{c,h,cs}&quot;
        │   └── python-style.md      &amp;larr; paths: &quot;tool/**/*.py&quot;
        └── modules/
            ├── client.md            &amp;larr; paths: &quot;client/**/*&quot;
            ├── db.md                &amp;larr; paths: &quot;db/**/*&quot;
            └── bin.md               &amp;larr; paths: &quot;bin/**/*&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;git-workflow.md&lt;/code&gt;처럼 &lt;code&gt;paths&lt;/code&gt;를 지정하지 않으면 &lt;code&gt;CLAUDE.md&lt;/code&gt;와 동일하게 세션 시작 시 항상 로드됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Git 워크플로우처럼 어떤 파일을 작업하든 항상 지켜야 하는 규칙이 여기 해당합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CLAUDE.md 작성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에는 최소한만 넣습니다.&lt;/p&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;# 프로젝트 개요
C/Python 기반 임베디드 프로젝트

## 폴더 역할
- client/    : 클라이언트 모듈 (C, C#)
- src/       : 핵심 소스 (C)
- bin/       : 빌드 산출물 (수정 금지)
- tool/      : 내부 유틸리티 (Python)
- resources/ : 정적 리소스
- db/        : DB 테이블 정의 (수정 금지)

## 빌드 명령
- 전체 빌드 : make all
- 테스트     : make test
- 클린       : make clean

## 공통 규칙
- main 브랜치 직접 push 금지, PR을 통해 머지
- 커밋 전 make lint 실행

## 민감한 영역
- db/ 수정이 필요할 시, 담당자 확인 후 진행 (.claude/rules/modules/db.md 참고)
- bin/ 직접 수정 금지, 빌드로만 생성&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;db 관련 경고를 CLAUDE.md에도 넣는 이유가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;db.md&lt;/code&gt;는 db/ 파일을 열 때 로드되지만, CLAUDE.md의 경고는 세션 시작부터 인지합니다. 작업 계획 단계에서부터 건드리지 않도록 하는 이중 안전장치입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;paths 패턴 매칭&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패턴이 틀리면 rules 자체가 의미 없습니다.&lt;br /&gt;자주 실수하는 부분이니 주의해야할거 같습니다.&lt;/p&gt;
&lt;pre class=&quot;haml&quot;&gt;&lt;code&gt;# 안 되는 패턴
paths:
  - &quot;client/&quot;          # 슬래시만으로는 매칭 안 됨
  - &quot;*.c&quot;              # 루트의 .c 파일만 매칭, 하위 폴더 안 됨
  - &quot;client/*.c&quot;       # client/ 바로 아래만, 하위 폴더 안 됨

# 올바른 패턴
paths:
  - &quot;client/**/*.c&quot;    # client/ 하위 모든 .c 파일
  - &quot;client/**/*&quot;      # client/ 하위 모든 파일&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확장자가 여러 개면 중괄호로 묶습니다.&lt;/p&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;paths:
  - &quot;src/**/*.{c,h}&quot;
  - &quot;client/**/*.{c,h,cs}&quot;
  - &quot;**/*.{json,xml}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패턴 설계 전에 실제 확장자 분포를 먼저 확인하는 게 좋습니다.&lt;/p&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;db.md 작성 예시&lt;/h2&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;---
paths:
  - &quot;db/**/*&quot;
  - &quot;**/*.sql&quot;
---

# DB 규칙

## 절대 금지
- 테이블 정의 파일 직접 수정 금지
- 컬럼 삭제, 타입 변경 금지 (레거시 의존성)
- DROP, TRUNCATE 구문 사용 금지

## 수정이 필요한 경우
- 반드시 담당자에게 먼저 확인
- Claude는 수정안 제안만 하고, 실제 적용은 하지 않음
- 새 컬럼은 반드시 nullable로 추가&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 &lt;code&gt;CLAUDE.md&lt;/code&gt;는 &quot;무엇을 조심해야 하는지&quot;, &lt;code&gt;.claude/rules/&lt;/code&gt;는 &quot;어떻게 다뤄야 하는지&quot;로 역할을 나누는 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 나누면 얻는 것들이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;관계없는 규칙은 컨텍스트에 올라오지 않으니 &lt;b&gt;속도가 붙고&lt;/b&gt;,&lt;br /&gt;GitHub 저장소에 커밋해두면 팀 전체가 동일한 규칙을 clone 받습니다. (중앙 관리하기 좋겠죠?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;신규 팀원이 &lt;code&gt;.claude/rules/&lt;/code&gt;만 읽어도 프로젝트 규칙 대부분을 파악할 수 있고, Claude가 실수할 때마다 해당 rules 파일에 한 줄 추가하면 &lt;b&gt;팀의 노하우가 코드베이스에 쌓입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, AI가 무엇을 알고, 무엇을 모르고, 무엇을 건드리면 안 되는지를 코드베이스 수준에서 버전관리하는 구조입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실전 프로젝트 적용기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity 데스크톱 게임 사이드 프로젝트에 Claude Code를 쓰면서, 기존에 &lt;code&gt;CLAUDE.md&lt;/code&gt; 하나에 모든 규칙을 넣던 방식을 &lt;code&gt;.claude/rules/&lt;/code&gt;로 분리하는 실험을 했습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 적용 전 &amp;mdash; 한 파일에 모든 규칙이 쌓여있던 상태&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1822&quot; data-origin-height=&quot;1274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SNJAb/dJMcagFJ3tD/Ng9LDRO2RktUeeKiKspBy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SNJAb/dJMcagFJ3tD/Ng9LDRO2RktUeeKiKspBy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SNJAb/dJMcagFJ3tD/Ng9LDRO2RktUeeKiKspBy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSNJAb%2FdJMcagFJ3tD%2FNg9LDRO2RktUeeKiKspBy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1822&quot; height=&quot;1274&quot; data-origin-width=&quot;1822&quot; data-origin-height=&quot;1274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;는 세션 시작 시 항상 전체가 컨텍스트 윈도우에 로드됩니다. 그런데 어느 순간 213줄까지 늘어 있었습니다. 공식 문서 권장치인 200줄을 이미 넘긴 상태였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안에는 이런 것들이 섞여 있었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;sect;1~&amp;sect;3: 프로젝트 개요&amp;middot;폴더 구조&amp;middot;진입점 &amp;mdash; 어떤 작업이든 알아야 하는 것&lt;/li&gt;
&lt;li&gt;&amp;sect;4~&amp;sect;5: CLAUDE.md 운영 규칙 &amp;mdash; 메타 문서&lt;/li&gt;
&lt;li&gt;&amp;sect;6.1: 파일/폴더 명명 &amp;mdash; 문서 작업할 때만 필요&lt;/li&gt;
&lt;li&gt;&amp;sect;6.2 Git 워크플로우, &amp;sect;7 AI 공통 규칙 &amp;mdash; 합의 필요로 비어있는 placeholder&lt;/li&gt;
&lt;li&gt;&amp;sect;8.1~&amp;sect;8.4 Behavioral Guidelines &amp;mdash; LLM 코딩 공통 가드레일&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 &lt;code&gt;.cs&lt;/code&gt; 파일을 만질 때도, 문서를 쓸 때도, 씬을 건드릴 때도 위 &amp;sect;1~&amp;sect;8 전체가 매번 컨텍스트에 들어간다는 점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 맥락과 무관한 규칙이 항상 함께 떠 있고, 새 영역(셰이더&amp;middot;사운드 등)을 추가할수록 모든 작업의 비용이 같이 늘어날거 같았습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 실제로 쪼갠 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;.claude/rules/&lt;/code&gt;의 핵심은 &lt;code&gt;paths&lt;/code&gt; frontmatter로 매칭되는 파일을 Read할 때만 해당 규칙 파일이 시스템 프롬프트에 끼어든다는 점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 활용해 다음과 같이 나눴습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1802&quot; data-origin-height=&quot;1394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3Qwqc/dJMcahxQUtq/b8E5JJacx7kbmGBNx4zJlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3Qwqc/dJMcahxQUtq/b8E5JJacx7kbmGBNx4zJlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3Qwqc/dJMcahxQUtq/b8E5JJacx7kbmGBNx4zJlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3Qwqc%2FdJMcahxQUtq%2Fb8E5JJacx7kbmGBNx4zJlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1802&quot; height=&quot;1394&quot; data-origin-width=&quot;1802&quot; data-origin-height=&quot;1394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;.claude/rules/
├── git-workflow.md          &amp;larr; paths 없음, 항상 로드
├── behavioral-guidelines.md &amp;larr; paths 없음, 항상 로드
├── unity/
│   ├── csharp.md            &amp;larr; C# 작업 시에만 로드
│   ├── scenes.md            &amp;larr; 씬 파일 작업 시에만 로드
│   ├── project-settings.md  &amp;larr; ProjectSettings 건드릴 때만 로드
│   └── characters.md        &amp;larr; 캐릭터 에셋 작업 시에만 로드
└── docs-conventions.md      &amp;larr; 문서 작업 시에만 로드&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;써보면서 이 구조가 두 가지 다른 목적으로 작동한다는 걸 알게 됐습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;장점 1. CLAUDE.md 슬림화 &amp;mdash; 정리 목적&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;git-workflow.md&lt;/code&gt;, &lt;code&gt;behavioral-guidelines.md&lt;/code&gt;처럼 &lt;code&gt;paths&lt;/code&gt;가 없는 파일들입니다.&lt;br /&gt;로드 시점은 &lt;code&gt;CLAUDE.md&lt;/code&gt;와 완전히 동일해서 &lt;b&gt;컨텍스트 절약 효과는 없습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신 규칙 종류별로 파일이 분리되어 있어서 수정할 때 &lt;code&gt;CLAUDE.md&lt;/code&gt; 전체를 뒤지지 않고 파일명으로 바로 찾을 수 있다는 게 장점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(팀이 합의할 때마다 해당 파일만 열어서 한 줄 추가하면 끝입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빈 &amp;sect;6.2 / &amp;sect;7 placeholder를 &lt;code&gt;CLAUDE.md&lt;/code&gt; 본문 한가운데서 들어내고 &lt;code&gt;git-workflow.md&lt;/code&gt; placeholder 파일로 옮긴 것도 같은 목적입니다. (본문이 깔끔해집니다)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;장점 2. 컨텍스트 절약 &amp;mdash; paths 지정 파일만 해당&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;csharp.md&lt;/code&gt;, &lt;code&gt;scenes.md&lt;/code&gt;처럼 &lt;code&gt;paths&lt;/code&gt;를 지정한 파일들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 경로의 파일을 Read하는 순간 시스템 프롬프트에 삽입됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;.md&lt;/code&gt; 문서 작업 중에는 C# 규칙이 올라오지 않고, &lt;code&gt;.cs&lt;/code&gt; 작업 중에는 씬 규칙이 올라오지 않습니다. 매 요청마다 입력 토큰에 포함되는 내용이 작업 맥락에 맞게 줄어드는 구조입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 토큰을 재봤습니다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추정은 다음 방식으로 했습니다. Claude 공식 tokenizer는 비공개라 &lt;code&gt;chars / 2.5&lt;/code&gt; 추정을 썼습니다(한글+영문+코드 혼합 텍스트 기준, 오차 &amp;plusmn;15%).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(정확한 값은 &lt;code&gt;anthropic&lt;/code&gt; SDK의 &lt;code&gt;count_tokens&lt;/code&gt; API가 필요합니다)&lt;/p&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;# 원본 CLAUDE.md (슬림화 전 git HEAD)
git show HEAD:CLAUDE.md &amp;gt; /tmp/original.md
python3 -c &quot;print(round(len(open('/tmp/original.md').read())/2.5))&quot;
# &amp;rarr; 2513&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비교 기준 &amp;mdash; 무엇과 무엇을 비교해야 공정한가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 CLAUDE.md(213줄, ~2,513 tokens)에는 아직 Unity-specific 규칙이 없었습니다. 어차피 Unity 규칙은 어딘가에 적어야 했고, 두 가지 선택지가 있었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;선택 A&lt;/b&gt;: &lt;code&gt;CLAUDE.md&lt;/code&gt;에 Unity 규칙들을 그대로 이어 적기 (monolithic)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선택 B&lt;/b&gt;: &lt;code&gt;.claude/rules/&lt;/code&gt;로 분리 (지금 한 것)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공정한 비교는 &quot;&lt;b&gt;같은 규칙들을 monolithic으로 가져갔다면 어땠을지&lt;/b&gt;&quot; 대 &quot;&lt;b&gt;rules로 나눈 결과&lt;/b&gt;&quot;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 &lt;code&gt;.claude/rules/&lt;/code&gt;를 안 쓰고 모든 규칙을 &lt;code&gt;CLAUDE.md&lt;/code&gt; 본문에 통합했다면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원본 213줄 (~2,513 tokens)&lt;/li&gt;
&lt;li&gt;+ Git 워크플로우 (~440 tokens)&lt;/li&gt;
&lt;li&gt;+ 문서 컨벤션 추가분 (~230 tokens)&lt;/li&gt;
&lt;li&gt;+ Unity C# 규칙 (~422 tokens)&lt;/li&gt;
&lt;li&gt;+ 씬 규칙 (~249 tokens)&lt;/li&gt;
&lt;li&gt;+ ProjectSettings 규칙 (~352 tokens)&lt;/li&gt;
&lt;li&gt;+ Characters 규칙 (~481 tokens)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;= 약 4,676 tokens (어떤 작업이든 매 턴 통째 로드)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 &lt;code&gt;.claude/rules/&lt;/code&gt; 시나리오는,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;항상 로드: 슬림 CLAUDE.md + &lt;code&gt;behavioral-guidelines.md&lt;/code&gt; + &lt;code&gt;git-workflow.md&lt;/code&gt; = &lt;b&gt;약 2,497 tokens&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;+ 매칭되는 1개 룰 (작업에 따라 ~250&amp;ndash;481 tokens)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;시나리오별 비교&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;작업 종류&lt;/th&gt;
&lt;th align=&quot;right&quot;&gt;monolithic&lt;/th&gt;
&lt;th align=&quot;right&quot;&gt;.claude/rules/&lt;/th&gt;
&lt;th align=&quot;right&quot;&gt;절약&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cs&lt;/code&gt; 파일 작업&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;4,676&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2,919&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&amp;minus;1,757 (&amp;minus;38%)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.unity&lt;/code&gt; 씬 작업&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;4,676&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2,746&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&amp;minus;1,930 (&amp;minus;41%)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProjectSettings/&lt;/code&gt; 작업&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;4,676&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2,849&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&amp;minus;1,827 (&amp;minus;39%)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Characters/&lt;/code&gt; 자산 작업&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;4,676&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2,978&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&amp;minus;1,698 (&amp;minus;36%)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;문서(&lt;code&gt;.md&lt;/code&gt;) 작업&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;4,676&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2,888&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;&lt;b&gt;&amp;minus;1,788 (&amp;minus;38%)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업당 평균 약 &lt;b&gt;1,800 tokens, 38.5% 절약&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게다가 룰이 늘어날수록 격차는 더 벌어집니다. UI / Sound / Shader 등 영역이 추가되면 monolithic은 항상 그만큼 더 부풀고, &lt;code&gt;.claude/rules/&lt;/code&gt;는 그 작업을 할 때만 한 줄 더해집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다만 지금 프로젝트 규모에서는 절대 토큰 수가 그리 크진 않습니다.&lt;/b&gt;&lt;br /&gt;rules 파일이 수십 개, 각 파일이 수백 줄씩 쌓일 때 차이가 더 체감될 것입니다.&lt;br /&gt;(지금은 &quot;구조적으로 절약되는 형태로 시작했다&quot;는 정도의 의미로...)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 주의할 점&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;paths 패턴은 &quot;필터&quot;가 아니라 &quot;트리거&quot;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;paths&lt;/code&gt; 패턴 매칭은 파일 내용을 필터링하는 게 아닙니다!&lt;br /&gt;특정 경로의 파일을 Read하는 순간 해당 rules 파일 전체가 컨텍스트에 올라오는 트리거이고, frontmatter 포함 전체가 다 로드됩니다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;---
paths:
  - &quot;**/*.cs&quot;
  - &quot;Project_Cozy/Assets/Scripts/Platform/**/*.cs&quot;
---&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 틀리는 패턴을 정리해두면,&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;&quot;src/&quot;&lt;/code&gt;처럼 슬래시만 쓰거나 &lt;code&gt;&quot;*.cs&quot;&lt;/code&gt;처럼 단순 글로브는 하위 폴더를 잡지 못합니다.&lt;/li&gt;
&lt;li&gt;재귀 매칭은 &lt;code&gt;&quot;src/**/*.cs&quot;&lt;/code&gt;처럼 &lt;code&gt;**&lt;/code&gt;을 써야 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Claude가 파일을 알아서 읽으러 가지 않습니다&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;.claude/rules/&lt;/code&gt;와 &lt;code&gt;CLAUDE.md&lt;/code&gt; 외에 일반 파일은 Claude가 명시적으로 열지 않으면 내용을 모릅니다.&lt;br /&gt;&lt;code&gt;git-workflow.md&lt;/code&gt;에 &quot;자세한 내용은 &lt;code&gt;Docs/Development/GitWorkflow.md&lt;/code&gt; 참고&quot;라고 써도 Claude가 자동으로 읽으러 가지 않습니다.&lt;/p&gt;
&lt;div style=&quot;background: #f8f8f8; border-left: 4px solid #ccc; border-radius: 6px; padding: 16px 20px; margin: 12px 0; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; 파일 안에서는 &lt;code&gt;@경로&lt;/code&gt; 문법으로 외부 파일을 임포트할 수 있습니다. 예를 들어 &lt;code&gt;@docs/git-instructions.md&lt;/code&gt;처럼 쓰면 세션 시작 시 해당 파일이 자동으로 로드됩니다.&lt;br /&gt;&lt;br /&gt;이 기능을 활용하면 rules 파일 개수를 늘리지 않고도 관련 문서를 &lt;code&gt;CLAUDE.md&lt;/code&gt;에서 참조할 수 있습니다.&lt;br /&gt;&lt;br /&gt;rules 파일 자체에 필요한 규칙은 직접 적거나 @import를 활용하는걸로...!&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;code&gt;.claude/&lt;/code&gt;는 보호 영역일 수 있습니다&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cowork에서 &lt;code&gt;.claude/&lt;/code&gt; 디렉토리에 직접 쓰기가 막힙니다. 저는 일반 폴더(&lt;code&gt;_claude_rules_stage/&lt;/code&gt;)에 만들고 PowerShell &lt;code&gt;Copy-Item&lt;/code&gt;으로 옮겼습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;로드된 파일 확인은 &lt;code&gt;/memory&lt;/code&gt; 커맨드로&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;/memory&lt;/code&gt;를 실행하면 현재 세션에 로드된 모든 CLAUDE.md, rules 파일 목록을 확인할 수 있습니다. path-scoped rules가 기대대로 트리거되는지 디버깅할 때 유용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;code&gt;.claude/rules/&lt;/code&gt;는 토큰을 자동으로 줄여주는 마법이 아닙니다.&lt;/b&gt;&lt;br /&gt;나누는 결정은 사람이 해야 하고, 잘못 나누면 보강하다가 오히려 토큰이 늘 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;특히 지금처럼 프로젝트 규모가 작을 땐 보강 한 줄의 비중이 커서 위험이 더 큽니다. (저도 처음 나눴을 땐 오히려 늘 뻔했었던...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 &lt;code&gt;.claude/rules/&lt;/code&gt;의 진짜 가치는 &lt;code&gt;paths&lt;/code&gt;를 가진 파일들에 있고, &lt;code&gt;paths&lt;/code&gt; 없는 파일들은 &lt;code&gt;CLAUDE.md&lt;/code&gt;가 길어지는 걸 막기 위한 분리 그 이상도 이하도 아닙니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고 문서&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://code.claude.com/docs/ko/memory&quot;&gt;Claude가 프로젝트를 기억하는 방법 (공식 문서 &amp;middot; 한국어)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.claude.com/docs/ko/memory#organize-rules-with-clauderules&quot;&gt;&lt;code&gt;.claude/rules/&lt;/code&gt;로 규칙 구성 (공식 문서 &amp;middot; 한국어)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.claude.com/docs/ko/memory#path-specific-rules&quot;&gt;경로별 규칙 (공식 문서 &amp;middot; 한국어)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.claude.com/docs/ko/memory#write-effective-instructions&quot;&gt;효과적인 지침 작성 (공식 문서 &amp;middot; 한국어)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI 사용기</category>
      <category>.claude/rules</category>
      <category>AI</category>
      <category>claude</category>
      <category>claude code</category>
      <category>CLAUDE.md</category>
      <category>github</category>
      <category>md파일 관리</category>
      <author>또코딩</author>
      <guid isPermaLink="true">https://rhsgutj01.tistory.com/4</guid>
      <comments>https://rhsgutj01.tistory.com/4#entry4comment</comments>
      <pubDate>Sat, 30 May 2026 18:29:11 +0900</pubDate>
    </item>
    <item>
      <title>[Claude Desktop] Claude MCP로 Windows 입력 제어하기 - 칠전팔기와 실험 후기</title>
      <link>https://rhsgutj01.tistory.com/3</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;칠전팔기 기록부터 그림판 하트까지 &amp;mdash; 설정 이슈와 실험 후기&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude Desktop에 &lt;code&gt;windows-driver-input-mcp&lt;/code&gt;를 연동해 마우스 제어부터 그림판 하트까지 직접 테스트해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;AnyDriver&lt;/code&gt; 설정 이슈 해결법과 LLM 에이전트가 빠른 게임에 느릴 수밖에 없는 이유도 함께 정리했습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용 MCP와 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/win10ogod/windows-driver-input-mcp&quot;&gt;windows-driver-input-mcp&lt;/a&gt; 라이브러리를 Claude Desktop에 연동해봤다. 과정은 간단해 보였지만, 예상치 못한 곳에서 막혔다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;해당 GitHub 레포를 로컬에 &lt;code&gt;clone&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Claude Desktop 설정에서 해당 MCP 프로젝트를 바인딩&lt;/li&gt;
&lt;li&gt;실행 &amp;mdash; 그런데 안 된다.....?&lt;/li&gt;
&lt;li&gt;가이드대로 &lt;code&gt;env&lt;/code&gt;를 설정했는데, &lt;code&gt;AnyDriver&lt;/code&gt;가 문제였음...!&lt;/li&gt;
&lt;li&gt;드라이버를 &lt;code&gt;SendInput&lt;/code&gt;으로 변경 후 해결!&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;❌ 문제 &amp;mdash; 초기 설정 (AnyDriver)&lt;/h3&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;WINDOWS_MCP_INPUT_BACKEND&quot;: &quot;ibsim-dll&quot;,
  &quot;WINDOWS_MCP_INPUT_DRIVER&quot;: &quot;AnyDriver&quot;,
  &quot;WINDOWS_MCP_RATE_MOVE_HZ&quot;: &quot;120&quot;,
  &quot;WINDOWS_MCP_RATE_MAX_DELTA&quot;: &quot;60&quot;,
  &quot;WINDOWS_MCP_RATE_SMOOTH&quot;: &quot;0.0&quot;,
  &quot;WINDOWS_MCP_RATE_CPS&quot;: &quot;8.0&quot;,
  &quot;WINDOWS_MCP_RATE_KPS&quot;: &quot;12.0&quot;,
  &quot;WINDOWS_INPUT_LOG_LEVEL&quot;: &quot;INFO&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;✅ 해결 &amp;mdash; 드라이버를 SendInput으로 변경&lt;/h3&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;WINDOWS_MCP_INPUT_BACKEND&quot;: &quot;ibsim-dll&quot;,
  &quot;WINDOWS_MCP_INPUT_DRIVER&quot;: &quot;SendInput&quot;,
  &quot;WINDOWS_MCP_RATE_MOVE_HZ&quot;: &quot;120&quot;,
  &quot;WINDOWS_MCP_RATE_MAX_DELTA&quot;: &quot;60&quot;,
  &quot;WINDOWS_MCP_RATE_SMOOTH&quot;: &quot;0.0&quot;,
  &quot;WINDOWS_MCP_RATE_CPS&quot;: &quot;8.0&quot;,
  &quot;WINDOWS_MCP_RATE_KPS&quot;: &quot;12.0&quot;,
  &quot;WINDOWS_INPUT_LOG_LEVEL&quot;: &quot;INFO&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background: #f8f8f8; border-left: 4px solid #aaa; border-radius: 0 6px 6px 0; padding: 14px 18px; margin: 12px 0; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;b&gt;참고&lt;/b&gt; &amp;mdash; 백엔드를 &lt;code&gt;ibsim-ahk&lt;/code&gt;로 바꿔봤을 때는 마우스 커서가 아예 이동하지 않았다. 원인은 아직 불명확.&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Input 제어 사용기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 어떤 것들을 시킬 수 있는지 테스트해봤다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마우스 중앙으로 이동&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;!youtube[r4auRymosb8?si=uj-CU_3p9ymKRn64]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마우스를 화면 중앙으로 이동시키는 기본 동작.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마우스 우측 끝으로 이동 후 우클릭&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;!youtube[bkyI49cjsiI?si=ykE4hPFQcQjVKkX5]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 우측 가장자리로 이동 후 우클릭 수행.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;메모장에 글 쓰기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;!youtube[PwFItUbD2EI?si=x8yvhNTEdV349cL4]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영어 입력은 정상 동작. 메모장이 꺼져 있으면 명령어로 직접 실행해주기도 함...!!!!!!&lt;/p&gt;
&lt;div style=&quot;background: #fff8f8; border-left: 4px solid #e06060; border-radius: 0 6px 6px 0; padding: 14px 18px; margin: 12px 0; font-size: 15px; line-height: 1.8;&quot;&gt;&lt;b&gt;한계&lt;/b&gt;: 한글 입력은 현재 지원 안 됨.&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그림판에 하트 그리게 하기&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://velog.velcdn.com/images/kohyeonseo1006/post/de89f4f5-1ba0-4c6a-af7e-2b67ca80c827/image.png&quot; alt=&quot;그림판에 그린 하트&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;그림판에 직접 그린 하트 (중간에 네트워크 끊겨서 미완성  )&lt;/i&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f8f8f8; border-left: 4px solid #aaa; border-radius: 0 6px 6px 0; padding: 14px 18px; margin: 12px 0; font-size: 15px; line-height: 1.8;&quot;&gt;실행 시간이 약 6분으로 굉장히 오래 걸린다. 중간에 네트워크가 끊기면 도중에 멈춰버리는 문제도 있음...하...&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;간단 미니게임 플레이&lt;/h3&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/uc3bZlRG7Yc&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;img src=&quot;https://velog.velcdn.com/images/kohyeonseo1006/post/5983ef32-bfa0-48f9-bfef-10c9eb767a4a/image.png&quot; alt=&quot;게임 플레이 화면 1&quot; /&gt;&lt;img src=&quot;https://velog.velcdn.com/images/kohyeonseo1006/post/311ceb7a-15e6-40b9-85ae-e1f2c1ad69c7/image.png&quot; alt=&quot;게임 플레이 화면 2&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;생각 &amp;rarr; 이동 과정을 캡처한 스크린샷&lt;/i&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f8f8f8; border-left: 4px solid #aaa; border-radius: 0 6px 6px 0; padding: 14px 18px; margin: 12px 0; font-size: 15px; line-height: 1.8;&quot;&gt;응답 속도가 매우 느리다... 한 번 판단하고 행동하는 데 상당한 시간이 걸림...&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;windows-driver-input-mcp&lt;/code&gt;를 통해 Claude가 실제로 Windows UI를 자율적으로 조작할 수 있다는 걸 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마우스 이동/클릭, 앱 실행, 텍스트 입력, 그림 그리기까지 &amp;mdash; 생각보다 꽤 많은 걸 할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 실용적으로 쓰기엔 아직 몇 가지 한계가 있다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;상태&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;영어 입력&lt;/td&gt;
&lt;td&gt;✅ 정상 동작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;한글 입력&lt;/td&gt;
&lt;td&gt;❌ 미지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;앱 자동 실행&lt;/td&gt;
&lt;td&gt;✅ 정상 동작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;응답 속도&lt;/td&gt;
&lt;td&gt;⚠️ 느림 (행동 간 딜레이 큼)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;장시간 작업 안정성&lt;/td&gt;
&lt;td&gt;⚠️ 네트워크 끊기면 중단됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정 시 &lt;code&gt;AnyDriver&lt;/code&gt; 대신 &lt;b&gt;&lt;code&gt;SendInput&lt;/code&gt;&lt;/b&gt; 드라이버를 잡으면 일단 돌아가긴 한다.&lt;br /&gt;속도와 한글 입력 문제가 해결되면 활용도가 훨씬 높아질 것 같다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 &quot;사람처럼 라이브 게임 플레이&quot;는 어려울까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미니게임 플레이가 굉장히 느렸던 이유는 단순히 모델 성능의 문제가 아니다.&lt;br /&gt;(하이쿠 쓴다해서 빨라지는건 아님)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;사람처럼 라이브로 플레이하는 AI&quot;를 만들려면 사실 세 가지 조건을 동시에 충족해야 한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;LLM 에이전트&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;RL 정책 신경망&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;인터페이스&lt;/td&gt;
&lt;td&gt;화면을 보고 키보드로 입력 (내부 변수 X)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;인지&lt;/td&gt;
&lt;td&gt;미리 짠 if문이 아닌 스스로 판단&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;속도&lt;/td&gt;
&lt;td&gt;60FPS 액션 기준 16ms급 판단-입력&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;❌&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 MCP로 쓰는 방식은 &lt;b&gt;LLM 기반 에이전트&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;화면 캡처 &amp;rarr; 추론 &amp;rarr; 입력의 왕복 구조라 한 번 판단에 수백 ms~수 초가 걸린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;턴제나 느린 게임이라면 충분하지만, 60FPS 액션에서는 판단이 끝나기도 전에 이미 맞고 있었다...(그래서 많이 죽었었음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;모델을 어떤 걸로 바꿔도 이 왕복 구조 자체는 극복이 안 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 조건을 동시에 만족하는 현실적인 방법은 &lt;b&gt;비전 기반 강화학습(RL)&lt;/b&gt; 뿐인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;화면 픽셀을 입력받아 학습된 정책으로 행동을 출력하고, 추론 자체는 1ms 미만이라 60FPS도 거뜬히 따라간다고 한다.&lt;br /&gt;다만 수만~수백만 판의 자가 플레이 훈련이 필요하다는 대가가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 LLM 에이전트의 판단은 &quot;적이 셋이니 후퇴하자&quot;처럼 말로 설명되는 느린 추론이고, RL의 판단은 격투게임 고수의 반사신경처럼 빠르지만 설명이 안 되는 반응이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른 액션 게임에서 사람처럼 노는 건 후자에 가깝다.&lt;br /&gt;(사람도 격투게임 할 때 매번 논리적으로 따지고 누르는 게 아니니까...@!)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;background: #f0f4ff; border-left: 4px solid #5577dd; border-radius: 0 6px 6px 0; padding: 14px 18px; margin: 12px 0; font-size: 15px; line-height: 1.8;&quot;&gt;하지만, 나는 AI가 사용자 컴퓨터에 빠르게 반응할 수 있는 방법을 찾아낼 것이다... &lt;b&gt;To be continued...&lt;/b&gt;&lt;/div&gt;</description>
      <category>AI 사용기</category>
      <category>AI</category>
      <category>claude</category>
      <category>claude code</category>
      <category>Claude Desktop</category>
      <category>Input MCP</category>
      <category>MCP</category>
      <author>또코딩</author>
      <guid isPermaLink="true">https://rhsgutj01.tistory.com/3</guid>
      <comments>https://rhsgutj01.tistory.com/3#entry3comment</comments>
      <pubDate>Sat, 30 May 2026 18:22:35 +0900</pubDate>
    </item>
    <item>
      <title>나의 링크</title>
      <link>https://rhsgutj01.tistory.com/notice/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Velog: &lt;a href=&quot;https://velog.io/@kohyeonseo1006/posts&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@kohyeonseo1006/posts&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780132735483&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;kohyeonseo1006 (고현서) / 작성글 - velog&quot; data-og-description=&quot;New 현또의 코딩세상 / 개발자&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@kohyeonseo1006/posts&quot; data-og-url=&quot;https://velog.io/@kohyeonseo1006/posts&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://velog.io/@kohyeonseo1006/posts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@kohyeonseo1006/posts&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;kohyeonseo1006 (고현서) / 작성글 - velog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;New 현또의 코딩세상 / 개발자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github: &lt;a href=&quot;https://github.com/KoHyeonSeo&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/KoHyeonSeo&lt;/a&gt;&lt;/p&gt;</description>
      <author>또코딩</author>
      <guid isPermaLink="true">https://rhsgutj01.tistory.com/notice/2</guid>
      <pubDate>Sat, 30 May 2026 18:19:34 +0900</pubDate>
    </item>
  </channel>
</rss>