-
Notifications
You must be signed in to change notification settings - Fork 53
[1팀 천진아] Chapter 1-2. AI와 테스트를 활용한 안정적인 기능 개발 #80
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
totter15
wants to merge
51
commits into
hanghae-plus:main
Choose a base branch
from
totter15: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
테스트 설계자가 테스트 케이스 상세까지 설계하도록함 test-plan-checklist.md를 충족하는지 확인
테스트 코드 작성후 이슈내용 업데이트 테스트 코드 작성후 테스트 코드 체크리스트로 검토하게 함 + issue 결과물
Author
…nt icon and update issue logs feat(recurring-icon): show repeat icon with a11y in week/month calendar views refactor(recurring-icon): extract RepeatA11yIcon to remove duplication and improve readability fix: commit 하기전 무조건 허락 받기 추가 docs: require explicit approval before commits; mark recurring icon issue as complete with final logs fix: test-designer checklist 파일 잘못기입된것 수정 fix: issue template 수정 test(issue-004): add RED integration tests for recurrence UI and rules - Added integration tests: - src/__tests__/integration/recurrence-type-ui.integration.spec.tsx (TC-01) - src/__tests__/integration/recurrence-generation.integration.spec.tsx (TC-02~TC-06) - Updated issue: .cursor/issues/issue-004-recurrence-type-selection.md to reflect RED stage and outputs No implementation yet (expected failures). feat(issue-004): enable recurrence UI and expand recurring events - App: enable repeat type/interval/end-date fields when checked - Utils: expand events across view window for daily/weekly/monthly/yearly - Rules: strict monthly (31일 only), yearly leap day (2/29 only) Implements GREEN for issue-004. test(issue-004): stabilize MUI recurrence tests (UI + generation) - UI: await label queries for MUI fields after enabling repeat - Generation: adjust daily case across week navigation Ref: MUI testing patterns per article https://jskim1991.medium.com/react-dont-give-up-on-testing-when-using-material-ui-with-react-ff737969eec7 refactor(issue-004): extract recurrence helpers and delegate expansion - Added utils/recurrence.ts with generateOccurrencesForEvent, expandEventsWithinWindow - Updated utils/eventUtils.ts to use helpers and remove inline duplication - No behavior change; tests remain green fix(issue-004): prevent MUI Select out-of-range and default repeat state\n\n- App: map 'none' to '' for Select value; set default to 'daily' when enabling repeat\n- useEventForm: robust isRepeating initialization for missing initialEvent\n- recurrence: remove unused import (lint)\n\nNo UI/behavior change beyond preventing warnings; tests remain green. docs(issue-004): mark issue complete and summarize RED→GREEN→REFACTOR commits fix: 코드 작성시 MUI 오류 관련 정보 추가 test(issue-005): add RED tests for repeat end until date (cap 2025-12-31)\n\n- UI: show end-date field when repeat enabled (assert)\n- Cap: events beyond 2025-12-31 should not render (RED)\n- Issue updated with outputs and status to 테스트 코드 작성\n feat(issue-005): enforce repeat end-date cap at 2025-12-31 (inclusive)\n\n- recurrence: clamp repeat end to 2025-12-31; keep inclusive generation\n- issue: update Implementation log and Summary to 코드 작성(GREEN)\n refactor(issue-005): extract end-date cap logic and constant\n\n- recurrence: introduce CAP_END_DATE and getCappedEndDate for clarity\n- issue: update Refactoring log and Summary to 리팩토링\n docs(issue-005): mark issue complete and summarize commits test(issue-006): add RED tests for recurring edit (single vs series) - UI: confirmation dialog and choices (예/아니오) - Single edit: convert to single event, remove repeat icon (RED) - Series edit: apply to all in series, keep repeat icon (RED) - Issue updated to 테스트 코드 작성 with outputs feat(issue-006): add confirm dialog for recurring edits and icon behavior\n\n- App: show '해당 일정만 수정하시겠어요?' dialog on editing recurring event\n- Yes: treat selected series as single locally (icon removed)\n- No: keep series (icon retained)\n- Issue: update Implementation and Summary to 코드 작성(GREEN)\n fix(issue-006): guard event id in list dedupe and stabilize search tests\n\n- App: safe-id handling in listEvents useMemo to avoid split on non-string\n- Keep hook order stable and ensure event-list is present for search tests\n refactor(issue-006): extract listEvents helper and clean imports\n\n- utils: add getListEvents to dedupe series in event list\n- App: use helper via useMemo; fix import order\n- Issue: update refactoring log\n docs(issue-006): mark issue complete and summarize commits test(issue-007): RED→GREEN for recurring delete with dialog and series API\n\n- tests: add integration for single vs series delete\n- App: add delete dialog/state and single-occurrence hiding\n- hooks: add deleteRecurringSeries API call\n- mocks: support DELETE /api/recurring-events/:id\n refactor(issue-007): extract baseId/occurrence key helpers and apply in App\n\n- utils: add getBaseId/getOccurrenceKeyFromParts\n- App: replace raw split logic and keep behavior\n- Issue: log refactor updates\n style(app): inline RepeatA11yIcon conditional rendering in calendar cells chore(tests,utils): commit missing files (eventId, eventList, recurring-delete tests) docs(issue-007): mark process complete and summarize commits
main에서 작성된 에이전트 파일들 추가
- TC-01: 반복 유형 선택 UI 노출 및 상호작용 테스트 (Integration) - TC-02: useEventForm 반복 유형 상태 관리 테스트 (Hook) - TC-05: 반복일정 겹침 검사 제외 테스트 (Integration) 테스트 파일: - src/__tests__/medium.integration.spec.tsx (TC-01, TC-05 추가) - src/__tests__/hooks/medium.useEventForm.spec.ts (신규) 이슈: issue-001-반복-유형-선택.md
- 반복 유형 선택 UI 활성화 (매일/매주/매월/매년) - 겹침 검사에서 반복일정 예외 처리 추가 - useEventForm isRepeating 초기 상태 버그 수정 변경 파일: - src/App.tsx: 반복 유형 UI 활성화, 겹침 검사 예외 처리 - src/hooks/useEventForm.ts: isRepeating 초기 상태 수정 테스트: - TC-01: 통과 ✓ - TC-02: 통과 ✓ (6개 테스트) - TC-05: 통과 ✓ 이슈: issue-001-반복-유형-선택.md
- 반복 유형 옵션을 상수로 추출하여 중복 제거 - 가드 절 적용으로 조건문 단순화 및 가독성 향상 - saveEvent + resetForm 호출 중복 제거 변경 파일: - src/App.tsx: repeatTypeOptions 상수 추출, early return 패턴 적용 테스트: - TC-01: 통과 ✓ - TC-02: 통과 ✓ - TC-05: 통과 ✓ 이슈: issue-001-반복-유형-선택.md
- 전체 TDD 사이클(Red → Green → Refactor) 완료 - 상태를 '완료'로 변경 - 최종 산출물 및 커밋 요약 업데이트 이슈: issue-001-반복-유형-선택.md
- 테스트 파일에서 미사용 import 및 변수 제거 - RepeatType import 제거 - rerender 변수 제거 - App.tsx에서 setRepeatInterval, setRepeatEndDate 주석 해제 변경 파일: - src/__tests__/hooks/medium.useEventForm.spec.ts - src/App.tsx 이슈: issue-001-반복-유형-선택.md
- 테스트 코드 작성 후 사용자 검토 및 커밋 승인 절차 추가 - 구현 코드 작성 후 테스트 실행 및 통과 확인 필수화 - 모든 커밋 전 lint 오류 확인 및 해결 필수 절차 추가 - 종료 단계에서 이슈 문서 커밋 절차 추가 변경 파일: - .cursor/agents/orchastration.md: 각 단계별 lint 확인 및 커밋 절차 강화 - .cursor/agents/test-code-developer.md: 커밋 전 lint 확인 필수화 - .cursor/agents/implementaion-developer.md: 테스트 실행 및 lint 확인 필수화 - .cursor/agents/refactoring-developer.md: 커밋 전 lint 확인 필수화 - .cursor/checklists/implementation-checklist.md
- TC-01: 월 뷰에서 반복 일정 아이콘 표시 확인 - TC-02: 주 뷰에서 반복 일정 아이콘 표시 확인 - TC-03: 반복 일정이 아닌 일정에는 아이콘 미표시 확인 - TC-04: 반복 아이콘과 알림 아이콘 동시 표시 확인 추가 사항: - 반복 일정 생성 헬퍼 함수 saveRepeatingSchedule 추가 - 테스트 실행 결과: TC-01, TC-02, TC-04 실패 (반복 아이콘 미구현), TC-03 통과 이슈: issue-002-반복-일정-표시.md
- 월 뷰와 주 뷰에서 반복 일정인 경우 반복 아이콘 표시 - 반복 일정이 아닌 일정에는 아이콘 미표시 - 반복 아이콘과 알림 아이콘이 함께 표시 가능 - 접근성 속성 추가: aria-label="반복 일정" 구현 내용: - Material UI Repeat 아이콘 import 추가 - renderMonthView와 renderWeekView에 반복 아이콘 조건부 렌더링 추가 - 알림 설정 Select에 aria-label 추가 테스트 결과: - TC-01 ~ TC-04 모두 통과 (20개 테스트 전체 통과) 변경 파일: - src/App.tsx - src/__tests__/medium.integration.spec.tsx (알림 설정 라벨 수정) - .cursor/issues/issue-002-반복-일정-표시.md 이슈: issue-002-반복-일정-표시.md
- 월 뷰와 주 뷰에서 중복된 이벤트 아이템 렌더링 로직을 renderEventItem 헬퍼 함수로 추출 - DRY 원칙 준수 및 가독성 향상 - 동작은 동일하게 유지 (Behavior Preserving) 리팩토링 내용: - renderEventItem(event, isNotified, isRepeating) 함수 생성 - renderWeekView와 renderMonthView에서 중복 코드 제거 테스트 결과: - TC-01 ~ TC-04 모두 통과 (20개 테스트 전체 통과) 변경 파일: - src/App.tsx - .cursor/issues/issue-002-반복-일정-표시.md 이슈: issue-002-반복-일정-표시.md
- TDD 사이클 완료 (Red → Green → Refactor) - 모든 테스트 통과 (TC-01 ~ TC-04, 20개 테스트 전체 통과) - 최종 상태: 완료 변경 사항: - 반복 일정 아이콘 표시 기능 구현 완료 - renderEventItem 헬퍼 함수 추출로 중복 코드 제거 - 요약 섹션 최종 업데이트 이슈: issue-002-반복-일정-표시.md
- TC-01: 반복 종료일 입력 필드 노출 확인 - TC-02: 반복 종료일 입력 및 상태 저장 확인 - TC-03: 반복 종료일이 저장되는지 확인 - TC-04: 반복 유형 미선택 시 종료일 필드 미표시 확인 테스트 실행 결과: 3개 실패, 1개 통과 (TC-04) 실패 원인: 반복 종료일 필드가 반복 유형이 선택된 경우에만 표시되어야 하나 현재는 isRepeating만 체크하고 있음
- TC-01 ~ TC-05: Unit 테스트 (매일/매주/매월/매년 반복 일정 생성, 종료일 경계 검증) - TC-06: Integration 테스트 (반복 일정 생성 통합 플로우) 테스트 실행 결과: 6개 모두 실패 (generateRecurringEvents 함수 및 반복 일정 생성 로직 미구현)
- generateRecurringEvents 유틸 함수 구현 (매일/매주/매월/매년 반복 일정 생성) - useEventOperations에 반복 일정 생성 로직 추가 (/api/events-list 엔드포인트 사용) - setupMockHandlerCreation에 /api/events-list 핸들러 추가 - TC-03 테스트 수정 (반복 일정이 여러 개 생성되는 경우 처리) 모든 테스트 통과 (137개)
- useEventOperations.saveEvent: 중복된 /api/events POST 호출 제거 - createSingleEvent, createRecurringEvents 헬퍼 함수 추출로 가독성 개선 - generateRecurringEvents: 날짜 계산 로직을 calculateNextRecurrenceDate로 분리 - import 정리 (eventUtils.ts) 모든 테스트 통과 (137개)
- TDD 사이클 완료 (Red → Green → Refactor) - 모든 테스트 통과 (137개) - 기능 요구사항 충족 확인
- 반복 일정 생성, 수정, 삭제 기능 구현 - 반복 일정 확장 로직 추가 (daily, weekly, monthly, yearly) - 반복 일정 수정/삭제 시 단일/전체 선택 다이얼로그 구현 - 반복 일정 아이콘 표시 (title 속성 포함) - 반복 종료일 설정 기능 - MUI Select 경고 해결 (repeatType 관리 개선) - 일정 검색 기능 개선 (원본 이벤트와 확장 이벤트 분리) - 테스트 코드 수정으로 모든 테스트 통과 Test Results: ✅ 137 passed / 0 failed (100%)
- TC-01: 반복 일정 수정 시 다이얼로그 표시 확인 - TC-02: '예' 선택 시 단일 일정으로 수정 - TC-03: '예' 선택 후 반복 아이콘 제거 확인 - TC-04: '아니오' 선택 시 전체 시리즈 수정 - TC-05: '아니오' 선택 후 반복 아이콘 유지 확인 - TC-06: 단일 일정 수정 시 다이얼로그 미표시 확인 Issue: issue-005-반복-일정-수정.md
- 좌측 이벤트 리스트에 반복 아이콘(Repeat) 노출 - 접근성 라벨/타이틀 부여: aria-label="반복 일정" - TC-03/TC-05 Green 달성 Issue: issue-005-반복-일정-수정.md
- 반복 아이콘 렌더링 공통화(월/주 뷰, event-list) - 접근성 속성 유지(aria-label/title) - 테스트 Green 유지(31) Issue: issue-005-반복-일정-수정.md
- Summary 상태를 완료로 갱신 - 최종 산출물 및 테스트/구현/리팩토링 요약 반영
- TC-01: 삭제 다이얼로그 표시 확인 - TC-02: '예' 선택 시 단일 인스턴스 삭제 (DELETE /api/events/:id) - TC-03: '아니오' 선택 시 전체 시리즈 삭제 (DELETE /api/recurring-events/:baseId) - TC-04: 단일 일정 삭제 시 다이얼로그 미표시 및 즉시 삭제 Issue: issue-006-반복-일정-삭제.md
- '예' → deleteEvent(id), '아니오' → deleteRecurringSeries(baseId ?? id) - pendingDeleteEvent로 상태 통합, 다이얼로그 상태 정리 - 전체 테스트 Green(35) Issue: issue-006-반복-일정-삭제.md
- resolveRecurringSeriesId(event) 도입으로 분기 단순화 - handleDeleteAllOccurrences 가독성 향상 - 모든 테스트 Green 유지(35) Issue: issue-006-반복-일정-삭제.md
- Summary 상태 완료로 갱신 - TDD 사이클 및 변경사항 요약 반영
- 여러 Delete event 버튼 중 첫 번째를 선택하도록 수정 - 테스트 안정성 개선
- generateRecurringEvents: 각 인스턴스의 endDate를 자기 날짜로 설정 - expandEventsWithinWindow: endDate === event.date인 경우 확장 생략 - 달력 뷰에서 반복 일정이 정상 표시되며 중복 방지 - 모든 테스트 통과(35/35)
- generateRecurringEvents: repeat.id(baseId) 추가로 같은 시리즈 연결 - server.js: 클라이언트 repeat.id 유지하도록 수정 - App.tsx: isEditingWholeSeries 플래그로 전체 수정 분기 - useEventOperations: updateRecurringSeries 추가 - recurrence.ts: baseId 있으면 확장 생략 - 수정 시 '아니요': updateRecurringSeries로 전체 시리즈 업데이트 - 삭제 시 '아니요': deleteRecurringSeries로 전체 시리즈 삭제 - 달력에서 반복 인스턴스 정상 표시 및 중복 방지 - 모든 테스트 통과(147/147)
- App.tsx: resolveRecurringSeriesId 타입 명시 - eventUtils.ts: repeat.id 타입 단언 개선 - medium.integration.spec.tsx: 모든 any 타입을 명시적 타입으로 교체 - useNotifications.ts: exhaustive-deps 경고 억제 - 모든 ESLint 규칙 통과
- calculateNextRecurrenceDate에 startDay 파라미터 추가 - 매월 반복 시 원본 날짜가 없는 달은 건너뜀 - 예: 1/31 시작 → 1/31, 3/31, 5/31만 생성 (2/4/6월 제외) - 모든 테스트 통과(147/147)
- calculateNextRecurrenceDate에 startMonth 파라미터 추가 - 매년 반복 시 원본 월/일 유지 (1일 설정 → 연도 변경 → 원본 월/일 복원) - 윤년 2/29 시작 → 윤년(2024, 2028)에만 2/29 생성, 평년 건너뜀 - 모든 테스트 통과(147/147)
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.
과제 체크포인트
필수 스펙
기본 과제
공통 제출
기본 과제(Hard)
에이전트들
이렇게 총 6개의 에이전트를 개발했습니다.
위는 제가 orchastration 에이전트를 만들때 AI에게 워크플로우에 대해 지시한 부분입니다.
심화 과제
AI와 테스트를 활용한 안정적인 기능 개발 리포트
사용하는 도구를 선택한 이유가 있을까요? 각 도구의 특징에 대해 조사해본적이 있나요?
작업 도구로는 Cursor와 ChatGPT를 사용했습니다. CLI 기반 도구보다 접근성이 높고, 실제 코드 작성 환경과의 통합이 용이하다는 점에서 Cursor를 선택했습니다.
ChatGPT는 프롬프트 설계와 학습에 활용했습니다. 대화를 통해 효과적인 지시문을 구성하는 방법을 익히고, 제가 작성한 프롬프트의 품질을 평가받는 데 도움을 받았습니다.
코드 작성 측면에서는 Claude가 가장 많이 추천을 받았는데, 실제로 Cursor 내에서 Sonnet 모델을 사용했을 때,
전체적인 문맥을 이해하고 일관된 솔루션을 제시하는 능력이 뛰어나다는 인상을 받았습니다.
테스트를 기반으로 하는 AI를 통한 기능 개발과 없을 때의 기능개발은 차이가 있었나요?
일단 AI를 통한 개발을 할 경우 개발 속도에서는 확실히 빨라짐을 느꼈습니다. 개발 효율이 높아졌지만 그만큼 정확도에 대해서는 사용자가 과정 중간중간에 제대로 확인하지 않으면 떨어지게 되는 경우가 발생하는 것 같습니다.
AI의 응답을 개선하기 위해 추가했던 여러 정보(context)는 무엇인가요?
각 에이전트의 역할과 페르소나를 프롬프트 상단에 명시하여, AI가 수행해야 할 책임과 관점을 명확히 구분했습니다.
프로젝트의 전반적인 PRD와 아키텍처 구조를 사전에 제공해 모든 에이전트가 동일한 맥락에서 프로젝트를 이해하도록 했습니다. 또한 일관된 코드 품질을 유지하기 위해, 현재 프로젝트의 코드 스타일과 테스트 코드 작성 기준을 문서화하여 코드 작성 시 이를 반드시 참고하도록 지시했습니다. 이때 리팩토링 원칙과 클린 코드 개념도 함께 반영했습니다.
워크플로우 측면에서는, 요구사항이 들어오면 PM 에이전트가 Issue 문서를 생성하고 다른 에이전트들이 이를 기반으로 다음 단계를 수행하도록 설계했습니다. Issue의 일관성을 위해 Issue Template을 활용했으며, 커밋 단계에서는 Commit Template을 적용해 프로젝트 전반에 걸쳐 일관된 관리 체계를 유지했습니다.
이 context를 잘 활용하게 하기 위해 했던 노력이 있나요?
각 에이전트는 작업 시작 시 체크리스트를 참고하고, 작업 완료 후에는 동일한 체크리스트를 기준으로 결과물을 검증하도록 했습니다. 이를 통해 수행 과정과 산출물 평가 기준을 일치시켰습니다.
또한 하나의 Issue 파일을 모든 에이전트가 공유하도록 구성해, 각 에이전트가 개발해야 하는 기능의 맥락과 상호 의존성을 명확히 이해할 수 있게 했습니다.
생성된 여러 결과는 만족스러웠나요? AI의 응답을 어떤 기준을 갖고 '평가(evaluation)'했나요?
기준점을 잡는게 어려웠는데 일단 각 단계의 체크리스트가 제대로 이행되었는지를 1차로 요약해서 확인을 받았고, 2차로는 사람이 제대로 작성되었는지를 확인하면서 평가를 진행했습니다.
pm에이전트가 작업후 요약내용 제출
테스트 설계 에이전트가 작업후 요약내용 제출
테스트 코드 작성 에이전트가 작업후 요약내용 제출
코드 작성 에이전트가 작업후 요약내용 제출
리팩토링 에이전트가 작업후 요약내용 제출
AI에게 어떻게 질문하는것이 더 나은 결과를 얻을 수 있었나요? 시도했던 여러 경험을 알려주세요.
페르소나를 통해 범위를 좁히고 질문을 했을때 좀더 원하는 결과를 얻었던 것 같습니다.
이번 프롬프트를 작성하면서 GPT에게 의견을 얻기위해서 AI프롬프트 설계를 과제로 내준 교수를 페르소나로 설정해서 제가 만든 프로세스나 프롬프트에 대해 질문을 하면서 과제를 진행했습니다. 최대한 자세한 설명을 줄수록 명확한 답을 얻을 수 있었던 것 같습니다.
AI에게 지시하는 작업의 범위를 어떻게 잡았나요? 범위를 좁게, 넓게 해보고 결과를 적어주세요. 그리고 내가 생각하는 적절한 단위를 말해보세요.
큰 단위의 결과물을 한 번에 요청해 정리하는 것보다,
작은 단위를 만들고 점진적으로 개선하는 방식이 더 효과적이었습니다.
초기에는 프롬프트 설계에 익숙하지 않아, BMAD-METHOD 링크를 직접 전달하고 “이 방법을 참고해 PM을 만들어 달라”고만 요청했습니다. 그 결과, AI는 BMAD-METHOD 기반의 대형 프로젝트용 구조를 생성했고, template 파일은 약 800줄, agent 파일은 약 400줄에 달하는 수준으로 만들어졌습니다.
나는 prd생성및 이슈를 관리하는 pm을 만들고 있어. 이 에이전트의 역할은 전반적인 레포지토리를 분석하고 prd 생성 및 개발자를 위한 이슈를 관리하는 역할이야. @https://github.com/bmad-code-org/BMAD-METHOD 를 참고해해줘. 이 pm 에이전트를 보완해줘.
// AI 결과물
## ✅ 완료 요약
gpt에게 물어보니 저희 프로젝트에 비해 너무 오버스펙의 기능이라고 해서 다음엔 우리 프로젝트의 스펙을 알려주고 좀 더 라이트하게 변경하는걸 요청했습니다.
지금 우리 프로젝트는 기본적인 CRUD프로젝트인데 pm의 역할이 너무 오버스펙인것 같아.
// AI 결과물
맞아요. 그래서 PM 에이전트를 과하지 않게 쓰도록 Lite 모드를 기본값으로 추가했고, CRUD에 최적화된 얇은 템플릿과 체크리스트를 넣었습니다.
그랬더니 기본 모드에 라이트 모드를 추가해 줬습니다...
라이트 모드를 따로 두지 말고 지금 스펙 전체를 라이트하게 바꿔줘.
// AI 결과물
좋아요. 별도의 라이트 모드 없이 전체 스펙 시스템을 경량화했습니다.
이렇게 이전 버전에서 라이트하게 수정했음에도 여전히 불필요한 기능이 많다고 느꼈습니다.
그래서 프로젝트의 실제 스펙을 먼저 명확히 제시하고, 그에 맞게 프롬프트를 새로 설계해 달라고 요청했습니다.
PM의 역할도 초반 PRD생성, Architecture 문서 생서, 이슈 생성 -> 요구사항을 입력받아 이슈문서만 생성하게 수정했습니다.
이 경험을 통해, AI에게 광범위한 결과물을 요청하기보다 범위를 좁혀 명확히 지시할수록 결과의 품질이 높아진다는 점을 확인했습니다. 즉, “전체 PM을 만들어줘”보다는 “프로젝트 범위는 CRUD 수준이며, TDD 프로세스를 지원하는 PM 프롬프트를 최소 기능으로 설계해줘”처럼 작고 구체적인 단위로 요청하는 방식이 더 효과적이었던 것 같습니다.
AI가 잘하는 것과 못하는 것에 대해 고민한 적이 있나요? 내가 생각하는 지점에 대해 작성해주세요.
AI는 주어진 정보와 명령을 기반으로 결과를 생성하기 때문에, 인간만큼의 맥락과 경험을 반영한 결과물을 내기는 어렵습니다. 이로 인해 문제 해결 시 전체적인 범위를 고려하지 못한 솔루션을 제시하기도 합니다.
AI의 정확도는 사람이 얼마나 명확하고 일관된 정보를 제공하느냐에 따라 달라지는 것 같습니다. 그러나 인간 수준의 맥락 이해를 위해서는 매우 정교한 정보와 지시가 필요하므로, AI가 그 수준에 도달하기는 아직 어려운 영역이라고 생각합니다.
하지만 이렇게 큰 맥락을 이해하지 않아도 되는 부분에서는 AI사용의 이점이 크다 느낍니다. 단순작업이라던가 제가 잘 모르는 분야에서 어떤일을 해야할때와 같이 좁은 범위의 업무(문서 작업, 기본 틀을 만드는 작업 등)에는 확실히 AI를 사용하는게 좋은 것 같습니다.
마지막으로 느낀점에 대해 적어주세요!
AI를 한주동안 꽤 딥하게 사용해 볼 수 있었습니다. AI를 활용하는 방법에 대해 나름의 기준이 생길 수 있었던 시간이었습니다.
과제 셀프회고
AI를 적극적으로 쓰지 못했는데 이번 과제를 통해서 AI를 꽤나 딥하게 써볼 수 있어서 좋았습니다. 프롬프트를 만든경험도 없었고, 결제하고 있는 AI도 없었는데 이번 기회에 AI에 대한 허들을 낮출수 있었습니다. 이번 과제에서는 cursor를 사용했는데 다음엔 claud를 결제해서 이용해볼까 싶기도 합니다. 프롬프트를 설계하는게 꽤 재미있었는데 추후에는 회사에서도 사용할수 있는 프롬프트도 설계를 해보고 싶습니다. 이번한주 동안 AI를 계속 사용해보면서 AI가 완전 만능은 아니지만 작업에 효율에는 확실히 도움이 됨을 느꼈습니다. AI에 대한 이점과 한계를 체감할 수 있던 시간이었던 것 같습니다.
기술적 성장
새로 학습한 개념
프롬프트를 작성하는 방법에 대해 여러 방법을 시도해보면서 프롬프트 작성법, 어떻게 해야 말을 듣는 프롬프트를 작성할 수 있는지에 대해 체득할 수 있었습니다. 프롬프트 작성시 초반에 설계를 잘하면 그걸 기반으로 다른 에이전트들을 나름 일관되게 만들수 있는것 같습니다.
(1)프롬프트 작성시엔 명확한 기준을 가지고 input, output 정의가 필요하다
초반 과정에서 학습자료를 제대로 확인을 못하고 진행했는데 학습자료에 명확한 input과 output을 먼저 정의하고 프롬프트를 개발하라도 되어있었던걸 뒤늦게 확인했습니다... 그냥 AI한테
pm프롬프트를 만들어줘!라 해서 나온 결과물들을 제 기준으로 어떻게 판단해야 할지 고민이었는데 애초에 설계시부터 명확한 결과를 예상하고 계획을 짜야 했다는걸 알게 되었습니다.(2)AI의 결과물은 내가 제대로 파악할 수 있어야 한다. 너무 많은 결과물을 확인해야한다면 좀더 단순화하는게 좋을것 같다
AI의 결과물중 제대로 관리되지 않는게 있다면 이게 추후에 어떤 사이드이펙트를 일으킬지 모르기 때문에 큰 단위의 결과물을 일단 도출해내고 추후에 정리하는 것보다는 작은 단위의 결과물을 계속해서 디벨롭해 나가는데 정확도를 올릴수 있는것 같습니다. 제가 만든 워크플로우에서 이전 단계에서 나온 AI 결과물들을 다음 단계 AI가 참고하다보니 AI 가 도출해낸 문서들을 사람이 제대로 파악할 수 있어야 중간에 문제가 생긴다고 해도 문제를 빠르게 발견할 수 있는것 같습니다. 그래서 제 작업에서는 AI가 하나의 문서를 계속 참고하게 했는데, 이건 AI가 만든 결과물을 확인해야할 사람을 위한것이기도 했습니다.
(3)프롬프트 관리를 잘 하자
AI 프롬프트를 작업하면서 pm 기능에 테스트 시나리오를 넣었다가 좀더 명확한 역할을 분리하고 싶어서 pm은 Issue문서에서 목적, 요구사항, 맥락&범위만 수정할수 있게 프롬프트를 수정했었습니다. 그런데 orchastration 에서는 pm이 AC및 테스트 시나리오를 생성하는걸로 작성되어있었어서 결과가 일정하게 나오지 않는 경험을 했었습니다. 이때 프롬프트 요구사항에 대해 일관되게 관리되는게 정말 중요하구나 싶었던 것 같습니다.
코드 품질
리팩토링이 필요한 부분
이번 과제에서 프롬프트 설계에 시간을 많이 쓰면서 ai가 작성한 코드 퀄리티에 대해선 많이 신경을 못쓴것 같아 아쉬움이 있습니다. 더 나은 코드를 작성하게 위해 지시해야할 프롬프트가 어떤것들이 있을지에 대해 더 고민이 필요한것 같습니다.
지금 AI가 작성한 코드를 보면 좀더 효율적인 방식이 있어서 수정을 요청했어야 하는데, 일단 시간이 부족해서 넘어간 순간들이 많았습니다. 이 부분들을 다시 개선시켜보면 좋을 것 같습니다.
학습 효과 분석
가장 큰 배움이 있었던 부분
AI 사용에 대한 제 생각이 바뀐게 큰 배움이었습니다. 실무에서 AI를 많이 사용하지 않고 작업을 했었는데 AI를 이용한 개발의 한계, 이점등에 대해 체감해볼 수 있는 시간이었던 것 같습니다.
추가 학습이 필요한 영역
좀더 정교한 프롬프트 기법들에 대해 학습이 필요할 것 같습니다. 프롬프트에 동일한 input을 넣으면 항상 동일한 output을 내는것이 안정성이 높은 AI프롬프트라 생각이 되는데, 제가 작성한 프롬프트에서는 같은 input을 넣어도 조금씩 다르게 결과가 나오는 것 같습니다...
다른 기업들에서 AI들을 업무에 어떻게 이용하고 있는지 저희 회사에서도 적용할 수 있는 방법이 있는지에 대해 공부하고 싶습니다.
실무 적용 가능성
저희 회사에서는 아직 AI를 공격적으로 사용하고 있지는 않습니다. 이번 과제를 하면서 일관되게 잘 정리된 문서의 중요성을 깊게 느꼈던 것 같습니다. 추후에 AI 사용을 생각한다면 지금 일관적이게 관리되지 않는 문서를 어떻게 잘 정리해둘까라는 생각이 많이 들었습니다. 이것또한 AI를 이용해서 일관된 포맷으로 정리를 할수 있지 않을까 싶습니다.
저희 회사에서 업무를 할때 기획자는 있는데 pm이 부재한 느낌을 많이 받습니다. 어쩌면 이걸 AI를 이용해서 어쩌면 해결할 수도 있지 않을까라는 생각이 듭니다. (요구사항을 정리해서 기입하면 지라의 이슈를 생성해주는(?))
과제 피드백
과제에서 좋았던 부분
프롬프트 설계를 경험할 수 있었다는 점이 좋았습니다. 일주일이라는 짧은 시간 꽤 딥하게 AI를 써볼 수 있었습니다. 이번 과제를 통해서 AI에 대한 시각이 좀더 달라졌음을 느낍니다.
리뷰 받고 싶은 내용
오케스트레이션 에이전트 문서에 꼭 해야한다고 명시해둔 일들도 기능 4개를 만들때쯤 되면 스스로 스킵하고 넘어가는 일이 많은 것 같습니다.
(커밋을 할때는 허락받고 하기, 체크리스트를 검토하고 검토내용 알려주기등...) 제가 작성한 프롬프트에서 어떤 부분이 잘못되어있는지 AI에게 질문을 해서 알수 있는 방법이 있을까요?
저는 체크리스트 방식으로 각 단계별 검토를 하게 만들었는데, 혹시 AI 결과물에 대해 검토를 하는 더 좋은 방식이 있을까요? 검토를 위해서는 좋은 결과물에 대한 명확한 기준을 잡는게 중요한거겠죠..?
프롬프트를 돌릴때 동일한 input에 일관된 output을 내게하기 위해서는 어떤부분을 주의해서 짜면 좋을까요? 현재는 template을 제공해도 template의 하위부분을 갑자기 다른 방식으로 작성하기도 하더라고요...
이슈 1,2,3에서 테스트 코드 작성 에이전트가 작업한 방식
repeatType !== 'none'조건 추가src/App.tsx(470-481줄)repeatType !== 'none'조건으로 감싸서 반복 유형 선택 시에만 표시src/App.tsx이슈4에서 코드 작성 에이전트가 작업 요약을 작성한 방식
Inputs: 실패 테스트
Actions: 최소 구현(Green)
Outputs: 변경 파일/주요 변경 요약
Artifacts: 소스 코드 경로
작업 일시: 2025-01-XX
Inputs:
src/__tests__/unit/easy.generateRecurringEvents.spec.ts,src/__tests__/medium.integration.spec.tsxActions:
src/utils/eventUtils.ts에generateRecurringEvents함수 구현formatDate유틸 함수 활용src/hooks/useEventOperations.ts수정generateRecurringEvents호출하여 여러 일정 생성/api/events-list엔드포인트로 전송src/__mocks__/handlersUtils.ts수정setupMockHandlerCreation에/api/events-list핸들러 추가src/__tests__/medium.integration.spec.tsx수정Outputs:
src/utils/eventUtils.ts(+46 lines)src/hooks/useEventOperations.ts(+20 lines)src/__mocks__/handlersUtils.ts(+12 lines)src/__tests__/medium.integration.spec.tsx(+5 lines, -2 lines)주요 변경 요약:
generateRecurringEvents: 반복 일정 생성 로직 구현 (매일/매주/매월/매년 지원)useEventOperations.saveEvent: 반복 일정인 경우 여러 일정 생성 후/api/events-list호출/api/events-list지원 추가getAllByText사용하여 여러 일정 처리Artifacts:
src/utils/eventUtils.ts(generateRecurringEvents 함수)src/hooks/useEventOperations.ts(saveEvent 함수)src/__mocks__/handlersUtils.ts(setupMockHandlerCreation 함수)테스트 결과: ✅ 모든 테스트 통과 (137개)