754 posts
클로드 코드 에이전트 팀: 여러 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의 설치와 기본 사용법, 주요 린트

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에 빠른 시작 속도, 실용적인 플러그인 구성까지 한 번에 갖춰지거든요. 이

LazyVim: 설정 없이 바로 쓰는 NeoVim

LazyVim: 설정 없이 바로 쓰는 NeoVim

NeoVim을 쓰기로 마음먹고 설정을 시작하면 끝이 안 보입니다. 플러그인 매니저를 고르고, LSP를 연결하고, 자동 완성을 붙이고, 컬러 스킴을 깔고, 상태바를 예쁘게 꾸미고... 코딩은 안 하고 에디터 설정만 사흘째 하고 있는 자신을 발견하게 되죠. 😅 NvChad처럼 미리 짜인 설정 프레임워크를 쓰면 이 문제가 줄어들긴 합니다. 그런데 NvChad는 프레임워크 자체의 구조를 따라야 하는 제약이 있어서 뭔가 바꾸고 싶을 때 NvChad의 동작 방식을 먼저 이해해야 하는 경우가 종종 생깁니다. LazyVim은 이 사이 어딘가를

Tauri로 가벼운 데스크톱 앱 만들기

Tauri로 가벼운 데스크톱 앱 만들기

웹 개발자라면 한 번쯤 "내가 만든 웹 앱을 데스크톱 앱으로 배포할 수 있으면 좋겠다"고 생각해 보신 적 있을 겁니다. Electron이 이 영역을 오랫동안 지배해 왔지만, 앱 하나에 Chromium 전체를 번들하다 보니 설치 파일이 100MB를 넘어가는 건 일상이었죠 😅 Tauri는 이 문제를 풀려고 만들어진 프레임워크입니다. 프론트엔드는 기존 웹 기술을 그대로 쓰되 백엔드를 Rust로 작성하고, OS의 네이티브 웹뷰를 활용해서 앱 크기를 수 MB 수준으로 줄여 줘요. 이번 글에서는 Tauri 2로 데스크톱 앱을 처음부터 만들어

Cloudflare Email Routing으로 커스텀 이메일 주소 만들기

Cloudflare Email Routing으로 커스텀 이메일 주소 만들기

나만의 도메인을 가지고 있다면 한 번쯤 hello@mydomain.com 같은 이메일 주소를 만들어보고 싶지 않으셨나요? 브랜드 이메일 주소가 있으면 신뢰감을 줄 수 있고, 용도별로 주소를 나눠서 쓸 수도 있어서 여러모로 유용하거든요. 그런데 이메일 서비스를 직접 운영하는 건 서버 관리부터 보안까지 신경 쓸 게 너무 많습니다. Google Workspace 같은 유료 서비스를 쓰자니 개인 프로젝트나 소규모 사이트에는 부담이 되고요. Cloudflare Email Routing은 이런 고민을 깔끔하게 해결해줍니다. 도메인에 커스텀 이

Claude Artifacts: 대화만으로 앱을 만드는 경험

Claude Artifacts: 대화만으로 앱을 만드는 경험

"이거 간단한 계산기 하나만 만들어줘." Claude에게 이렇게 말했을 뿐인데, 화면 오른쪽에 진짜 동작하는 계산기가 나타났습니다. 버튼을 누르면 숫자가 입력되고, 사칙연산도 되고, C 버튼을 누르면 초기화까지 됩니다. 코드를 한 줄도 작성하지 않았는데 말이죠 🤔 이게 바로 Claude의 Artifacts 기능입니다. 그냥 대화를 나누면서 "이런 거 만들어줘"라고 하면 Claude가 실시간으로 코드를 생성하고 바로 실행 가능한 결과물을 보여줍니다. 이 글에서는 Artifacts가 정확히 무엇인지, 어떤 것들을 만들 수 있는지, 그

Rust 기초: Cow로 불필요한 복사 줄이기

Rust 기초: Cow로 불필요한 복사 줄이기

문자열을 정규화하는 함수를 만든다고 해볼게요. 공백을 다듬고 소문자로 바꾸는 작업이 필요한데, 입력이 이미 깔끔할 수도 있습니다. 간단하죠. 그런데 한 가지 찜찜한 점이 있습니다. 입력이 이미 정규화된 상태라면 어떻게 될까요? 아무 변화도 없는데 to_lowercase()가 호출되는 순간 새로운 String이 힙에 할당됩니다. 초당 수백만 번 호출되는 코드라면 이 낭비가 꽤 아프게 다가오죠. "변경이 필요할 때만 복사하고, 그 외엔 빌린 채로 쓰자"는 아이디어를 타입으로 표현한 게 바로 Cow<'a, B>입니다. 이 글에서는 Cow

AI가 바꿔버린 웹의 질서, Cloudflare가 던진 균형의 해법

AI가 바꿔버린 웹의 질서, Cloudflare가 던진 균형의 해법

최근 몇 년 사이, AI 모델 학습을 위한 대규모 웹 스크래핑이 보편화되면서 인터넷의 오랜 질서가 흔들리고 있습니다. 오랫동안 웹에는 창작자와 사용자 간에 암묵적인 상생 체계가 존재했습니다. 창작자는 콘텐츠를 무료로 공개함으로써 트래픽과 인용이라는 형태의 보상을 받았고, 사용자는 타인의 콘텐츠를 사용할 때 출처를 남기며 인정과 감사를 표했습니다. 이러한 관행은 단순한 예의 차원을 넘어, 웹의 성장 동력이자 지식 공유의 선순환 구조를 가능하게 했습니다. MIT나 Creative Commons 라이선스가 출처 표시(attribution

Rust 기초: Borrow와 ToOwned 트레이트

Rust 기초: Borrow와 ToOwned 트레이트

Rust로 HashMap을 다루다 보면 한 번쯤 이런 의문이 생깁니다. 키로 String을 넣었는데, 조회할 때는 &str을 넘겨도 잘 찾아지는 게 신기하지 않나요? 이게 우연이 아니라 Borrow라는 트레이트가 만들어주는 보장 덕분인데요. 그리고 그 반대쪽, 즉 빌린 값을 다시 소유권이 있는 값으로 되돌리는 역할을 하는 게 ToOwned 트레이트입니다. 이 글에서는 이 두 트레이트가 어떤 계약을 맺고 있고, 왜 짝을 이루는지 알아보겠습니다. AsRef 트레이트와 비슷해 보이지만 미묘하게 다른 지점이 핵심입니다. Borrow 트레이

클로드 코드 마켓플레이스: 플러그인 배포하기

클로드 코드 마켓플레이스: 플러그인 배포하기

클로드 코드 플러그인을 설치해서 쓰다 보면 "이걸 우리 팀에 맞게 직접 만들 수 있지 않을까?"라는 생각이 들기 마련입니다. .claude/ 디렉토리에 스킬이나 Hooks를 설정해서 잘 쓰고 있다면 이미 플러그인의 반은 만든 셈이에요. 이 글에서는 간단한 스킬 하나짜리 플러그인부터 시작해서 Hooks, MCP 서버, LSP 서버를 포함하는 완전한 플러그인을 만들고 마켓플레이스를 통해 팀이나 커뮤니티에 배포하는 과정까지 다룹니다. 플러그인을 설치하고 관리하는 방법은 플러그인 사용법을 참고하세요. 첫 플러그인 만들기 간단한 인사 스킬을

클로드 코드 플러그인 사용법

클로드 코드 플러그인 사용법

클로드 코드에 TypeScript LSP를 연결하고, 코드 리뷰 스킬을 추가하고, GitHub MCP 서버까지 설정하려면 건드려야 할 파일이 꽤 많습니다. 스킬, Hooks, MCP 서버를 각각 따로 설정해본 분이라면 이 번거로움을 잘 아실 거예요. 플러그인은 이런 설정을 하나의 패키지로 묶어서 설치 한 번이면 끝나게 해줍니다. 이 글에서는 플러그인을 찾아서 설치하고 관리하는 법을 다루고, 직접 만들어서 배포하는 방법은 플러그인 마켓플레이스 가이드에서 이어집니다. 플러그인이란? 클로드 코드 플러그인은 커스텀 스킬, 에이전트, Hoo

Rust의 에러 처리: Result, ? 연산자, map_err

Rust의 에러 처리: Result, ? 연산자, map_err

자바스크립트로 파일을 읽거나 파이썬으로 API를 호출해본 경험이 있으시다면, 아마 try/catch나 try/except로 예외를 잡는 방식이 익숙하실 겁니다. 그런데 Rust 코드를 처음 보면 이상한 점이 눈에 들어옵니다. 분명히 파일을 여는데 try도 없고, 함수 시그니처에 throws도 없고, 대신 Result<T, E>라는 낯선 타입이 반환됩니다. 🤔 이번 글에서는 다른 언어와 비교했을 때 Rust 에러 처리의 가장 특이한 지점들과, 실무에서 자주 쓰는 ? 연산자, map_err 같은 도구를 하나씩 풀어보겠습니다. 예외가

Discord