ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Claude Code Skills로 프론트엔드 AI 협업 체계 구축
    이코에코(Eco²)/Skills 2026. 1. 23. 01:22

     
    작성일: 2026-01-23
    프로젝트: 이코에코 (EcoEco) Frontend
    기술 스택: React 19, TypeScript, Vite, IndexedDB, SSE


    왜 Skills가 필요했나?

    문제 상황

    이코에코 프로젝트에서 Agent 채팅 기능을 구현하던 중, 다음과 같은 문제들이 반복적으로 발생했습니다:

    1. 데이터 무결성 이슈
      • IndexedDB 스키마가 백엔드 구조와 불일치
      • 메시지 순서 보장 실패 (created_at vs server timestamp)
      • 멀티 유저 환경에서 데이터 격리 미흡
    2. SSE 연결 불안정
      • Vision/RAG 등 긴 작업 중 타임아웃 발생
      • Session 전환 시 typing indicator 누수
      • 중복 이벤트 수신
    3. 반복되는 빌드 에러
      • TypeScript 컴파일 에러 패턴 동일
      • ESLint 규칙 위반 (no-this-alias, no-unused-vars)
      • Vercel 배포 실패
    4. AI 에이전트 컨텍스트 부족
      • 매번 같은 설명 반복
      • 과거 해결 방법 재발견 필요
      • 일관성 없는 코드 패턴

    🏗️ Skills 아키텍처 설계

    핵심 원칙

    1. 계층 구조 (Hierarchical Structure)

    {skill-name}/
    ├── SKILL.md              # 빠른 참조: 의사결정 트리, 핵심 패턴
    └── references/
        ├── {reference-1}.md  # 상세 가이드: 전체 리포트, 검증 결과
        └── {reference-2}.md  # 코드 예제, 트러블슈팅

    왜 이 구조인가?

    • SKILL.md: AI 에이전트가 먼저 읽는 최초 진입점
    • references/: 필요할 때만 참조하는 상세 문서
    • 토큰 효율성 ↑ (불필요한 컨텍스트 로딩 ↓)

    2. 의사결정 트리 (Decision Tree)
    AI 에이전트가 문제 상황에서 즉시 올바른 해결책으로 이동할 수 있도록 설계:

    문제 발생
        │
        ├─ 증상 A?
        │   └─ references/solution-a.md §1
        │
        ├─ 증상 B?
        │   └─ references/solution-b.md §2
        │
        └─ 증상 C?
            └─ references/solution-c.md §3

    3. 우선순위 기반 (Priority-Based)
    Vercel React Best Practices를 참고하여 우선순위 구조 도입:

    CRITICAL → HIGH → MEDIUM-HIGH → MEDIUM → LOW-MEDIUM → LOW

    📚 6개 Skills 상세

    1. Agent Feature Skill

    목적: Agent 페이지 구현 가이드 (SSE 스트리밍, 사이드바, 마크다운 렌더링)
    사용 시기:

    • Agent 채팅 UI 구현
    • SSE 토큰 스트리밍
    • 이미지/위치 정보 통합

    핵심 References:

    • frontend-stack.md: 기술 스택, 컨벤션
    • api-spec.md: API 엔드포인트, SSE 형식
    • component-design.md: 컴포넌트 설계
    • existing-code-reference.md: 재사용 가능한 코드

    실전 예시:

    // SSE 스트리밍 구현 (agent-feature/SKILL.md 참조)
    const es = new EventSource(`/api/v1/chat/${chatId}/messages/${messageId}/stream`);
    
    es.addEventListener('token', (e) => {
      const data = JSON.parse(e.data);
      setStreamingText(prev => prev + data.token);
    });
    
    es.addEventListener('stage', (e) => {
      const data = JSON.parse(e.data);
      setCurrentStage(data.stage_name);
    });
    
    es.addEventListener('done', () => {
      es.close();
      markMessageAsCommitted(messageId);
    });

    2. Data Integrity Skill

    목적: 데이터 무결성과 일관성 관리 (IndexedDB v3, Optimistic Updates)
    사용 시기:

    • IndexedDB 스키마 설계
    • Optimistic Update 구현
    • Eventual Consistency 패턴

    핵심 개념:
    3계층 아키텍처:

    Layer 1: React State (메모리)
        ↓ Optimistic Update
    Layer 2: IndexedDB (브라우저)
        ↓ Background Sync
    Layer 3: Backend DB (PostgreSQL)

    IndexedDB v3 스키마 계층화:

    // data-integrity/references/indexeddb-schema.md
    
    export interface MessageRecord extends AgentMessage {
      /** 사용자 ID (Backend: users_accounts.id) */
      user_id: string;
      /** 세션 ID (Backend: chat_conversations.id) */
      session_id: string;
      /** 동기화 상태 (0: pending, 1: committed) */
      synced: 0 | 1;
      /** 로컬 타임스탬프 (클라이언트 생성 시각) */
      local_timestamp: number;
    }
    
    // 계층적 인덱스
    indexes: {
      'by-user-session': [string, string],           // user_id + session_id
      'by-user-session-created': [string, string, string], // + created_at
      'by-session': string,                           // session_id
      'by-session-created': [string, string],         // session_id + created_at
      'by-status': string,                            // 상태별 조회
      'by-synced': number,                            // 미동기화 메시지
      'by-local-timestamp': number,                   // 시간 기반 정렬
    }

    Optimistic Update 상태 전이:

    pending (낙관적 업데이트)
        ↓ SSE done 이벤트
    committed (서버 확인)
        ↓ 에러 발생 시
    failed (재시도 필요)

    핵심 References:

    • indexeddb-schema.md: v3 스키마 전문, 계층 구조, ID 매핑
    • message-ordering.md: created_at 기반 순서 보장, 1309줄 상세 가이드
    • optimistic-updates.md: 상태 전이, Reconcile 로직

    실전 효과:
    Before (v2):

    // chat_id만으로 저장 → 멀티 유저 격리 불가
    await db.add('messages', {
      chat_id: '...',
      content: '...',
    });

    After (v3):

    // user_id + session_id로 명확한 계층화
    await db.add('messages', {
      user_id: 'user-123',
      session_id: 'chat-456',  // Backend: chat_conversations.id
      content: '...',
      synced: 0,  // Optimistic update
      local_timestamp: Date.now(),
    });

    결과:

    • ✅ 멀티 유저 환경에서 데이터 격리
    • ✅ 백엔드 스키마와 명명 일치
    • ✅ 30초 retention window로 Eventual Consistency 보장

    3. Troubleshooting Skill

    목적: 실전 문제 해결 가이드 (빌드 에러, 이미지 업로드, SSE 연결)
    사용 시기:

    • TypeScript 컴파일 에러
    • ESLint 규칙 위반
    • Vercel 배포 실패
    • 이미지 업로드 400 에러
    • SSE 타임아웃/중복 수신

    의사결정 트리:

    증상 파악
        │
        ├─ TypeScript 빌드 실패?
        │   └─ references/build-errors.md
        │       ├─ §1.1 타입 불일치
        │       ├─ §1.2 Property Does Not Exist
        │       └─ §1.3 레거시 인덱스 타입 에러
        │
        ├─ ESLint 에러?
        │   └─ references/build-errors.md
        │       ├─ §2.1 no-this-alias → 화살표 함수
        │       └─ §2.2 no-unused-vars → _ prefix
        │
        └─ 이미지 업로드 400?
            └─ references/image-upload-fix.md
                ├─ Pydantic HttpUrl 검증 실패
                └─ 빈 문자열 → undefined 처리

    실전 해결 사례:
    Case 1: 이미지 업로드 400 에러

    // ❌ 문제: 빈 문자열이 Pydantic HttpUrl 검증 실패
    const requestData: SendMessageRequest = {
      message,
      image_url: '',  // Backend: 422 Unprocessable Entity
    };
    
    // ✅ 해결: undefined로 필드 자체를 제외
    const requestData: SendMessageRequest = {
      message,
      image_url: finalImageUrl || undefined,  // 빈 문자열 → undefined
    };

    Case 2: ESLint no-this-alias

    // ❌ 문제
    this.initPromise = (async () => {
      const self = this;  // ESLint: no-this-alias
    
      this.db = await openDB({
        blocking() {
          self.db?.close();  // function() 내부에서 this 불가
        }
      });
    })();
    
    // ✅ 해결: 화살표 함수로 this 보존
    this.initPromise = (async () => {
      this.db = await openDB({
        blocking: () => {
          this.db?.close();  // ✅ 화살표 함수로 this 접근 가능
        },
      });
    })();

    일반적인 패턴:

    • Race condition 방지 (ref flag)
    • Memory leak 방지 (cleanup 함수)
    • 에러 로깅 (context 포함)

    핵심 References:

    • build-errors.md: TypeScript/ESLint/Vercel 에러 패턴 (300줄)
    • image-upload-fix.md: 이미지 업로드 진단 및 해결 (585줄)

    4. Code Quality Skill

    목적: 코드 품질 관리 (Prettier, ESLint, TypeScript, Agent Skills)
    사용 시기:

    • 코드 컨벤션 확인
    • 품질 메트릭 검증
    • Agent Skills 활용 패턴

    필수 검증 기준:

    항목 기준 검증 방법
    Prettier 100% 통과 npx prettier --check
    ESLint 0 에러, 0 경고 npx eslint
    TypeScript 빌드 성공 npm run build
    Git 브랜치/커밋 규칙 Pre-commit hook

    Import 순서 컨벤션:

    // 1. React & 외부 라이브러리
    import { useState, useEffect } from 'react';
    import { useQuery } from '@tanstack/react-query';
    
    // 2. 내부 컴포넌트
    import { AgentSidebar } from '@/components/agent';
    
    // 3. 훅
    import { useAgentSSE } from '@/hooks/agent/useAgentSSE';
    
    // 4. 서비스 & 타입
    import { AgentService } from '@/api/services/agent';
    import type { ChatSummary } from '@/api/services/agent';
    
    // 5. 상수 & 유틸
    import { AGENT_CONFIG } from '@/constants/AgentConfig';

    파일 네이밍 규칙:

    유형 컨벤션 예시
    컴포넌트 PascalCase AgentContainer.tsx
    camelCase + use useAgentSSE.ts
    타입 PascalCase AgentTypes.ts
    서비스 kebab-case + .service agent.service.ts
    유틸 camelCase messageUtils.ts

    코드 리뷰 체크리스트:

    # 필수 확인
    [ ] Prettier 포맷팅 통과
    [ ] ESLint 0 에러, 0 경고
    [ ] TypeScript 빌드 성공
    [ ] 파일 네이밍 규칙 준수
    [ ] Import 순서 준수
    
    # 권장 확인
    [ ] JSDoc 주석 작성 (public API)
    [ ] 복잡한 로직 인라인 주석
    [ ] 에러 핸들링 구현
    [ ] Memory leak 방지 (cleanup)
    [ ] Race condition 방지
    
    # 선택 확인
    [ ] 단위 테스트 작성
    [ ] E2E 테스트 시나리오
    [ ] 성능 최적화 (useMemo, useCallback)
    [ ] 접근성 (ARIA labels)

    핵심 References:

    • conventions.md: 전체 품질 검증 리포트 (12개 섹션, 531줄)
    • agent-skills.md: Vercel AI SDK 활용 패턴 (955줄)

    실전 효과:
    검증 전:

    TypeScript: 5 errors
    ESLint: 3 errors, 2 warnings
    Vercel: ❌ Deployment failed

    검증 후:

    TypeScript: ✅ 0 errors
    ESLint: ✅ 0 errors, 0 warnings
    Vercel: ✅ Deployment successful

    5. Vercel React Best Practices Skill

    목적: Vercel 공식 React 성능 최적화 (AI 에이전트용, 40+ 규칙)
    출처: vercel-labs/agent-skills
    버전: 1.0.0 (2026년 1월)
    사용 시기:

    • Waterfall 제거 필요
    • 번들 크기 초과
    • 서버/클라이언트 성능 최적화

    우선순위 구조:

    CRITICAL (즉각적 대응 필요)
    ├─ 1. Waterfalls 제거 (5 규칙) ← #1 성능 킬러
    └─ 2. 번들 크기 최적화 (5 규칙)
    
    HIGH (높은 영향도)
    └─ 3. 서버 사이드 성능 (7 규칙)
    
    MEDIUM-HIGH
    └─ 4. 클라이언트 데이터 페칭 (4 규칙)
    
    MEDIUM
    ├─ 5. 리렌더 최적화 (7 규칙)
    └─ 6. 렌더링 성능 (7 규칙)
    
    LOW-MEDIUM
    └─ 7. JavaScript 성능 (12 규칙)
    
    LOW
    └─ 8. 고급 패턴 (2 규칙)

    Top 5 핵심 규칙:
    #1: Waterfalls 제거 ⚡ CRITICAL

    // ❌ 문제: 순차적 await가 네트워크 레이턴시 누적
    // 300ms + 300ms = 600ms
    const user = await fetchUser();
    const posts = await fetchPosts(user.id);
    
    // ✅ 해결: better-all로 dependency-based 병렬화
    // max(300ms, 300ms) = 300ms
    import { all } from 'better-all';
    
    const { user, posts } = await all({
      async user() {
        return fetchUser();
      },
      async posts() {
        return fetchPosts((await this.$.user).id);  // 의존성 명시
      },
    });

    영향: 2-10배 개선
    #2: Barrel File Import 회피 📦 CRITICAL

    // ❌ 문제: 전체 icons/ 폴더가 번들에 포함
    import { CheckIcon } from '@/icons';
    
    // ✅ 해결: 필요한 파일만 직접 import
    import { CheckIcon } from '@/icons/CheckIcon';
    
    // 특히 주의: lucide-react, @mui/material, react-icons
    import Send from 'lucide-react/dist/esm/icons/send';

    #3: React.cache() 중복 제거 ⚡ HIGH

    // ✅ 서버 컴포넌트에서 요청당 1회만 실행
    import { cache } from 'react';
    
    export const getUser = cache(async (id: string) => {
      return await db.user.findUnique({ where: { id } });
    });
    
    // 여러 컴포넌트에서 호출해도 1번만 DB 쿼리
    <UserProfile userId="123" />  // DB 쿼리
    <UserAvatar userId="123" />   // 캐시 사용

    #4: Dynamic Import (Heavy Components) 📦 CRITICAL

    // ❌ 문제: 초기 번들에 포함 (500KB+ 차트 라이브러리)
    import HeavyChart from './HeavyChart';
    
    // ✅ 해결: 사용 시점에 로드
    const HeavyChart = dynamic(() => import('./HeavyChart'), {
      loading: () => <Skeleton />,
      ssr: false,  // 클라이언트 전용
    });

    #5: Passive Event Listeners 🎯 MEDIUM-HIGH

    // ❌ 문제: 스크롤 성능 저하
    element.addEventListener('scroll', handler);
    
    // ✅ 해결: 브라우저 최적화 허용
    element.addEventListener('scroll', handler, { passive: true });

    이코에코 프로젝트 적용 로드맵:
    Phase 1 (즉시 적용):

    • Bundle size 분석 (rollup-plugin-visualizer)
    • lucide-react imports 수정
    • better-all 도입 (useAgentChat waterfall 제거)

    Phase 2 (다음 스프린트):

    • Dynamic imports (Heavy components)
    • React.cache() (서버 컴포넌트 전환 시)
    • Passive listeners (스크롤 최적화)

    Phase 3 (장기):

    • ESLint plugin 도입 (출시 후)
    • Performance budget CI/CD
    • Lighthouse CI 통합

    핵심 References:

    • react-performance.md: Vercel 공식 40+ 규칙 전문 (2,516줄!)

    6. Webapp Testing Skill

    목적: 웹앱 테스트 스킬 (기존)
    사용 시기: 테스트 시나리오 작성
    Note: 기존 스킬 유지, 향후 확장 예정


    🎯 Skills 사용 흐름

    Scenario 1: 새 기능 구현 시

    1. agent-feature/SKILL.md
       ├─ 컴포넌트 설계 확인
       └─ API 스펙 확인
    
    2. code-quality/SKILL.md
       ├─ 컨벤션 준수
       └─ Import 순서
    
    3. vercel-react-best-practices/SKILL.md
       ├─ Waterfall 제거
       └─ 번들 크기 확인
    
    4. data-integrity/SKILL.md (필요 시)
       ├─ IndexedDB 저장
       └─ Optimistic Update

    Scenario 2: 문제 해결 시

    1. troubleshooting/SKILL.md
       ├─ 증상별 의사결정 트리
       └─ 해결 방법 참조
    
    2. troubleshooting/references/
       ├─ build-errors.md (빌드 실패)
       └─ image-upload-fix.md (이미지 에러)

    Scenario 3: 코드 리뷰 시

    1. code-quality/SKILL.md
       ├─ Prettier/ESLint 검증
       └─ TypeScript 컴파일
    
    2. code-quality/references/conventions.md
       ├─ 전체 체크리스트
       └─ 품질 메트릭

    📊 정량적 효과

    Before Skills (v1.0.0)

    문제 발생 빈도:

    • TypeScript 빌드 에러: 주 3-4회
    • ESLint 위반: 주 5-6회
    • 같은 문제 재발: 주 2-3회
    • AI 에이전트 컨텍스트 설명 시간: 평균 10분

    코드 품질:

    • Prettier 통과율: ~85%
    • ESLint 통과율: ~90%
    • Vercel 배포 실패율: ~15%

    After Skills (v2.0.0)

    문제 발생 빈도:

    • TypeScript 빌드 에러: 주 0-1회
    • ESLint 위반: 주 0-1회
    • 같은 문제 재발: 거의 없음
    • AI 에이전트 컨텍스트 설명 시간: 평균 1분

    코드 품질:

    • Prettier 통과율: 100% ✅
    • ESLint 통과율: 100% ✅
    • Vercel 배포 실패율: 0% ✅

    토큰 효율성:

    • 평균 컨텍스트 토큰: 37,705 / 200,000 (18.85%)
    • 불필요한 설명 감소: ~70%

    💡 배운 점 (Lessons Learned)

    1. AI 에이전트는 "기억"보다 "참조"를 선호한다

    처음엔 긴 대화로 컨텍스트를 쌓으려 했지만, 토큰 제한과 컨텍스트 손실 문제가 있었습니다.
    해결: Skills를 "외부 기억"으로 설계

    • SKILL.md = 목차 (빠른 스캔)
    • references/ = 상세 내용 (필요 시 참조)

    2. 의사결정 트리가 핵심이다

    AI 에이전트가 "어떤 문서를 읽을지" 결정하는 것이 가장 중요합니다.
    Before:

    "빌드 에러가 발생했습니다"
    → 전체 문서 스캔 (비효율적)

    After:

    "빌드 에러가 발생했습니다"
    → troubleshooting/SKILL.md 의사결정 트리 확인
    → TypeScript 빌드 실패? → references/build-errors.md §1
    → 즉시 해결

    3. 우선순위가 명확해야 한다

    Vercel React Best Practices의 CRITICAL/HIGH/MEDIUM 구조를 도입한 후, AI 에이전트가 중요한 문제를 먼저 해결하게 되었습니다.

    4. 계층 구조는 유지보수성을 높인다

    {skill-name}/
    ├── SKILL.md           # 변경 빈도: 낮음
    └── references/
        ├── {ref-1}.md     # 변경 빈도: 중간
        └── {ref-2}.md     # 변경 빈도: 높음

    SKILL.md는 안정적으로 유지하고, references/만 업데이트하면 됩니다.

    5. 외부 표준(Vercel)을 통합하면 신뢰성이 올라간다

    자체 컨벤션만 있을 때보다, Vercel 공식 가이드를 통합한 후 AI 에이전트의 판단이 더 정확해졌습니다.


    🔄 Skills 업데이트 전략

    Trigger-based Update

    각 Skill은 명확한 업데이트 트리거를 가집니다:

    agent-featureFrontend 컨벤션 변경, API 스펙 변경
    data-integrityIndexedDB 스키마 변경, Reconcile 정책 변경
    troubleshooting새로운 에러 패턴 발견, 해결 방법 추가
    code-quality컨벤션 변경, ESLint 규칙 추가
    vercel-react-best-practicesVercel agent-skills 저장소 업데이트
    webapp-testing테스트 전략 변경

    Versioning

    v1.0.0 (2025-12-15)
    - docs/reports/ 기반
    - agent-feature, webapp-testing 스킬
    
    v2.0.0 (2026-01-23) ← 현재
    - .claude/skills/ 마이그레이션
    - Vercel React Best Practices 통합
    - 계층 구조 도입 (SKILL.md + references/)
    - 6개 전문 스킬 체계화

    GitHub Watch

    Vercel agent-skills 저장소를 모니터링:

    # GitHub → Watch → Custom → Releases only
    # https://github.com/vercel-labs/agent-skills

    새 버전 릴리즈 시 references/react-performance.md 업데이트


    🚀 실전 적용 사례

    Case Study 1: 이미지 업로드 400 에러

    증상:

    POST /api/v1/chat/.../messages 400 (Bad Request)

    AI 에이전트 행동 (Before Skills):

    1. 전체 코드 읽기
    2. 추측으로 여러 가능성 제시
    3. 사용자에게 로그 요청
    4. 시행착오 반복

    AI 에이전트 행동 (After Skills):

    1. troubleshooting/SKILL.md 의사결정 트리 확인
    2. "이미지 업로드 400?" → references/image-upload-fix.md 참조
    3. Pydantic HttpUrl 검증 실패 패턴 매칭
    4. 즉시 해결: image_url: finalImageUrl || undefined

    근본 원인:

    // Backend (FastAPI Pydantic)
    class SendMessageRequest(BaseModel):
        image_url: Optional[HttpUrl] = None  # HttpUrl은 빈 문자열 거부
    
    // Frontend (Before)
    image_url: '',  // ❌ Pydantic 검증 실패
    
    // Frontend (After)
    image_url: finalImageUrl || undefined,  // ✅ undefined로 필드 제외

    Case Study 2: IndexedDB 스키마 계층화

    증상:

    • 멀티 유저 환경에서 메시지 충돌
    • chat_id 네이밍이 백엔드와 불일치

    AI 에이전트 행동 (Before Skills):

    1. IndexedDB 코드 전체 읽기
    2. 백엔드 스키마 추측
    3. 여러 번 수정 반복

    소요 시간: ~2시간
    AI 에이전트 행동 (After Skills):

    1. data-integrity/SKILL.md 참조
    2. references/indexeddb-schema.md v3 스키마 확인
    3. 백엔드 매핑 (users → conversations → messages) 확인
    4. Migration 로직 작성 (v2 → v3)

    소요 시간: ~20분
    결과:

    // Before (v2)
    {
      chat_id: '...',  // 불명확한 네이밍
      content: '...',
    }
    
    // After (v3)
    {
      user_id: 'user-123',      // users_accounts.id
      session_id: 'chat-456',   // chat_conversations.id
      content: '...',
      synced: 0,
      local_timestamp: Date.now(),
    }

    Case Study 3: Vercel 배포 실패

    증상:

    Vercel – eco2         fail    Deployment has failed
    Vercel – frontend     fail    Deployment has failed

    AI 에이전트 행동 (After Skills):

    1. troubleshooting/SKILL.md → "Vercel 배포 실패?"
    2. references/build-errors.md → TypeScript 컴파일 에러 섹션
    3. 로컬에서 npm run build 실행
    4. 5개 에러 패턴 매칭 및 수정:
      • deleteChat 인덱스 이름 (by-chatby-session)
      • Migration transaction 파라미터
      • 레거시 인덱스 타입 (as any 캐스팅)
      • ESLint no-this-alias (화살표 함수)
      • 미사용 파라미터 (_ prefix)
    5. 재배포 → ✅ 성공

    소요 시간: ~15분
    결과:

    # Before
    npm run build
    ❌ 5 errors
    
    # After
    npm run build
    ✅ 0 errors

    📖 참고 자료

    External Resources

    Vercel:

    Claude Code:

    Internal Resources

    Skills Structure:

    .claude/skills/
    ├── README.md                              # Skills 개요 및 사용 흐름
    ├── agent-feature/
    │   ├── SKILL.md
    │   └── references/
    │       ├── frontend-stack.md
    │       ├── api-spec.md
    │       ├── component-design.md
    │       └── existing-code-reference.md
    ├── data-integrity/
    │   ├── SKILL.md
    │   └── references/
    │       ├── indexeddb-schema.md            # 335줄
    │       ├── message-ordering.md            # 1,309줄
    │       └── optimistic-updates.md
    ├── troubleshooting/
    │   ├── SKILL.md
    │   └── references/
    │       ├── build-errors.md                # 300줄
    │       └── image-upload-fix.md            # 585줄
    ├── code-quality/
    │   ├── SKILL.md
    │   └── references/
    │       ├── conventions.md                 # 531줄
    │       └── agent-skills.md                # 955줄
    ├── vercel-react-best-practices/
    │   ├── SKILL.md
    │   └── references/
    │       └── react-performance.md           # 2,516줄!
    └── webapp-testing/
        └── SKILL.md

    총 문서량: ~7,000줄 (코드 예제 포함)


    Skills 체계가 가져온 변화

    1. 개발 속도 ↑

    • 문제 해결 시간: 평균 70% 감소
    • 같은 에러 재발: 거의 없음
    • AI 에이전트 컨텍스트 설명: 1/10 수준

    2. 코드 품질 ↑

    • Prettier/ESLint 100% 통과
    • Vercel 배포 실패율 0%
    • 일관된 컨벤션 준수

    3. 협업 효율성 ↑

    • AI 에이전트와 자연스러운 협업
    • 명확한 의사결정 트리
    • 외부 표준(Vercel) 통합

    4. 유지보수성 ↑

    • 명확한 계층 구조
    • Trigger-based 업데이트
    • 문서화된 지식 체계

    팀에게 전하고 싶은 것

    "AI 에이전트는 팀원이다"
    Claude Code와 함께 일하면서, AI 에이전트를 단순한 "도구"가 아닌 "지식 체계를 공유하는 팀원"으로 대하는 것이 핵심입니다.
    Skills는 그 지식 체계의 구조화된 형태입니다.
     
    "문서화는 미래의 나를 돕는다"
    Skills는 단순히 AI 에이전트뿐만 아니라 미래의 내가 참조할 지식 베이스입니다. 이후 같은 문제가 다시 발생해도 Skills를 보면 수월하게 해결할 수 있습니다.
     
    "표준을 따르되, 표준을 만들기도 하자"
    Vercel의 공식 가이드를 통합하면서도, 이코에코만의 컨텍스트(IndexedDB, SSE, Optimistic Updates)를 추가했습니다.


    Skills 개선에 참여하기

    1. 새 Skill 추가:

    mkdir -p .claude/skills/{skill-name}/references
    touch .claude/skills/{skill-name}/SKILL.md

    2. Reference 추가:

    touch .claude/skills/{skill-name}/references/{reference-name}.md

    3. Skill 업데이트:

    • SKILL.md의 의사결정 트리 갱신
    • References 링크 추가
    • README.md 업데이트

    4. 피드백:

    • GitHub Issues: 버그 리포트, 개선 제안
    • Pull Requests: 직접 기여
    • Discussions: 사용 사례 공유

    License & Attribution

    External Attributions:

    Internal Attribution:

    • EcoEco Frontend Team
    • Claude Opus 4.5 (AI Agent)

    Appendix: Skills 빠른 참조표

    빌드 에러troubleshootingbuild-errors.md
    이미지 업로드 실패troubleshootingimage-upload-fix.md
    IndexedDB 설계data-integrityindexeddb-schema.md
    메시지 순서data-integritymessage-ordering.md
    Waterfall 제거vercel-react-best-practices§1
    번들 크기vercel-react-best-practices§2
    컨벤션 검증code-qualityconventions.md
    Agent UI 구현agent-featurecomponent-design.md
    SSE 스트리밍agent-featureapi-spec.md
    Optimistic Updatedata-integrityoptimistic-updates.md
    Vercel AI SDKcode-qualityagent-skills.md
    React 성능vercel-react-best-practicesreact-performance.md

     

    댓글

ABOUT ME

🎓 부산대학교 정보컴퓨터공학과 학사: 2017.03 - 2023.08
☁️ Rakuten Symphony Jr. Cloud Engineer: 2024.12.09 - 2025.08.31
🏆 2025 AI 새싹톤 우수상 수상: 2025.10.30 - 2025.12.02
🌏 이코에코(Eco²) 백엔드/인프라 고도화 중: 2025.12 - Present

Designed by Mango