856 posts
Agent Skill 만들기: SKILL.md 작성 가이드

Agent Skill 만들기: SKILL.md 작성 가이드

이전 글에서 Agent Skills가 무엇인지, 왜 필요한지 살펴보았습니다. 컨텍스트 파일이 "프로젝트 소개서"라면, Skills는 "업무 매뉴얼"이라고 했죠. 이번 글에서는 한 걸음 더 나아가 직접 Skill을 설계하고 SKILL.md로 작성하는 방법을 알아보겠습니다. 🛠️ 좋은 Skill의 조건 Skill을 만들기 전에 어떤 Skill이 잘 동작하는지 생각해 볼 필요가 있습니다. 가장 중요한 건 범위가 명확해야 한다는 점입니다. "웹 개발하기" 같은 광범위한 Skill보다는 "Next.js API 라우트 작성하기"처럼 구체적인

Agent Skills: AI를 위한 업무 매뉴얼

Agent Skills: AI를 위한 업무 매뉴얼

AI 코딩 에이전트를 사용하다 보면 같은 종류의 작업을 반복적으로 요청하게 될 때가 있습니다. 예를 들어, "이 프로젝트에서는 Jest 대신 Vitest를 사용해", "API 테스트를 작성할 때는 이런 패턴을 따라줘", "마이그레이션 스크립트를 작성할 때는 항상 롤백 코드도 함께 작성해" 같은 지시를 매번 반복하게 되죠. 🤔 AGENTS.md나 CLAUDE.md 같은 컨텍스트 파일로 프로젝트 전반에 대한 정보를 제공할 수 있지만, 특정 작업에 대한 세부 지침까지 모두 담기에는 한계가 있습니다. 컨텍스트 파일이 너무 길어지면 AI가

llms.txt: LLM을 위한 웹사이트 안내서

llms.txt: LLM을 위한 웹사이트 안내서

요즘 ChatGPT나 Claude 같은 AI 서비스를 사용해서 웹사이트에 대해 질문해본 적 있으신가요? 예를 들어, "FastHTML 사용법 알려줘"라고 물어보면 AI가 답변을 해주는데요. 그런데 가끔 AI가 엉뚱한 답변을 하거나 오래된 정보를 알려줄 때가 있습니다. LLM 초창기에는 주로 학습된 데이터가 오래되서 그랬지만 최근에는 LLM이 스스로 웹사이트 검색도 하는데... 왜 그럴까요? 이유는 간단합니다. 대부분의 웹사이트는 사람을 위해 설계되어 있기 때문이죠. 복잡한 HTML 구조, 내비게이션, 광고, 자바스크립트 등이 섞여

클로드 코드 Hooks: AI 에이전트의 작업 흐름에 끼어들기

클로드 코드 Hooks: AI 에이전트의 작업 흐름에 끼어들기

클로드 코드를 사용하다 보면 "이 파일은 자동으로 수정되지 않았으면 좋겠는데", "코드 수정 후에 자동으로 Prettier를 돌리고 싶은데", "Claude가 작업을 마치면 알림을 받고 싶은데"와 같은 생각이 들 때가 있지 않으셨나요? 🤔 이런 요구사항들을 충족시키기 위해 클로드 코드는 Hooks라는 강력한 기능을 제공합니다. Hooks를 사용하면 클로드 코드의 라이프사이클 중 특정 시점에 사용자가 정의한 쉘 명령어나 스크립트를 자동으로 실행할 수 있습니다. Hooks란 무엇인가요? Hooks는 클로드 코드가 특정 작업을 수행하기

클로드 코드 --agent: 세션 전체를 에이전트로 전환하기

클로드 코드 --agent: 세션 전체를 에이전트로 전환하기

클로드 코드에서 서브 에이전트를 쓰면 대화 도중에 특정 작업을 별도의 에이전트에게 위임할 수 있습니다. 코드 탐색은 Explore에게, 리뷰는 커스텀 에이전트에게 맡기는 식이죠. 그런데 가끔은 대화 중에 에이전트를 호출하는 게 아니라, 시작부터 끝까지 하나의 에이전트로 세션 전체를 운영하고 싶을 때가 있습니다. "이번 세션은 코드 리뷰만 할 거야"라거나 "CI 파이프라인에서 린트 체크만 돌리고 싶어"라는 상황이요. 이럴 때 쓰는 게 바로 --agent 플래그입니다. 무엇이 달라지나 보통 클로드 코드를 실행하면 기본 시스템 프롬프트와

release-plz로 Rust 패키지 릴리스 자동화하기

release-plz로 Rust 패키지 릴리스 자동화하기

Rust로 라이브러리를 만들어서 crates.io에 배포하고 있다면 릴리스할 때마다 반복해야 하는 작업이 꽤 많다는 걸 느끼셨을 거예요. Cargo.toml의 버전 올리고 체인지로그 정리하고 cargo publish 실행하고 git 태그 만들고 GitHub Release도 작성하고... 🤔 매번 수작업으로 하다 보면 빼먹는 단계가 생기기 마련이죠. release-plz는 이 과정을 통째로 자동화해주는 도구인데요. Conventional Commits 기반으로 버전을 알아서 올려주고, 체인지로그도 자동 생성하고, PR 하나 머지하면

cargo semver-checks로 Rust API 호환성 자동 검사하기

cargo semver-checks로 Rust API 호환성 자동 검사하기

Rust 크레이트를 배포하다 보면 한 번쯤 이런 경험이 있을 거예요. 패치 버전만 올려서 배포했는데, 사실은 공개 함수의 시그니처를 바꿔버렸던 거죠. 의존하는 쪽에서는 갑자기 빌드가 깨지고, 이슈가 올라오고... 😅 시맨틱 버저닝(Semantic Versioning)은 API 변경의 종류에 따라 메이저, 마이너, 패치 버전을 구분하는 규칙인데, 사람이 매번 이걸 정확히 판단하기는 쉽지 않습니다. 구조체에 필드 하나 추가한 게 호환성을 깨는 변경인지, 트레이트에 기본 구현이 있는 메서드를 추가한 건 괜찮은 건지, 헷갈리는 경우가 많

OpenCode: 오픈소스 AI 코딩 에이전트

OpenCode: 오픈소스 AI 코딩 에이전트

AI 코딩 도구가 개발자의 일상에 깊숙이 자리 잡은 지금, 많은 분들이 Claude Code, GitHub Copilot, Cursor 같은 도구들을 사용하고 계실 겁니다. 그런데 이런 도구들은 대부분 유료이고 소스 코드도 공개되어 있지 않죠. 그래서 오늘은 코드가 투명하게 공개되어 있고 다양한 모델 제공자를 지원하는 오픈소스 AI 코딩 에이전트, OpenCode를 소개해 드리겠습니다. OpenCode란? OpenCode는 터미널, IDE, 데스크톱 앱에서 사용할 수 있는 오픈소스 AI 코딩 에이전트입니다. Claude Code와

클로드 코드 에이전트 팀: 여러 AI가 함께 일하는 법

클로드 코드 에이전트 팀: 여러 AI가 함께 일하는 법

클로드 코드로 복잡한 작업을 하다 보면 한 가지 아쉬운 점이 있습니다. 아무리 똑똑한 에이전트라도 결국 하나의 세션에서 순차적으로 작업하니까요. 프론트엔드를 고치고 백엔드 API를 수정하고 테스트까지 작성하려면 한 명이 모든 걸 해야 하는 셈이죠. 🤔 실제 개발팀에서는 어떻게 일할까요? 한 사람이 UI를 만들고 다른 사람이 API를 짜고 또 다른 사람이 테스트를 작성합니다. 서로 진행 상황을 공유하고 막히는 부분이 있으면 의논하면서 병렬로 작업을 진행하죠. 이런 팀워크를 AI에게도 적용할 수 있다면 어떨까요? 바로 이런 아이디어에

클로드 코드 서브 에이전트: AI에게 일을 시키는 AI

클로드 코드 서브 에이전트: AI에게 일을 시키는 AI

클로드 코드로 작업하다 보면 하나의 요청이 여러 단계로 나뉘는 경우가 많습니다. 테스트를 돌려서 실패하는 항목을 파악하고 관련 코드를 탐색한 다음 수정 방안을 정리해서 실제 코드를 고치는 식이죠. 이 과정에서 Claude의 컨텍스트 윈도우에는 테스트 출력이며 탐색 결과며 온갖 정보가 쌓이면서 정작 중요한 맥락이 밀려나 버립니다. 🤯 이런 문제를 해결하려고 Claude Code는 **서브 에이전트(Sub-agent)**라는 구조를 도입했습니다. 메인 대화에서 특정 작업을 별도의 에이전트에게 위임하면 그 에이전트가 독립된 컨텍스트 윈

클로드 코드 샌드박스: OS 레벨 격리로 안전하게 코딩하기

클로드 코드 샌드박스: OS 레벨 격리로 안전하게 코딩하기

클로드 코드를 써보셨다면 "이 명령어를 실행해도 될까요?"라는 팝업이 익숙하실 겁니다. 처음엔 안전장치니까 반갑지만 반복되면 점점 피로해지죠. 결국 내용을 대충 훑고 승인 버튼을 누르게 되는데 이러면 오히려 보안에 취약해집니다. Claude Code의 샌드박스는 이 문제를 해결합니다. 명령어를 일일이 검사하는 대신 OS 레벨에서 실행 환경 자체를 격리해서 안전한 경계 안에서는 자유롭게, 경계 밖으로는 절대 못 나가게 만드는 거죠. 왜 샌드박스가 필요한가 클로드 코드 권한 설정에서 다뤘던 권한 시스템은 "이 도구를 써도 되는가?"를

cargo llvm-cov로 Rust 코드 커버리지 측정하기

cargo llvm-cov로 Rust 코드 커버리지 측정하기

테스트를 열심히 작성했는데 과연 우리 코드가 어디까지 테스트되고 있는 걸까요? "이 모듈은 테스트를 꽤 많이 짰으니까 괜찮겠지"라고 막연하게 생각하다가 정작 핵심 에러 처리 분기는 한 번도 실행된 적이 없었다는 걸 나중에 발견하는 경우가 종종 있습니다 😅 코드 커버리지는 이런 사각지대를 눈에 보이게 만들어주는 도구입니다. Rust에서는 cargo-llvm-cov가 이 역할을 맡고 있는데 LLVM의 소스 기반 커버리지 기능을 활용해서 정확한 측정 결과를 제공해요. 이번 글에서는 설치부터 기본 사용법, 여러 리포트 형식, CI 연동까

Drizzle ORM으로 타입 안전한 데이터베이스 다루기

Drizzle ORM으로 타입 안전한 데이터베이스 다루기

Prisma가 자체 스키마 언어와 코드 생성기를 통해 ORM의 새로운 기준을 만들었다면 Drizzle ORM은 다른 방향에서 출발합니다. "SQL을 알면 Drizzle도 안다(If you know SQL — you know Drizzle ORM)"가 공식 슬로건인데요. 스키마도 TypeScript, 쿼리도 TypeScript, 그리고 그 결과 타입도 TypeScript에서 자동으로 추론됩니다. 별도의 코드 생성 단계 없이요. 번들 크기도 가볍고 서버리스 환경에도 잘 맞아서 요즘 Cloudflare D1이나 Turso 같은 엣지 데이

Cloudflare Tunnel로 로컬 서버를 안전하게 공개하기

Cloudflare Tunnel로 로컬 서버를 안전하게 공개하기

로컬에서 개발 중인 웹 서버를 외부에 공개해야 할 때 어떤 방법을 쓰시나요? ngrok같은 터널링 도구를 많이 사용하는데, 무료 플랜에서는 임시 URL이 매번 바뀌고 커스텀 도메인도 쓸 수 없어서 불편할 때가 있습니다. Cloudflare Tunnel은 Cloudflare에서 제공하는 무료 터널링 서비스입니다. 내 컴퓨터에서 Cloudflare 네트워크까지 암호화된 아웃바운드 터널을 만들어주기 때문에 방화벽 포트를 열거나 공유기 설정을 건드릴 필요가 없어요. 게다가 자기 소유의 도메인을 연결할 수 있고, Cloudflare의 DDo

cargo fmt로 Rust 코드 스타일 자동 정리하기

cargo fmt로 Rust 코드 스타일 자동 정리하기

팀에서 코드 리뷰를 하다 보면 로직과 무관한 스타일 논쟁에 시간을 쓸 때가 있어요. 중괄호를 같은 줄에 둘지 다음 줄에 둘지, use 구문을 어떻게 묶을지, 한 줄이 몇 글자를 넘으면 줄바꿈할지... 이런 토론이 쌓이면 정작 중요한 설계나 로직 리뷰에 집중하기 어렵습니다 😅 Rust 생태계에서는 이 문제를 rustfmt라는 공식 포매터로 깔끔하게 해결합니다. cargo fmt 한 번이면 코드 스타일이 일관되게 정리되니까 팀원들은 포매팅에 신경 쓸 필요 없이 코드 자체에만 집중할 수 있죠. 이번 글에서는 rustfmt의 설치부터 설

cargo clippy로 Rust 코드 품질 높이기

cargo clippy로 Rust 코드 품질 높이기

Rust 컴파일러는 워낙 꼼꼼해서 컴파일만 통과하면 꽤 안심이 되죠. 하지만 "컴파일은 되는데 이게 정말 좋은 코드인가?"라는 질문에는 컴파일러가 답해주지 않습니다. 불필요한 clone() 호출, 더 간결하게 쓸 수 있는 패턴, 성능을 깎아먹는 습관적인 코드... 이런 건 컴파일러의 관심사가 아니거든요. Clippy는 바로 이 영역을 담당하는 Rust의 공식 린트 도구입니다. 700개가 넘는 린트 규칙으로 코드를 분석해서 잠재적인 버그부터 스타일 개선 사항까지 짚어줍니다. 이번 글에서는 Clippy의 설치와 기본 사용법, 주요 린트

GraphQL 명세 ⑧: September 2025 에디션의 새로움

GraphQL 명세 ⑧: September 2025 에디션의 새로움

드디어 시리즈의 마지막 편입니다. 1편부터 7편까지 GraphQL 명세의 본문 여섯 개 장을 차례로 읽어왔는데요. 그동안 곳곳에서 "이건 September 2025에서 새로 들어왔다", "자세한 건 마지막 편에서"라며 미뤄둔 이야기들이 있었습니다. 이번 편에서 그 약속들을 한자리에 모아 갚으려고 합니다. 1편에서 짚었듯 September 2025 에디션은 2021년 10월 이후 4년 만의 정식 개정판입니다. 그동안 쌓인 변경 제안이 한꺼번에 반영됐는데요. 흥미로운 건 핵심 신규 기능들을 나란히 놓고 보면, 하나의 방향을 가리키고 있

rustup으로 Rust 툴체인 관리하기

rustup으로 Rust 툴체인 관리하기

Rust를 처음 시작할 때 공식 사이트에서 안내하는 대로 설치 스크립트를 실행하면 rustup이라는 도구가 함께 깔립니다. 처음에는 "Rust 설치 프로그램"쯤으로 생각하고 넘어가기 쉬운데, 사실 rustup은 그보다 훨씬 많은 일을 해요. 컴파일러 버전을 바꾸거나 nightly 기능을 잠깐 써보거나 팀 전체의 Rust 버전을 맞추거나 WebAssembly로 크로스 컴파일하는 것까지 전부 rustup이 담당합니다. 이번 글에서는 rustup의 설치부터 툴체인 관리, 컴포넌트와 타겟 설정, 팀 단위 버전 고정까지 살펴보겠습니다. ru

NvChad로 NeoVim을 IDE처럼 꾸미기

NvChad로 NeoVim을 IDE처럼 꾸미기

NeoVim을 설치하고 기본적인 모달 편집에 익숙해졌는데, 막상 매일 쓰려니 뭔가 허전하지 않으셨나요? NeoVim 입문 가이드에서 다뤘듯이 플러그인을 하나씩 추가하면 IDE급 환경을 만들 수 있긴 한데, 그 "하나씩"이 문제입니다. 컬러 스킴 고르고, 상태바 설정하고, LSP 연결하고, 자동 완성 붙이고... 코딩은 안 하고 에디터 설정만 이틀째 하고 있는 자신을 발견하게 되죠. 😅 NvChad는 이 문제를 정면으로 해결합니다. 설치 한 줄이면 예쁜 UI에 빠른 시작 속도, 실용적인 플러그인 구성까지 한 번에 갖춰지거든요. 이

Tower Layer 직접 만들기: 커스텀 미들웨어 작성 가이드

Tower Layer 직접 만들기: 커스텀 미들웨어 작성 가이드

Tower 미들웨어 실전에서 본 빌트인 미들웨어로 대부분의 자리는 커버되지만, 가끔은 직접 만들어야 하는 순간이 옵니다. 사내 인증 토큰 검증, 도메인 특화 메트릭 수집, 비표준 헤더 처리 같은 자리죠. 이번 글에서는 Tower의 Service와 Layer를 직접 구현해서 미들웨어를 작성하는 방법을 정리해보겠습니다. 비동기 future를 직접 만드는 패턴까지 포함해서요. 입문 개념은 Tower 입문에서 다뤘으니, 이 글은 그 위에서 한 단계 깊이 들어가는 내용입니다. 만약 Future의 poll, Waker, Pin 같은 단어가 아

Discord