Skip to content

Conversation

@naringst
Copy link

@naringst naringst commented Oct 31, 2025

과제 체크포인트

필수 스펙

    1. 반복 유형 선택
    • 일정 생성 또는 수정 시 반복 유형을 선택할 수 있다.
    • 반복 유형은 다음과 같다: 매일, 매주, 매월, 매년
      • 31일에 매월을 선택한다면 → 매월 마지막이 아닌, 31일에만 생성하세요.
      • 윤년 29일에 매년을 선택한다면 → 29일에만 생성하세요!
    • 반복일정은 일정 겹침을 고려하지 않는다.
  1. 반복 일정 표시
    • 캘린더 뷰에서 반복 일정을 아이콘을 넣어 구분하여 표시한다.
  2. 반복 종료
    • 반복 종료 조건을 지정할 수 있다.
    • 옵션: 특정 날짜까지
      • 예제 특성상, 2025-12-31까지 최대 일자를 만들어 주세요.
  3. 반복 일정 수정
    1. ‘해당 일정만 수정하시겠어요?’ 라는 텍스트에서 ‘예’라고 누르는 경우 단일 수정
      • 반복일정을 수정하면 단일 일정으로 변경됩니다.
      • 반복일정 아이콘도 사라집니다.
    2. ‘해당 일정만 수정하시겠어요?’ 라는 텍스트에서 ‘아니오’라고 누르는 경우 전체 수정
      • 이 경우 반복 일정은 유지됩니다.
      • 반복일정 아이콘도 유지됩니다.
  4. 반복 일정 삭제
    1. ‘해당 일정만 삭제하시겠어요?’ 라는 텍스트에서 ‘예’라고 누르는 경우 단일 수정
      1. 해당 일정만 삭제합니다.
    2. ‘해당 일정만 삭제하시겠어요?’ 라는 텍스트에서 ‘아니오’라고 누르는 경우 전체 수정
      1. 반복 일정의 모든 일정을 삭제할 수 있다.

기본 과제

공통 제출

  • 테스트를 잘 작성할 수 있는 규칙 명세
  • 명세에 있는 기능을 구현하기 위한 테스트를 모두 작성하고 올바르게 구현했는지
  • 명세에 있는 기능을 모두 올바르게 구현하고 잘 동작하는지

기본 과제(Easy)

  • AI 코드를 잘 작성하기 위해 추가로 작성했던 지침
  • 커밋별 올바르게 단계에 대한 작업
  • AI 도구 활용을 개선하기 위해 노력한 점 PR에 작성

기본 과제(Hard)

  • Agent 구현 명세 문서 또는 코드
  • 커밋별 올바르게 단계에 대한 작업
  • 결과를 올바로 얻기위한 history 또는 log
  • AI 도구 활용을 개선하기 위해 노력한 점 PR에 작성

심화 과제

  • 모든 질문에 대해 꼼꼼하게 정리했는지

과제 셀프회고

기술적 성장

  • 학습 키워드 : agent, TDD
  • agent를 '어떻게' '왜' 사용하여 기능 개발을 해야 하는지 배웠습니다.
    • 어떻게? 학습 자료, BMAD-method 등을 활용해 md로 페르소나를 부여하고, 해야할일, 하지말아야 할일, 그리고 규칙들을 부여해 에이전트를 생성할 수 있었습니다.
    • 왜? 업무의 효율성을 높이기 위함입니다. 에이전트로 workflow를 한 번 잘 구성해 놓으면, 훨씬 효율적으로 기능 개발이 가능할 것 같습니다. 실제로 저는 실무에서 반복 기능을 개발한 경험이 있는데, agent와 일주일만에 개발을 해버려서 약간 허무하기도 했습니다....

코드 품질

[진행 과정]

  • 초기에는 역할 중심(BMAD의 PO, PM, SM 등)으로 에이전트를 분리했습니다.

  • 그러나 PM 역할을 부여한 에이전트가 임의로 기능 명세를 보완·추가하면서 전체 플로우가 어긋나는 문제가 발생했습니다.

  • 이를 해결하기 위해 “되묻기 규칙(Human-in-the-loop)”을 도입하여, 명확히 확인되지 않은 내용은 반드시 인간에게 되물어 정확한 스펙을 확보하도록 했습니다.

  • 하지만 이 과정에서 한 에이전트가 너무 많은 역할을 맡게 되면서 관리 복잡도가 증가했습니다.

  • 따라서 이후에는 “역할 기반 분리 → 도구 기반 분리”로 전환하였고, 각 에이전트를 입력(input)과 출력(output) 단위로 설계했습니다.

  • 그 결과, 최종적으로 11개의 에이전트가 명확한 인터페이스로 연결되는 구조가 완성되었습니다.

[최종 전체 설계]

  • 프로덕션에서 사용할 수 있는 정도의 agent를 만드는 것을 목표로 했습니다.
    • 작은 단위의 작업과 명확한 인풋, 아웃풋이 있어야 가장 좋은 결과물을 낼 수 있다고 생각했습니다.
    • 따라서 전체 workflow를 구성하는 에이전트들을 아래와 같이 나누어 작업했습니다.

폴더 구조)

.cursor/
├── commands/          # 역할별 에이전트 정의
├── outputs/           # 각 단계의 출력물 저장
│   ├── 2-splited-features/
│   ├── 3-integration-test-design/
│   └── 4-integration-to-unit/
└── checklists/        # 검증 체크리스트

에이전트 구성)

  1. split-by-number : 번호대로 기능을 나누는 에이전트
  2. feature-decomposer: 하나의 번호의 기능을 세분화하여 나누고, 명세를 구체화하는 에이전트
  3. test-designer: 통합 테스트를 디자인하는 에이전트
  4. integration-test-writer: 통합 테스트를 작성하는 에이전트
  5. integration-test-evaluator: 통합 테스트를 체크리스트 기반으로 평가하는 에이전트
  • 처음에는 test evaluator를 넣지 않았습니다. 그런데 진행을 하다 보니, 통합 테스트 작성 퀄리티가 매우 떨어진다는 것을 발견했고, 그래서 체크리스트와 evaluator를 도입하여 90점 이상인 통합 테스트의 경우만 사용할 수 있도록 했습니다.
  1. unit-candidate-finder: 통합 테스트와 기능 명세를 기반으로 단위테스트 요소를 찾는 에이전트
  2. unit-test-writer: 단위 테스트를 작성하는 에이전트
  3. developer: 테스트 기반으로 기능 개발하는 에이전트
  4. deubg-doctor: 기능 개발이나 테스트 코드에서 에러가 발생했을 때 고치는 에이전트
  • 해당 에이전트에게는 제가 사용하는 디버깅 절차를 주고, 그대로 수행하도록 했습니다. debug-doctor도 처음 설계 때에는 포함하지 않았던 에이전트인데, 디버깅을 꽤 많이 해야 해서 도입했습니다.
  1. refactor: 리팩토링 에이전트
  2. orchestator: 전체 총괄 에이전트

출력물 활용)
앞선 에이전트의 출력물을 뒷 에이전트가 참고하게 하기 위해서 코드 작성을 제외한 모든 에이전트의 output은 각각의 폴더에 저장하도록 했습니다.

checklist 활용)

  • 기능을 세부적으로 나눌 때의 output이 뒷 flow에 영향을 많이 미치기 떄문에, breakdown-checklist.md를 주고 해당 체크리스트를 만족하는 output을 내도록 했습니다.
  • 또한 테스트 디자인이나 테스트 코드 관련해서는 how-to-design-test.md(직접 작성), how-to-test.md(배휘동님 github 참고), kent-beck-test.md 를 참고하도록 했습니다.
  • 또한 integration, unit test 마다 체크리스트를 두고 해당 체크리스트를 만족하도록 진행했습니다.

학습 효과 분석

  • 추가 학습이 필요한 영역
  1. 같은 input에 대한 output 비교
    사실 과제를 수행할 때, 기능 1번에 대해 전체 과정을 돌려보면서 설계와 프롬프팅을 튜닝하고, 그 다음 2번을 진행한 뒤 오케스트레이터를 도입하는 과정으로 진행했습니다.(점진적 개선)
    하지만 그 과정에서 같은 인풋을 주고 프롬프팅에 따라 어떤 다른 아웃풋이 나오는지는 명확히 비교해보지 못해서, 해당 내용을 추가로 학습하고자 합니다.

  2. 통합 테스트에 대한 이해 부족
    가장 시간을 많이 썼던 부분이 통합 테스트 디버깅 과정입니다. 그런데 제가 통합 테스트에 대해 정확히 모르는 부분들이 있다보니 매뉴얼하게 디버깅 하는 시간이 꽤 걸렸습니다. 또한 통합 테스트에 대해 더 잘 알았더라면 프롬프팅을 더 구체적으로 할 수 있었을텐데 하는 아쉬움이 남습니다.

과제 피드백

리뷰 받고 싶은 내용

  • 저는 agent 들을 역할 중심이 아니라 도구 중심으로 나누었는데, 어떤 방식으로 진행하는지가 성능에 영향을 미치는지, 아니면 역할 중심으로 하더라도 그 역할을 정확히 맡게 하면 비슷한 ouput이 나오는지, 보통 어떻게 많이 구현하는지 궁금합니다.

- 종료 날짜 기능 App.tsx와 통합 완료
- useEventOperations에 검증 및 생성 로직 추가
- validateRepeatEndDate: 시작 날짜 이전 검증 (TC-3-2-1 통과)
- getRepeatEndDate: 기본값/최대값 처리
- generateRecurringEventsUntilEndDate: 종료까지 생성
- 통합 테스트 3/10 통과 (진행 중)
  - ✓ TC-3-1-1: UI 표시
  - ✓ TC-3-1-2: UI 숨김
  - ✓ TC-3-2-1: 검증 에러
  - ⚠️ 나머지 7개: date input 상호작용 이슈

orchestrator 워크플로우 Stage 1-7 완료 ✓
Stage 8은 추가 개선 필요
- Epic: 반복 일정 수정 관리
- Stories: 3개
  - Story-4-1: 단일 반복 일정 수정 (3 flows)
  - Story-4-2: 전체 반복 일정 수정 (3 flows)
  - Story-4-3: 수정 확인 다이얼로그 표시 (4 flows)
- Flows: 10개 (Normal: 10, Exception: 0)
- 핵심: 단일/전체 수정 분기, 반복 속성 관리, 다이얼로그 UI
- 총 10개 테스트 케이스 설계
- Story 1: 단일 반복 일정 수정 (3 TCs)
- Story 2: 전체 반복 일정 수정 (3 TCs)
- Story 3: 수정 확인 다이얼로그 표시 (4 TCs)
- Mock 데이터 및 검증 기준 정의
- 엣지 케이스: 반복 그룹 식별, API 호출 최적화
- 10개 통합 테스트 케이스 구현 완료
- Story 1: 단일 반복 일정 수정 (3 TCs)
- Story 2: 전체 반복 일정 수정 (3 TCs)
- Story 3: 수정 확인 다이얼로그 표시 (4 TCs)
- MSW를 사용한 API 모킹 설정
- 테스트는 Red 상태 (기능 미구현, TDD 예상 동작)
- Stage 4-8에서 유닛 테스트 및 구현 진행 예정
- 2개 유닛 테스트 후보 식별
- findRepeatGroup: 반복 그룹 식별 (7 TCs)
- applyEventUpdate: 단일/전체 수정 적용 (7 TCs)
- 총 14개 유닛 테스트 케이스 예상
- isRepeatingEvent는 Feature 2에서 이미 구현되어 제외
- 2개 함수에 대한 상세 테스트 설계 완료
- findRepeatGroup: 반복 그룹 식별 (7 TCs)
- applyEventUpdate: 단일/전체 수정 적용 (7 TCs)
- 총 14개 유닛 테스트 케이스 설계
- 엣지 케이스, 경계값, 검증 기준 모두 정의
- 2개 유닛 테스트 파일 작성 완료
- repeatGroupUtils.spec.ts: 반복 그룹 식별 (7 TCs)
- eventUpdateUtils.spec.ts: 단일/전체 수정 적용 (7 TCs)
- 총 14개 유닛 테스트 케이스 구현
- Linter 에러 없음
- 함수는 Stage 7에서 TDD로 구현 예정
- 2개 유틸리티 함수 구현 완료 (TDD)
- findRepeatGroup: 반복 그룹 식별 로직
  - 제목, 시간, 반복유형/간격으로 그룹 판별
  - 일반 일정(repeat.type='none')은 그룹 미포함
- applyEventUpdate: 단일/전체 수정 적용 로직
  - mode='single': repeat.type='none'으로 변경
  - mode='all': repeat.type 유지
- 14/14 유닛 테스트 모두 통과 ✓
- Linter 에러 없음
- 사용자 포맷팅 수정 반영
- Stage 8 (Integration TDD)는 추후 구현 예정

Orchestrator Workflow Summary:
✅ Stage 1: Feature Breakdown
✅ Stage 2: Integration Test Design
✅ Stage 3: Integration Test Implementation (Red)
✅ Stage 4: Unit Test Candidate Identification
✅ Stage 5: Unit Test Design
✅ Stage 6: Unit Test Implementation
✅ Stage 7: Unit TDD (14/14 tests passed ✓)
⏸️ Stage 8: Integration TDD (대기)
- Epic: 반복 일정 삭제 관리
- Stories: 3개 (삭제 모드 선택, 단일 삭제, 전체 삭제)
- Flows: 8개
  - Story 1: 삭제 모드 선택 (2 flows)
  - Story 2: 단일 일정 삭제 (3 flows)
  - Story 3: 전체 반복 일정 삭제 (3 flows)
- Validation: Epic/Story/Flow 구조 ✓
- 테스트 목적: 반복 일정 단일/전체 삭제 검증
- 테스트 범위: 다이얼로그, 단일 삭제, 전체 삭제
- 테스트 시나리오: 8개 TC
  - Story 1: 삭제 모드 선택 (2 TCs)
  - Story 2: 단일 일정 삭제 (3 TCs)
  - Story 3: 전체 반복 일정 삭제 (3 TCs)
- Mock 데이터 및 검증 포인트 정의 완료
- Validation: 모든 Flow에 대응하는 TC 존재 ✓
- 8개 통합 테스트 케이스 구현
  - Story 1: 삭제 모드 선택 (2 TCs)
  - Story 2: 단일 일정 삭제 (3 TCs)
  - Story 3: 전체 반복 일정 삭제 (3 TCs)
- MSW를 사용한 API 모킹
- findDeleteButton 헬퍼 함수로 삭제 버튼 탐색
- AAA 패턴 적용 (Arrange-Act-Assert)
- 현재 상태: Red (다이얼로그 미구현)
- Linter 에러: 없음
- Validation: 모든 TC 구현 ✓
- App.tsx: 반복 일정 수정 다이얼로그 추가
  - isEditModeDialogOpen 상태 관리
  - handleEditEvent: 반복 일정 시 다이얼로그 표시
  - handleEditModeSelection: 단일/전체 수정 모드 선택
  - Dialog UI: '해당 일정만 수정하시겠어요?' + 예/아니오 버튼
  - Edit/Delete 버튼 aria-label 한글화 (수정/삭제)

- useEventOperations.ts: editMode 처리 로직 추가
  - saveEvent에 editMode, allEvents 파라미터 추가
  - findRepeatGroup, applyEventUpdate 통합
  - 단일 수정: PUT 1번, repeat.type='none'
  - 전체 수정: PUT N번, repeat.type 유지

- feature4-integration.spec.tsx: 테스트 수정
  - findEditButton 헬퍼 함수 추가
  - 저장 버튼 텍스트 수정 (일정 추가|수정)
  - waitFor 추가 (다이얼로그 닫힘 대기)

- feature5-integration.spec.tsx: aria-label 수정 (Delete event → 삭제)

현재 상태:
✅ 4/10 tests passing
❌ 6/10 tests failing (데이터 검증 관련)
- TC-4-1-1, TC-4-1-3, TC-4-2-1, TC-4-2-3: API 호출 검증 실패
- TC-4-3-2, TC-4-3-3: 다이얼로그 닫힘 검증 실패

다음 단계: 실패 테스트 디버깅 및 수정 필요
- Add dialog to choose between single/all event modification
- Implement editMode state management (single/all)
- Integrate findRepeatGroup and applyEventUpdate in useEventOperations
- Update integration tests with timeout and dialog handling
- Fix linter errors and TypeScript type issues

Status: 6/10 integration tests passing
Remaining issues:
- TC-4-1-1, TC-4-1-3, TC-4-2-1, TC-4-2-3 fail due to time validation errors
- Need to debug saveEvent execution flow and form state management
- useEventOperations: 전체 수정 모드에서 repeat.endDate 반영
- eventUpdateUtils: applyEventUpdate에서 endDate 업데이트 처리
- 전체 수정 시 그룹 전체 일정의 종료 날짜가 일괄 업데이트됨
- 초기 이벤트를 빈 배열로 설정하여 겹침 방지
- 종료 날짜 입력 방식 개선 (clear → type)
- 겹침 다이얼로그 처리 로직 추가
- 스낵바 검증을 선택적으로 변경 (API 응답 우선 검증)
- 반복 유형 필드 표시 대기 추가
- 테스트 타임아웃 증가 (15초)
- TC-3-1-4: 12월 데이터 검증을 API 페이로드로 확인
- medium.integration.spec.tsx: Edit event → 수정
- medium.integration.spec.tsx: Delete event → 삭제
- App.tsx: 반복 일정 삭제 시 전체 삭제 로직 개선
- feature4-integration.spec.tsx: 수정 다이얼로그 처리 안정화
- feature5-integration.spec.tsx: 삭제 다이얼로그 처리 안정화
- server.js: /api/events 에러 처리 추가 (빈 배열 반환)
- realEvents.json: 테스트용 데이터 업데이트
@naringst naringst self-assigned this Oct 31, 2025
…n\n- tests: remove stray spaces and trailing blank lines\n- utils: normalize comments/spacing; no logic changes\n- hooks: wrap checkUpcomingEvents in useCallback and fix deps\n- ensure Prettier check passes and pnpm lint succeeds
- Add integration-to-unit analysis for feature5
- Conclusion: unit test design not needed (UI/API logic only)
- Reuses findRepeatGroup from feature4 (already tested)
- Integration tests sufficient (8 test cases cover all scenarios)
- Add personal reasons for choosing Cursor (familiar from work)
- Document BMAD-method research and adoption process
- Add insights about AI-based development vs traditional approach
- Include evaluation method details with checklist-based scoring
- Add practical experience about scope management (narrow vs wide)
- Document real-world application possibilities
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant