Posts
All the articles I've posted.
Claude Code Subagent 스킬 — Explore·Plan·general-purpose와 커스텀 에이전트로 컨텍스트 격리하기
Published: at 09:21 PMClaude Code의 subagent 시스템을 정리한다.
Claude Code Hooks 개념과 이벤트 — settings.json으로 세션 생명주기에 자동화 끼워 넣기
Published: at 10:06 PMClaude Code의 Hooks 시스템을 처음부터 정리한다. Hook이 무엇이고 왜 쓰는지, 어떤 이벤트가 언제 발화하는지(SessionStart·UserPromptSubmit·PreToolUse·PostToolUse·Stop·SubagentStart/Stop·PreCompact·FileChanged·CwdChanged 등 lifecycle 카탕스별 분류), settings.json의 4단 우선순위(Managed > CLI > Local > Project > User), Hook 정의 JSON 구조와 5가지 타입(command/http/mcp_tool/prompt/agent), matcher 패턴 규칙(exact/pipe/regex/이벤트별 필터), exit code(0/2/그 외)와 JSON 출력(decision, hookSpecificOutput, additionalContext), `$CLAUDE_PROJECT_DIR` 같은 환경 변수, `/hooks` 메뉴로 등록 확인, `disableAllHooks`로 일괄 끄기까지 한 차시에 묶는다. 다음 세 차시(29 PostToolUse 활용, 30 PreToolUse 보안, 31 SessionStart/Stop)에서 실전 패턴으로 들어가기 전 준비 차시.
Claude Code PostToolUse Hook 활용 — 편집 직후 포맷팅·린트·테스트를 시스템에 못 박기
Published: at 07:35 PMClaude Code의 PostToolUse Hook을 한 차시로 깊게 본다.
Claude Code PreToolUse Hook과 보안 — 도구가 실행되기 전에 위험한 명령과 민감 파일을 막는 게이트
Published: at 10:34 PMClaude Code의 PreToolUse Hook을 보안 관점에서 깊게 본다. 도구가 *실행되기 직전*에 발화해 호출 자체를 막을 수 있다는 핵심 성질 — PostToolUse(후처리, 못 막음)와 정반대 — 에서 출발해, 입력 JSON(tool_name·tool_input·tool_use_id, tool_output 없음), 차단의 두 갈래(exit 2 + stderr vs exit 0 + `permissionDecision` JSON), exit 2가 PreToolUse에서는 *블로킹*이라는 점(PostToolUse와 반대이며 exit 1은 차단이 아님), `permissionDecision` 4값(allow/deny/ask/defer)의 정확한 의미, 그리고 Hook과 권한 규칙·권한 모드의 관계 — Hook은 제약을 조이기만 하고 풀지 못한다, deny는 bypassPermissions도 뚫는다, allow는 deny 규칙을 못 이긴다, 여러 hook 병합 시 deny>ask>allow — 를 정리한다. 실전 패턴으로 위험한 Bash 명령 차단(rm -rf·DROP TABLE), 민감 파일 보호(.env·.git/), `ask`로 사용자 승인 에스컬레이션, `updatedInput`으로 입력 sanitize까지 묶고, 정적 권한 패턴과 동적 hook의 역할 분담, matcher와 `if` 필드, 셸 프로필이 JSON 출력을 오염시키는 문제도 함께 본다.
Claude Code SessionStart·Stop·SessionEnd Hook — 세션의 양 끝에 환경·검증·정리를 박는 법
Published: at 06:43 PMClaude Code의 세션 라이프사이클 hook을 한 차시로 정리한다. *도구* 단위가 아니라 *세션* 단위에서 발화하는 세 이벤트 — SessionStart(시작·재개·clear·compact), Stop(응답 종료 직전), SessionEnd(세션 종료) — 의 발화 조건, 입력 JSON 스키마, 응답 옵션, 매처 값(SessionStart 4값·SessionEnd 6값·Stop 매처 없음), 그리고 차단 가능 여부(SessionStart 불가·Stop 가능·SessionEnd 불가)를 비교한다.
Claude Code MCP 개념과 설치 — 외부 도구·DB·API를 Claude Code 안으로 끌어들이는 표준
Published: at 08:53 PM섹션 7 *MCP 서버 연동*의 첫 차시. Claude Code가 외부 도구·데이터베이스·API에 연결되는 표준인 MCP(Model Context Protocol)를 정리한다. AI 챗에 데이터를 *복사해 붙여 넣는* 흐름과 MCP가 *직접 접근*하게 만드는 흐름의 차이, host(Claude Code)·client(서버마다 하나)·server(외부 시스템)의 3자 아키텍처, 데이터 레이어(JSON-RPC 2.0)와 전송 레이어의 2단 분리, 그리고 서버가 노출하는 세 primitive — Tools(모델이 호출), Resources(앱이 가져옴), Prompts(사용자가 `/`로 호출)의 역할 분담을 본다. 세 가지 전송 방식 — Streamable HTTP(권장)·SSE(deprecated)·stdio(로컬 프로세스) — 의 선택 기준, `claude mcp add`의 옵션 순서(옵션이 name 앞·`--`로 명령 분리), HTTP 서버에 `--header`로 bearer 토큰 박는 법, OAuth 인증을 `/mcp`로 마무리하는 흐름, 그리고 `claude mcp list`/`get`/`remove`·`/mcp` 슬래시 커맨드까지 묶는다. 스코프 셋(local·project·user)이 어디에 저장되고 누구와 공유되는지, `.mcp.json`이 git 커밋되는 *팀 공유 채널*이라는 점, prompt injection 위험과 *Anthropic Directory가 보안 감사가 아니라는* 단서, 출력 토큰 한도(기본 25K, 경고 10K)와 `MCP_TIMEOUT`까지 다룬다.
Claude Code 인기 MCP 서버 연동 — Sentry·Notion·Linear·GitHub·PostgreSQL·Slack을 인증 패턴으로 묶기
Published: at 09:21 PM섹션 7 *MCP 서버 연동*의 두 번째 차시. 32차시에서 잡은 `claude mcp add`의 어휘를, 실전에서 가장 많이 붙이는 서버들로 손에 잡히게 옮긴다.
Claude Code MCP 서버 관리 — 스코프(local·project·user)·우선순위·project 승인 게이트·OAuth 인증 설정
Published: at 05:53 PM섹션 7 *MCP 서버 연동*의 세 번째 차시. 33차시가 서버를 *붙이는* 법(세 인증 패턴)이었다면, 34차시는 붙인 뒤의 *관리*다. 그리고 관리의 모든 질문은 한 개념으로 수렴한다
Claude Code .mcp.json 직접 작성과 ${VAR} 환경 변수 확장 — 서버 엔트리 스키마·시크릿 분리·add-json·Claude Desktop 가져오기
Published: at 09:06 PM섹션 7 *MCP 서버 연동*의 네 번째 차시. 34차시가 *붙인 서버를 관리*하는 법(스코프·우선순위·승인·OAuth)이었다면, 35차시는 그 관리의 산물인 `.mcp.json`을 *직접 손으로 여는* 법이다.
Claude Code MCP 리소스와 Tool Search — `@server:protocol://path` 멘션·`/mcp__server__prompt` 프롬프트·도구 지연 로딩·`alwaysLoad`·관리형 MCP
Published: at 04:58 PM섹션 7 *MCP 서버 연동*의 마지막 차시. 32~35차시가 서버를 *붙이고·관리하고·설정*하는 법이었다면, 36차시는 *붙인 뒤 잘 쓰는* 법이다. 출발점은 한 가지 사실 — MCP 서버는 *tools*만 주는 게 아니다. tools·resources·prompts 세 가지를 노출하고, 32~35차시 내내 다룬 건 사실상 tools 하나였다. 먼저 나머지 둘을 마저 본다.
Claude Code Git 기본 워크플로우 — `git status`·`diff`·`log`로 변경 읽기, 체크포인트(`/rewind`)와 Git의 차이, 그리고 내장 안전 원칙(force push·`--no-verify`·`--amend`·git config)
Published: at 09:02 PM섹션 8 *Git 통합 워크플로우*의 첫 차시. 36차시까지가 Claude Code에 *능력을 더하는* 이야기였다면, 37차시부터는 그 능력으로 *실제 개발 흐름을 돌린다.* 그 흐름의 토대가 Git이다 — 파일을 고치고 명령을 실행하는 에이전트에게 Git은 두 가지를 동시에 한다. *되돌릴 수 있는 안전망*이자, 변경을 사람이 *검토하는 표면*이다.
Claude Code 커밋 생성 자동화 — 커밋은 명령이 아니라 절차다(`status`→`diff`→`log`→메시지→`add`→`commit`), '무엇'이 아니라 '왜'를 쓰는 스마트 메시지, Conventional Commits 형식, HEREDOC 멀티라인, 그리고 `Co-Authored-By` 트레일러와 `attribution` 설정
Published: at 09:26 PM섹션 8의 두 번째 차시. 37차시가 *읽기와 안전*의 토대였다면, 38차시는 그 위에서 처음으로 *쓰는* 작업 — 커밋 생성이다. 먼저 오해 하나를 걷어낸다 — 내장 `/commit` 슬래시 명령은 *없다.* 커밋은 "변경사항 커밋해줘" 같은 *자연어*로 부르고, Claude는 그걸 Bash 도구로 *절차*로 실행한다. 그 절차가 핵심이 다
Claude Code PR 생성과 관리 — PR은 *최신 커밋 하나*가 아니라 *브랜치 전체*를 본다(`git diff main...HEAD`), `## Summary`+`## Test plan` 본문, `gh pr create`와 HEREDOC, `🤖 Generated with Claude Code` 푸터, 그리고 세션을 PR에 잇는 `claude --from-pr`
Published: at 12:06 PM섹션 8의 세 번째 차시. 38차시가 *하나의 좋은 커밋*을 만드는 법이었다면, 39차시는 그 커밋들을 모아 **PR로 올리는** 법이다.
Claude Code 코드 리뷰 활용 — `/commit`도 `/pr`도 없더니 리뷰엔 내장 명령이 *셋*이다(`/code-review`·`/review`·`/security-review`), 좋은 리뷰의 축은 *분리*(방금 쓴 코드에 편향되지 않는 fresh context), effort가 정하는 발견의 폭, 결과의 세 출구(보고·`--fix`·`--comment`), 클라우드에서 검증까지 하는 `/code-review ultra`, 그리고 체크리스트를 못 박는 `REVIEW.md`
Published: at 04:42 PM섹션 8의 마지막 차시. 39차시가 PR을 *만드는* 법이었다면 40차시는 그 PR을 *읽는* 법이다.
Claude Code CI/CD 개념과 연동 — 파이프라인엔 Enter 칠 사람이 없다, 대화를 부품으로 바꾸는 헤드리스 모드의 세 전환(파이프와 JSON, 권한 사전 선언, `--bare`), 그 부품을 GitHub 이벤트에 배선하는 `claude-code-action@v1`(`@claude` 멘션 ↔ `prompt` 자동화, 모드 자동 감지), PR의 마지막 클릭은 끝내 사람에게 남기는 설계, 그리고 exit 0이 '버그 없음'이 아닌 `claude ultrareview` 게이트
Published: at 09:24 PM섹션 9의 문이 열린다. 40차시는 "사람의 터미널에서 팀의 파이프라인으로, 무대가 옮겨간다"로 끝났다 — 이번 차시가 그 이사다. 먼저 CI/CD 한 컷. 파이프라인은 이벤트(push·PR·스케줄)가 트리거하는 단계들의 사슬이고, 지금까지 그 단계는 전부 *결정론적 검사*(빌드·테스트·린트)였다. Claude가 들어오면 처음으로 **판단이 필요한 단계** — 리뷰하고, 고치고, 요약하는 — 가 파이프라인에 들어온다. 그런데 파이프라인엔 결정적 결핍이 하나 있다.
Claude Code 원격 세션 활용 — 파이프라인이 아니라 내가 부르는 클라우드, '저장소에 커밋된 것만 존재하는' Anthropic 관리 VM, 준비의 두 층(환경의 Setup script ↔ 저장소의 SessionStart Hook)과 환경 캐싱, `CLAUDE_CODE_REMOTE` 게이트와 환경 변수 세 층, `--cloud`로 보내고 `--teleport`로 끌어오는 왕복, push가 현재 브랜치로 잠기는 GitHub 프록시
Published: at 06:18 PM41차시의 마지막 문장이 이번 차시의 문이다 — "파이프라인이 주도하는 자동화에서, 내가 주도하되 실행만 원격인 세션으로." Claude Code on the web(claude.ai/code)은 내 세션을 Anthropic 관리 클라우드 VM에서 굴린다.
Claude Code 전역 설정 관리 — '전역'은 단일 파일이 아니라 5층 스택(Managed › Command line › Local › Project › User)이고 `~/.claude/settings.json`은 그 바닥, 두 규율(일반 설정은 높은 층이 덮고 permission 규칙은 모든 층이 쌓이되 deny가 먼저), `Tool(specifier)` 문법과 `Bash(ls *)`의 단어 경계·복합 명령 분해·래퍼 스트리핑, 인자 제한 패턴의 취약성과 curl deny + WebFetch(domain:) 대안, gitignore식 Read/Edit 경로(`//`절대·`~/`홈·`/`설정 기준)와 '한 슬래시는 절대경로가 아니다'는 함정, default(Manual)·acceptEdits·plan·auto·dontAsk·bypassPermissions 6개 모드, 그리고 셸이 아니라 `env` 블록에 넣어야 백그라운드까지 닿는 프록시·CA·mTLS
Published: at 09:25 PM42차시는 '저장소에 커밋된 것만 존재한다'는 클라우드 무대의 법칙으로 닫혔다. 그 무대에 없던 게 바로 `~/.claude` — User 스코프다. 이번 차시는 무대를 다시 내 머신으로 옮겨 그 뿌리를 판다.
Communicating between Android and Arduino using React Native
Published: at 09:20 AMCommunicating between Android and Arduino using React Native
Communicating between two Arduinos using software serial
Published: at 07:33 PMCommunicating between two Arduinos using software serial
Communication between Arduino and React Native
Published: at 09:02 AMCommunication between Arduino and React Native