AI와 함께한 개발 워크플로우 회고
목차
- 들어가며
- Claude Code, Super Claude
- 커스텀 에이전트 · 로컬 MCP · Commands
- Remote MCP 인프라 구축
- Skills
- 사이드 프로젝트 활용
- 마치며
들어가며
- 처음엔 그냥 간단한 질의 응답을 진행했다.
- 에러 붙여넣고 “이거 왜 나요?” 수준
- 코드 설명, 개념 정리, 구글 검색 대체 정도
- 쓰다 보니 한계가 명확했다:
- 세션 끊기면 컨텍스트 날아감
- 내 프로젝트 구조를 모름
- 매번 같은 내용 다시 설명
“AI가 편리하다”는 말이 맞긴 한데, 실질적으로 개발 워크플로우에 진짜로 녹아들지는 않았다.
Claude Code, Super Claude
웹 UI의 문제:
- 매 세션마다 프로젝트 설명 반복
- 컨텍스트가 날아가면 처음부터 다시
- 파일 직접 붙여넣지 않으면 코드도 모름
Claude Code (CLI):
- 프로젝트 디렉토리 안에서 대화
- 파일 직접 읽고, 수정하고, 테스트 실행
- “내 코드를 아는 AI”가 비로소 가능해짐
Super Claude:
- 장점
- Claude Code 위에 올라가는 커맨드/페르소나/플래그 체계
- 작업 유형마다 모드 전환, 반복 패턴 구조화
- 처음엔 꽤 만족했음
- 단점
- 기능이 많은 만큼 프롬프트가 무거움
- 대화가 길어질수록 토큰이 빠르게 닳음
- 중반을 넘어가면 응답 품질이 눈에 띄게 떨어짐
선택지:
- Super Claude 그냥 계속 쓴다
- 내 상황에 맞는 경량화 버전을 직접 만든다
→ 2번. 자주 쓰는 것만 남기면 충분했다.
커스텀 에이전트 · 로컬 MCP · Commands
에이전트
- github에서 괜찮은 것을 찾기도 했으며, 직접 작성 하기도 했다.
- 도메인별로 20개+ 정리 (java-expert, spring-boot-expert, orchestration-master 등)
로컬 MCP
sequential-thinking,reasoner,think-tool,mermaid,memory,memory-bank등 로컬에서 연결- 외부 도구로 claude 동작의 부족한 점을 보완하고나 확장할 수 있었 음
Command
- agent, MCP 활용에 대한 지침이나 정책을 명시
- 구조된 동작으로 Claude가 더 일관되게 동작함
Orchestration — 핵심 목표
- Claude가 직접 다 판단하면 컨텍스트가 빠르게 무거워짐
- Agent의 역할을 더 명확히 하는 방향으로 Command 작성
- Orchestration-master가 Planning, Agent 배분 등을 할 수 있도록 구성
고민한 구조:
- 중간 조율자(
agent-orchestrator)를 두고 위임 - 이 과정 조차도 적절한 MCP 도구를 쥐어주고 효과를 극대화
Phase 1: Requirements Analysis — 요구사항 파악
Phase 2: Context Analysis — 관련 컨텍스트 수집
Phase 3: Agent Delegation — 전문 에이전트 위임 (MCP 연동)
Phase 4: Result Summary — 결과 통합 및 정리
graph LR
U[User] --> M[Main Claude]
M --> O[agent-orchestrator]
O --> A1[전문 에이전트]
O --> A2[전문 에이전트]
O --> MCP[MCP Servers]
- 독립 작업은 병렬, 의존성 있는 작업은 순차 처리
- 압축 컨텍스트 + 심볼 기반 출력으로 토큰 약 38% 절감 (22K → 13.7K)
Remote MCP 인프라 구축
로컬 MCP 한계:
- 세션 끊기면 서버도 같이 내려감
- 상태 유지 어려움
- 여러 환경에서 접근 불가
→ Docker로 MCP 서버 상시 운영 인프라로 전환
이 시점에 MCP 구성도 함께 정리했다. 로컬에서 쓰던 것들 중 뭘 남길지 고민했다:
memory,memory-bank,mermaid등 → 컨텍스트 소모가 크다는 걸 체감했으며 실질적 이득이 없다고 판단sequential-thinking,think-tool,reasoner→ 추론에 직접 도움이 됨
→ 3개만 남겼다.
구성: MCP 서버들 Docker로 띄우고, Nginx가 인증 거친 요청만 통과시킴
graph LR
CC[Claude Code] -->|인증| NG[Nginx]
NG --> ST[sequential-thinking]
NG --> MR[mcp-reasoner]
NG --> TT[think-tool]
인증 고도화 — Keycloak + Kotlin/Spring
API Key 방식에서 더 나아가 Keycloak 기반 JWT 인증으로 교체했다:
- Nginx가 요청 수신
- Spring 검증 서버에 토큰 전달
- Keycloak JWKS로 서명 검증
- 통과 여부 결정 후 MCP로 전달
graph LR
CC[Claude Code] -->|Bearer Token| NG[Nginx]
NG -->|auth_request| SP[Spring 검증서버]
SP -->|JWKS| KC[Keycloak]
SP -->|200/403| NG
NG --> MCP[MCP Servers]
- 검증 서버는 Kotlin + Spring Boot로 작성
Skills
MCP, Commands 방식의 문제:
- 세션 시작부터 컨텍스트에 올라감
- 쓰든 안 쓰든 토큰 차지
- Super Claude 버린 이유랑 같은 맥락
Skills는 다르다:
- 공식 docs에 따르면,
SKILL.md의description기반으로 상황에 맞을 때만 점진적으로 로딩 - 필요한 순간에만 컨텍스트에 올라옴
/skill-name으로 직접 호출도 가능-
Plugin으로 묶으면 네임스페이스 생겨서 충돌 없이 배포 가능
- 자주 쓰는 패턴들 25개 스킬로 정리해서 플러그인으로 묶어 마켓에 올렸음
- 여러 방법으로 활용 중이고, 공부 중
사이드 프로젝트 활용
- AI를 사용한 방식:
- 아키텍처 구조 검증
- 설계 문서 작성
- 엣지 케이스 포함한 Gherkin give-when-then 테스트 케이스 생성
- 막히는 부분 Pair 형태로 같이 검토
- 위 과정에서 AI 쓰는 패턴이 꽤 일정하다는 것을 알 수 있었다.
- 브레인스토밍 상대
- 가능한 선택지 전부 나열
- 내 생각이 맞는지 틀린지 검증
- 코드나 문서 뽑아내는 것보다 이쪽이 훨씬 자주 쓰는 패턴이었다.
- 내가 알 수 없는 코드는 결과적으로 기술 부채가 될 가능성이 높기 때문이다.
마치며
돌아보면 단계가 뚜렷하게 나뉜다:
웹 UI로 질문 → CLI로 코드베이스 연결 → 에이전트/커맨드 직접 제작 → MCP 인프라 구축 → 인증 서버 구현
- 각 단계마다 “이전 방식의 한계”가 다음 단계를 만들었음
- 더 편하게 쓰려고 만든 도구를 만드는 데 더 많은 시간을 쓰는 아이러니가 있긴 한데, 그 과정 자체가 공부였다
AI를 잘 쓴다는 건, 뭘 시키느냐보다 어떻게 쓰느냐의 문제였다.
제일 자주, 제일 유용하게 쓰는 패턴:
- 아이디어를 꺼내놓는 브레인스토밍 상대
- 가능한 선택지를 전부 펼쳐주는 도구
- 내 생각이 맞는지 틀린지 부딪혀보는 검증 장치