-
Notifications
You must be signed in to change notification settings - Fork 52
[2팀 정나리] Chapter 1-2. AI와 테스트를 활용한 안정적인 기능 개발 #62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
naringst
wants to merge
69
commits into
hanghae-plus:main
Choose a base branch
from
naringst:main
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- 종료 날짜 기능 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: 테스트용 데이터 업데이트
…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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
과제 체크포인트
필수 스펙
기본 과제
공통 제출
기본 과제(Easy)
기본 과제(Hard)
심화 과제
과제 셀프회고
기술적 성장
코드 품질
[진행 과정]
초기에는 역할 중심(BMAD의 PO, PM, SM 등)으로 에이전트를 분리했습니다.
그러나 PM 역할을 부여한 에이전트가 임의로 기능 명세를 보완·추가하면서 전체 플로우가 어긋나는 문제가 발생했습니다.
이를 해결하기 위해 “되묻기 규칙(Human-in-the-loop)”을 도입하여, 명확히 확인되지 않은 내용은 반드시 인간에게 되물어 정확한 스펙을 확보하도록 했습니다.
하지만 이 과정에서 한 에이전트가 너무 많은 역할을 맡게 되면서 관리 복잡도가 증가했습니다.
따라서 이후에는 “역할 기반 분리 → 도구 기반 분리”로 전환하였고, 각 에이전트를 입력(input)과 출력(output) 단위로 설계했습니다.
그 결과, 최종적으로 11개의 에이전트가 명확한 인터페이스로 연결되는 구조가 완성되었습니다.
[최종 전체 설계]
폴더 구조)
에이전트 구성)
출력물 활용)
앞선 에이전트의 출력물을 뒷 에이전트가 참고하게 하기 위해서 코드 작성을 제외한 모든 에이전트의 output은 각각의 폴더에 저장하도록 했습니다.
checklist 활용)
학습 효과 분석
같은 input에 대한 output 비교
사실 과제를 수행할 때, 기능 1번에 대해 전체 과정을 돌려보면서 설계와 프롬프팅을 튜닝하고, 그 다음 2번을 진행한 뒤 오케스트레이터를 도입하는 과정으로 진행했습니다.(점진적 개선)
하지만 그 과정에서 같은 인풋을 주고 프롬프팅에 따라 어떤 다른 아웃풋이 나오는지는 명확히 비교해보지 못해서, 해당 내용을 추가로 학습하고자 합니다.
통합 테스트에 대한 이해 부족
가장 시간을 많이 썼던 부분이 통합 테스트 디버깅 과정입니다. 그런데 제가 통합 테스트에 대해 정확히 모르는 부분들이 있다보니 매뉴얼하게 디버깅 하는 시간이 꽤 걸렸습니다. 또한 통합 테스트에 대해 더 잘 알았더라면 프롬프팅을 더 구체적으로 할 수 있었을텐데 하는 아쉬움이 남습니다.
과제 피드백
리뷰 받고 싶은 내용