LLM 설명이나 사용법은 알고 있던 내용이 많았음.
근데 자잘하지만 유용한 기능 사용법이나, 개발을 하면서 행동을 조정하는 걸 실제로 보는 게 도움이 많이 됨. (경험 기반의 판단과 교정 과정을 관찰하는 것)
- 주기적으로(본인은 한 달, 또는 새 모델 나올 때) 모든 설정(
~/.claude)을 리셋하여, AI의 성능·기본 기능 개선에 따라 불필요해진 설정/스킬을 제거하고 재구축하기. - 공식 문서를 읽고, 적극적으로 사용해보기. 시행착오를 통해 개선하기. 토비는 Claude Code Docs를 특히 강조 — "베스트 프랙티스를 포함해서 온갖 기능에 대한 굉장히 좋은 팁들이 들어 있다. 머릿속에 다 들어 있어야 한다."
- AI를 시키되, 결과를 보고, 안 하는 것(예: 테스트를 안 만듦)과 잘못하는 것(예: 도메인 테스트에 JPA 넣음)을 정의해서 CLAUDE.md에 규칙으로 남기기 — 매번 사람이 명령하지 않아도 지키도록 최적화.
- AI가 어떤 식으로 동작하는지 분석하기. Plan 모드로 AI가 어떤 접근법(버전, 구조 등)을 사용하려 하는지 먼저 확인하고 교정.
- AI가 만든 코드를 반드시 리뷰한다. 사람이 평가하고 AI의 행동을 교정해야 더 나은 품질이 나오고, 사람도 성장할 수 있다. 안 그러면 "AI는 점점 똑똑해져서 일을 잘하지만 여러분이 바보가 됩니다. 그러면 일을 잘 못 시켜요, 점점."
- AI가 작업하는 동안 멍하니 기다리지 말고 다른 활동을 한다 — 병렬 개발, 학습, 다른 세션 작업 등.
(Andrej Karpathy의 Deep Dive into LLMs like ChatGPT 후반부 내용과 겹치는 부분이 많다고 느낌.)
- AI 에이전트의 구조: 기본 AI(채봇, 멀티모달) + Tools를 조합하여 파일 읽기/쓰기, 셸 실행, 웹 검색 등의 기능을 수행. AI 자체는 지시만 하고, 실제 실행은 Claude Code(하네스)가 담당.
- 에이전틱 루프: 컨텍스트 수집 → AI에게 전송 → AI가 도구 사용 지시 → Claude Code가 실행 → 결과를 AI에게 반환 → 추가 작업 필요 여부 판단 → 반복 또는 종료.
- Tools: LLM이 사용 가능한 도구. 기본 내장(Bash, Read, Write, Edit, Glob, Grep, WebSearch, WebFetch, AskUserQuestion, Plan 등)과 확장(스킬, 서브 에이전트, 에이전트 팀, MCP, 플러그인 등)으로 나뉨.
- 컨텍스트 관리가 중요하다: 매 요청마다 시스템 프롬프트 + 대화 히스토리 + 도구 목록 + 최신 프롬프트가 AI에게 전송된다. 불필요한 정보가 쌓이면 AI 효율이 떨어진다. 이후 나오는 서브 에이전트, 에이전트 팀 등의 기술도 결국 필요한 컨텍스트만 유지하기 위한 방법.
CLAUDE.md: 프로젝트 또는 유저 레벨에서 AI가 매 세션마다 읽는 문서. 코딩 규칙, 테스트 정책, 참고 문서 경로 등을 기록. AI가 이미 잘하는 것은 빼고 교정이 필요한 것만 유지해야 한다 — 길어지면 오히려 성능 저하.- 스킬(Skill): 반복되는 프롬프트를 재사용 가능하게 패키징한 것. 본질은 프롬프트 + (선택적) 코드. 3번 이상 반복되면 스킬로 만든다. MCP보다 컨텍스트 소비가 적어 선호.
- 서브 에이전트(Sub-Agent): 별도 세션에서 실행되어 메인 컨텍스트에 대화 내용이 추가되지 않음. 요약된 결과만 반환. 코드 분석, 품질 평가, 리뷰 등 보조 작업에 적합.
- 에이전트 팀(Agent Team): 여러 에이전트를 묶어서 에이전트 간 커뮤니케이션이 가능한 구조. 예: TDD 팀 — Red(실패 테스트 작성), Green(최소 코드로 통과), Refactor(정리) + Team Lead(태스크 분할·할당). tmux로 병렬 시각화 가능. 현재 실험적 기능(
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAM환경변수 필요). - 플러그인(Plugin): 스킬, 에이전트, 훅, 커맨드 등 여러 확장 요소를 패키징한 것. 공식 마켓플레이스(
anthropics/claude-code-plugins)에서 검증된 것만 선별 설치 권장. 보안 주의 — 플러그인은 로컬 실행 권한을 가지므로 악의적 코드가 포함될 수 있다.
- PRD (Product Requirements Document): "무엇을 만들 것인가"를 정의하는 기능 스펙 문서. 유저 스토리, 기능 목록, UI 방향 등.
- SDD (Spec-Driven Development): PRD를 받아서 "어떻게 구현할 것인가"를 구체화하는 방식. 스펙 → 구현 계획(Phase 분할) → 태스크 리스트 → 단계별 개발 순서로 진행.
- 하네스(Harness): AI 모델을 감싸고 도구·컨텍스트·권한 관리 등을 제공하는 실행 환경. Claude Code 자체가 하네스.
- 에이전틱 루프(Agentic Loop): 컨텍스트 수집 → AI 판단 → 도구 실행 → 결과 확인을 반복하는 에이전트의 작업 사이클.
- Plan 모드의 계획은 세션이 끝나면 사라지므로, 프로젝트 루트에 마크다운 파일로 명시적으로 저장한다.
- 실제 사용된 파일:
spec.md(기능 스펙),plan.md(구현 계획),tasks.md(체크박스 태스크),CLAUDE.md(코딩 규칙). CLAUDE.md에 이 문서 경로들을 참고 문서로 기록해두면 다음 세션에서도 AI가 참조 가능. "다음에 프롬프트 쓸 때 tasks.md를 참고해서 뭐를 하세요, 이런 거 할 필요가 없는 거죠."- 장기 프로젝트에서는
docs/폴더에 날짜나 시리얼 번호를 붙여 스펙 문서를 누적 관리.
기술 스택: Spring Boot 4.x / Java 25 / Gradle Kotlin DSL / JPA + H2 / Next.js (프론트) / Ghostty + IntelliJ
- 환경 리셋 (
~/.claude삭제) → 빈 폴더에서 시작 - Plan 모드로 AI의 기본 판단 확인 → Boot 3.5 + Java 17~21로 하려는 걸 발견 → 취소
- "스프링 이니셜라이저를 이용해서 Boot 4 최신 + Java 25 프로젝트 생성해줘" → Initializr API 경유가 핵심 (AI가 직접 Gradle 파일 만들면 버전 호환이 꼬임)
gradle build로 환경 검증 → IntelliJ에서 구조 확인- PRD 작성 (Apple Reminders 클론) → SDD로 변환 (Phase 분할) → Task 리스트 67개 생성
- 단일 엔티티(ReminderList)로 전 레이어 한 사이클 — 이게 핵심 전략. AI 가능한 테스크 단위로 쪼갬.
(영상은 거기서도 레이어별로 쪼개는데, 왜?: AI가 초반 참고할 기존 없으면 원하는 결과가 나오지 않아서 조정을 위함.)- 도메인 엔티티 → 단위 테스트 (JPA 의존 금지로 교정)
- 서비스 (인터페이스 분리,
ports.input패키지,Default접두사) → 통합 테스트 (Mock 아닌@SpringBootTest로 교정) - 컨트롤러 + OpenAPI 스펙 → MockMvc 테스트
- 각 단계에서 발견한 교정사항을 CLAUDE.md에 기록
- 컨벤션 확립 후 나머지 엔티티 + 프론트엔드(Next.js) 일괄 개발
- 라이브 데모 → 버그 수정 → 코드 리뷰 → 이슈 기반 개선
- 에이전틱 루프 동작 원리 설명 (AI는 채봇, Claude Code가 도구 실행)
"가지고 있는 도구가 뭔지 알려줘"→ 기본 내장 도구 파악 (Bash, Read, Write, Glob, Grep, WebSearch 등)- 공식 플러그인 마켓플레이스 설치 → 최소한만 선별 (Ralph Loop, Skill Creator, Exploratory Output Style, Plugin Dev)
- 스킬 제작: Spring Initializr 스킬 —
AskUserQuestion도구로 버전/디펜던시 선택 UI 구현. 이후/spring-initializer로 재사용. - 서브 에이전트 제작: 코드 품질 감사 에이전트 — 별도 세션에서 실행되어 메인 컨텍스트 오염 없음. 가독성/아키텍처/테스트/보안 분야별 점수(A~F) 리포트.
- 에이전트 팀 구성: TDD(Red/Green/Refactor + Lead) — tmux로 병렬 시각화. 문자열 계산기 예제로 데모. (Refactor가 매 사이클이 아닌 마지막에만 실행되는 문제 발견 → 프롬프트 교정 필요)
- 실전 조합: 품질 감사 → 이슈 추출 → TDD 팀으로 수정 (실패 테스트 먼저 → 수정 → 리팩터)
- 멀티 모델 협업: Codex에게 리뷰 위임 → Claude와 토론 → 합의된 개선만 적용
- 컨텍스트 관리를 항상 신경 쓰기. 한 번에 큰 작업을 하지 않기. 파일(
spec.md,plan.md,tasks.md)을 사용해서 중간 결과, 계획, 상태 등을 저장. - 반복되는 작업은 스킬, 에이전트 등의 기능을 사용하여 최적화.
- Plan 모드로 AI의 기본 판단을 먼저 확인하고 교정. (토큰 낭비 방지 + 방향 확인)
- 초반에는 큰 작업보다 레이어(도메인 → 서비스 → 컨트롤러) 단위로 주의 깊게 보면서 AI를 교정.
- 어느 정도 초반 코드와 규칙이 쌓였으면(AI가 코드를 보고 따라 할 수 있을 만큼) 큰 작업을 시키기.
- 코드 작성 시 테스트 작성과 실행을 필수로 하도록 교정하기. (기본적으로 테스트를 만들어도 실행을 안 하거나, 아예 안 만들려는 경향이 있음)
- AI가 의도한 도구가 아닌 다른 방법을 쓰려 할 때(예: Initializr 대신 직접 Gradle 작성) 적절하게 중단하고 교정.
- Claude의 동작을 보면 매번 특정 도구를 사용하는 걸 볼 수 있다. (예: Bash, Read, Read 등)
- 도구의 동작 방식을 이해하면 시간을 아낄 수 있다. 각 도구가 어떤 특성을 가지는지 알면, 명시적으로 지정하거나 조합하여 훨씬 효율적으로 작업 가능.
- 예: Explorer 에이전트는 코드 분석에 특화되어 있는데, AI가 알아서 안 쓰고 Glob/Grep만 쓸 때가 있다.
- 예: 서브 에이전트는 병렬로 여러 개를 동시 실행 가능.
- 예: AskUserQuestion 도구를 스킬에 넣으면 텍스트 입력 대신 탭 선택 UI를 만들어줌.
"가지고 있는 도구가 뭔지 알려줘"를 첫 번째로 실행하여 현재 사용 가능한 도구를 파악하는 것이 출발점.
/permissions로 안전한 명령(./gradlew,ls,find등)을 사전 허용. 설정이 쌓이면 위험한 작업 외에는 거의 확인 없이 동작./ide로 IntelliJ/VS Code와 연동하여 코드 변경 승인을 IDE의 diff 뷰에서 처리.claude -w 워크스페이스이름으로 Git Worktree 자동 생성. 병렬 브랜치 작업에 유용.Ctrl+C로 빠져나가면 워크트리 설정 자동 정리.- 상태 표시줄(
/status-bar)에 컨텍스트 사용량(%), Git 브랜치, 모델명 등 표시. 컨텍스트가 차면clear context또는compact시점 판단에 활용. - 느낌표(
!) 접두사로 AI를 거치지 않고 셸 명령 직접 실행 가능. 예:!idea .
/plugins로 플러그인 확인/설치/활성화. 한 번에 많이 설치하지 말고 필요한 기능을 조금씩 추가. 컨텍스트 관리를 위해 필요한 것만 활성화.- 공식 마켓플레이스:
github.com/anthropics/claude-code-plugins - 추천 목록:
- Exploratory Output Style — 대화 중 인사이트 팁 표시 (무조건 켜놓을 것)
- Skill Creator — 스킬 제작 지원
- Ralph Loop — 실무 워크플로우
- Plugin Dev — 플러그인 개발용
- LSP, Figma 등 고급 플러그인은 처음부터 필요 없음. 나중에 필요할 때 추가.