Open
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
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.
8주차 과제 체크포인트
기본 과제
필수
심화 과제
각 팀원들의 테스트 전략은?
페어 4팀 테스트 전략 회의실
합의된 테스트 전략과 그 이유는 무엇인가요?
추가로 작성된 테스트 코드는 어떤 것들이 있나요?
📍 recurringEvents.spec.ts
📍 app.integration.spec.tsx
📍 calendar.cy.ts
과제 셀프회고
기술적 성장
코드 품질
가장 만족스러운 부분은 TDD로 완성한 recurringEvents.ts 유틸리티 파일입니다. TDD 사이클로 개발을 해본 것이 처음이라 의미있게 느껴지기도 하고, 엣지 케이스까지 검증된 신뢰도 있는 함수들을 먼저 구현해 놓았더니 훅에 이식하여 기능 구현으로까지 이어지는 과정이 수월했습니다.
반면, App.tsx 컴포넌트는 초기의 거대한 단일 컴포넌트에서 많이 발전했지만 여전히 리팩토링이 필요한 부분이 많다고 생각합니다. 현재 App은 여러 커스텀 훅을 호출하고 그 결과들을 하위 컴포넌트에 props로 전달하는 역할을 하고 있습니다. 여기서 더 나아가 EventFormPanel이나 CalendarView 같은 자식 컴포넌트들이 props 대신 전역 상태 관리 도구를 통해 필요한 상태와 함수를 직접 가져가도록 만든다면, App의 역할을 더욱 단순화하고 컴포넌트 간의 결합도를 더 낮출 수 있을 것 같습니다.
학습 효과 분석
가장 큰 배움이 있었던 부분은 단위 테스트와 통합 테스트의 역할을 명확히 구분하게 된 점인 것 같습니다. 처음에는 모든 것을 통합 테스트로 한 번에 검증하면 되는 거 아닐까? 생각했지만, 순수한 로직을 검증하는 단위 테스트가 얼마나 강력한 기반이 되는지 깨달았습니다. 촘촘히 만들어진 단위 테스트 덕분에, 복잡한 UI를 조립하는 통합 테스트 단계에서는 모듈 간 연결의 문제에만 집중할 수 있었습니다.
추가 학습이 필요한 영역은 안정적인 E2E 테스트 작성법입니다. 문법이 미숙해서 부족한 부분이 여럿 있는 것 같습니다. force 옵션을 쓰지 않고도 애니메이션이나 비동기 UI 업데이트를 안정적으로 기다리게 하는 Cypress의 고급 기법들이나, 각 테스트가 서로에게 영향을 주지 않도록 데이터를 완벽하게 격리하는 패턴에 대해 더 자세히 공부해서 실무에 적용해 보고 싶습니다!
과제 피드백
리뷰 받고 싶은 내용
테스트의 경계: recurringEvents.ts 같은 유틸리티 함수에 대해 꼼꼼한 단위 테스트를 작성했습니다. 이 함수를 사용하는 useEventOperations 같은 커스텀 훅을 테스트할 때도, 이 유틸리티 함수의 모든 엣지 케이스를 다시 테스트해야 할까요? 아니면 훅 레벨에서는 유틸 함수는 이미 검증되었으니, 훅이 유틸 함수를 올바르게 호출하는지만! 테스트하는 것이 더 효율적인지 조언을 듣고 싶습니다.
E2E 테스트의 독립성: 현재 작성한 E2E 테스트의 CRUD 시나리오는 생성 테스트가 성공해야 수정 테스트가 이어서 실행될 수 있는 의존적인 구조입니다. 각 테스트가 서로에게 영향을 주지 않도록 완벽하게 독립적으로 만드려면, beforeEach에서 cy.request()를 사용해 매번 테스트에 필요한 데이터를 직접 생성하고 시작해야 하거나 인터셉트 처리로 api를 모킹해야 하는 것으로 공부했습니다. 하지만 그렇게 되면 실제 api 테스트가 되지 않아서 E2E 테스트의 의미가 흐려진다고 느껴집니다. 반면에 실제 데이터를 테스트 용도로 조작하는 것이 위험하게 느껴지기도 합니다. 보통 실무에서 사용하는 일반적인 패턴은 어떤 것인지 궁금합니다!