8주차 과제 체크포인트
기본 과제
필수
- 반복 유형 선택
- 일정 생성 또는 수정 시 반복 유형을 선택할 수 있다.
- 반복 유형은 다음과 같다: 매일, 매주, 매월, 매년
- 31일에 매월을 선택한다면 -> 매월 마지막이 아닌, 31일에만 생성하세요.
- 윤년 29일에 매년을 선택한다면 -> 29일에만 생성하세요!
- 반복 일정 표시
- 캘린더 뷰에서 반복 일정을 시각적으로 구분하여 표시한다.
- 아이콘을 넣든 태그를 넣든 자유롭게 해보세요!
- 캘린더 뷰에서 반복 일정을 시각적으로 구분하여 표시한다.
- 반복 종료
- 반복 종료 조건을 지정할 수 있다.
- 옵션: 특정 날짜까지, 특정 횟수만큼, 또는 종료 없음 (예제 특성상, 2025-06-30까지)
- 반복 일정 단일 수정
- 반복일정을 수정하면 단일 일정으로 변경됩니다.
- 반복일정 아이콘도 사라집니다.
- 반복 일정 단일 삭제
- 반복일정을 삭제하면 해당 일정만 삭제합니다.
선택
- 반복 간격 설정
- 각 반복 유형에 대해 간격을 설정할 수 있다.
- 예: 2일마다, 3주마다, 2개월마다 등
- 예외 날짜 처리:
- 반복 일정 중 특정 날짜를 제외할 수 있다.
- 반복 일정 중 특정 날짜의 일정을 수정할 수 있다.
- 요일 지정 (주간 반복의 경우):
- 주간 반복 시 특정 요일을 선택할 수 있다.
- 월간 반복 옵션:
- 매월 특정 날짜에 반복되도록 설정할 수 있다.
- 매월 특정 순서의 요일에 반복되도록 설정할 수 있다.
- 반복 일정 전체 수정 및 삭제
- 반복 일정의 모든 일정을 수정할 수 있다.
- 반복 일정의 모든 일정을 삭제할 수 있다.
심화 과제
- 이 앱에 적합한 테스트 전략을 만들었나요?
각 팀원들의 테스트 전략은?
심화과제에서 통합 테스트 시나리오를 3개를 추가적으로 만들었습니다.
합의된 테스트 전략과 그 이유는 무엇인가요?
팀원들과 다음 URL에서 심화과제를 위해 테스트 전략 관련하여 의견을 나눴습니다. https://www.figma.com/board/GeKV3mp3GvDSIpB2VN8BQT/2-6%ED%8C%80-%EC%8B%AC%ED%99%94%EA%B3%BC%EC%A0%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A0%84%EB%9E%B5?node-id=32-243&t=CJ46APULEsNzrXSn-0
먼저 유닛 테스트, 통합테스트, E2E테스트, 시각적 회귀 테스트에 대한 개념이 무엇이고, 이 과제에서 어떤 테스트를 진행할지에 대해 논의를 했습니다.
저는 유닛테스트와 통합테스트는 일단 이전 과제에서 사용을 해봤기에 E2E테스트와 시각적 회귀 테스트를 한번 사용해도 될거같다고 생각했지만, E2E 테스트는 통합 테스트로도 충분히 커버가 가능하고, 복잡한 플로우 및 시간 투자가 상당히 필요한 부분이 있어 E2E 테스트까지는 안가도 될거같다는 생각이 들었고, 시간이 되는 사람 한에서 E2E 테스트를 추가하기로 했습니다. 추가적으로 페어코딩을 하고싶은 분들은 따로 인원을 모집하여 추가적으로 페어코딩도 하기로했지만, 저는 시간이 조금 부족할 거같아 참여는 안했습니다.
추가로 작성된 테스트 코드는 어떤 것들이 있나요?
기본과제 test 파일 이름은 repeatingEvent.integration.spec.tsx로 작성하였습니다. 그리고 심화 과제는 [eventWorkflow, form, view].spec.tsx의 이름으로 통합 테스트를 3개 추가적으로 작성하였습니다. 3개 추가한 통합 테스트 시나리오는 다음과 같습니다.
통합 테스트 시나리오 정리
- EventWorkflow 테스트 (알림 워크플로우)
| 시나리오 | 설명 | 주요 검증 사항 |
|---|---|---|
| 기본 알림 워크플로우 | 사용자가 일정을 생성할 때 알림 시간을 10분 전으로 설정하고, 일정 제출 후 시간을 10분 전으로 진행시켜 알림이 정확한 메시지와 함께 표시되는지 확인 | - 일정 생성 후 10분 전 시점에 알림 표시 - "10분 후 [제목] 일정이 시작됩니다" 메시지 확인 - 알림 닫기 기능 동작 확인 |
| 여러 알림 동시 처리 | 여러 개의 일정을 각각 다른 알림 시간으로 생성하고, 시간을 진행시켜 여러 알림이 동시에 표시되는지 확인 | - 중복 알림 방지 (정확히 하나만 표시) - 특정 알림 제거 시 다른 알림 유지 - 시간 진행 시 중복 생성 방지 |
| 알림 자동 만료 | 알림이 설정된 일정을 생성하고 알림 시간을 지나게 한 후, 일정 시작 시간이 되면 알림이 자동으로 사라지는지 확인 | - 이미 지난 시간의 일정 생성 시 알림 미표시 - 과거 일정에 대한 알림 생성 방지 - 시간 경계 테스트 |
- View 테스트 (뷰 간 데이터 동기화 및 네비게이션)
| 시나리오 | 설명 | 주요 검증 사항 |
|---|---|---|
| 뷰 간 데이터 동기화 | 일정을 생성한 후 주간 뷰, 월간 뷰, 일정 리스트에서 해당 일정이 모두 동일하게 표시되는지 확인 | - 주간 뷰에서 일정 표시 확인 - 월간 뷰 전환 시 동일한 일정 표시 - 일정 리스트 동기화 확인 - 여러 일정의 모든 뷰 동기화 |
| 날짜 네비게이션 | 현재 주에 일정을 생성하고 다음 주로 이동한 후, 다음 주에서는 일정이 표시되지 않고 이전 주로 돌아가면 일정이 다시 표시되는지 확인 | - Next/Previous 버튼 동작 확인 - 날짜별 일정 필터링 동작 - 여러 주에 걸친 일정들의 올바른 분리 - 일정 리스트와 주간 뷰 동기화 |
| 뷰 전환 시 날짜 유지 | 주간 뷰에서 특정 날짜를 확인하고 월간 뷰로 전환해도 동일한 날짜가 표시되는지 확인하고, 다시 주간 뷰로 돌아가도 동일한 날짜가 표시되는지 확인 | - 주간 뷰 ↔ 월간 뷰 전환 시 날짜 유지 - 날짜 이동 후 뷰 전환 시에도 날짜 상태 유지 - 여러 번의 뷰 전환 시 일관성 유지 |
| 검색 결과와 뷰 동기화 | 일정을 검색한 후 주간 뷰와 월간 뷰를 전환해도 모든 뷰에서 검색 결과가 올바르게 표시되는지 확인 | - 검색 기능과 뷰 전환의 호환성 - 모든 뷰에서 검색 결과 일관성 유지 |
- Form 테스트 (폼 관리 및 검증)
| 시나리오 | 설명 | 주요 검증 사항 |
|---|---|---|
| 편집 모드 폼 로딩 | 기존 일정을 편집 모드로 전환했을 때 모든 폼 필드가 올바르게 로드되는지 확인 | - 제목, 날짜, 시간, 설명, 위치, 카테고리 정확 로딩 - 알림 설정 올바른 표시 - 여러 일정 중 특정 일정 편집 시 올바른 데이터 로딩 |
| 폼 제출 후 리셋 | 새 일정을 생성하고 제출한 후 폼이 완전히 초기화되는지 확인 | - 모든 입력 필드 초기화 - 카테고리/알림 기본값 설정 - 반복 일정 설정 초기화 - 설정 변경 후에도 기본값으로 리셋 |
| 필수 필드 검증 | 필수 필드를 입력하지 않고 제출할 때 적절한 오류 메시지가 표시되고 일정이 저장되지 않는지 확인 | - 제목, 날짜, 시작 시간, 종료 시간 필수 확인 - "필수 정보를 모두 입력해주세요" 메시지 표시 - 오류 시 일정 저장 방지 - 오류 수정 후 정상 저장 |
| 시간 검증 | 시작 시간이 종료 시간보다 늦을 때 적절한 오류 메시지가 표시되고 일정이 저장되지 않는지 확인 | - 시작 > 종료 시간 검증 - 동일 시간 설정 방지 - 자정 넘어가는 시간 오류 처리 - "시간 설정을 확인해주세요" 메시지 표시 - 편집 모드에서도 시간 검증 적용 |
| 편집 모드 취소 | 일정 편집 중에 새 일정 추가 버튼(폼 제목)을 클릭했을 때 폼이 초기 상태로 돌아가는지 확인 | - 편집 중이던 내용 모두 초기화 - 수정된 필드들 모두 비우기 - 알림/카테고리 기본값으로 리셋 - 반복 설정 초기화 - 취소 후 새 일정 정상 생성 가능 |
| 반복 일정 체크박스 | 반복 일정 체크박스를 클릭했을 때 상태가 올바르게 변경되고, 체크박스를 다시 클릭했을 때 체크가 해제되는지 확인 | - 체크박스 토글 기능 - 반복 설정 필드 표시/숨김 - 반복 일정 생성 후 설정 초기화 |
과제 셀프회고
단위테스트와 통합테스트는 저번주에 작성을 해봐서 개념은 알았지만, E2E 테스트, 회귀 테스트 및 스냅샷과 같은 테스트는 개념도 몰랐어서 어떨 때 사용할지 감이 안잡혔던 거 같습니다. 하지만 팀원들과 따로 토론하면서 개념정리도하고 이번 과제에서는 어떤 테스트를 해야할지 논의를 하는 부분에서 어떤 테스트는 필요하고 또 다른 테스트는 불필요한지 알게 되었습니다.
기술적 성장
저번주에는 테스트 시나리오가 있어서 작성하기가 편했는데, 이번 과제에는 따로 테스트 시나리오가 없어서 테스트 시나리오를 어떻게 짜야할지 고민을 많이했습니다. 테스트 시나리오를 팀원들과 조정해가면서 테스트 시나리오를 어떻게 짜야하는지 배웠다고 생각합니다. 또한 저번주에는 테스트 코드를 작성할 때 어디에 어떤 함수를 써야할지 좀 어려웠는데 이번에도 추가적으로 또 작성해보면서 복습도 되었고, 새로운 테스트 함수들을 추가적으로 찾아보면서 많이 배웠다고 생각합니다.
코드 품질
시나리오를 미리 작성하고 테스트 케이스를 만들어서 그런가 이전에 비해 코드 품질이 조금 더 좋아졌다고 생각합니다. 그리고 이전에는 사실 사이드 이펙트에 대해 개념을 잘몰랐는데, 사이드 이펙트에 대한 부분도 신경을 쓰면서 코드를 작성하다보니 예상치 못한 부분에서 에러가 발생하지 않도록 노력하여 코드 품질은 조금 더 나아졌다고 생각합니다.
학습 효과 분석
시나리오 작성을 하고 테스트 케이스를 만드는 연습을 하다보니 자연스럽게 유지보수 가능한 코드를 작성하게 되는 거 같습니다. 이로 인해 버그와 리팩토링을 용이하도록 만들다보니 더욱 더 코드 품질이 좋아지는 거같습니다.
저는 아직 개발자가 아니지만, TDD를 학습하면서 제가 혼자 만든 웹사이트를 조금 적용해봤는데 함수를 자연스럽게 리팩토링을 용이하게 만들게 되는거같습니다.
과제 피드백
이번 주차의 과제는 요구사항이 따로 없고 정답도 없었습니다. 이 과제를 하면서 테스트를 어떻게 진행할지에 대해따로 토론도 해야하다보니, 팀원들과 따로 유대감도 생기고, 소통하면서 과제를 했기에 좋았습니다. 여러 토론을 나눴던 부분이 인상깊었습니다. 저에게 TDD는 좀 매우 생소하지만 괜찮은 주제였다고 생각합니다.
리뷰 받고 싶은 내용
이번에 테스트 코드를 작성하면서 '어떤걸' 테스트 해야할까? 라는 부분이 좀 헷갈립니다. 이번 과제에 통합 테스트를 했기에 사용자 흐름 및 예상치 못한 내용에 대해 테스트 코드를 작성했습니다.
하지만 여기에 불필요한 테스트 코드가 분명 있다고 생각합니다. 이러한 불필요한 테스트 코드를 분간하는 방법에 대해 어떤식으로 알아야할지 좀 고민됩니다. 발제 내용에도 이러한 내용이 있긴한데 아직 조금 어려운거같습니다. 혹시 이러한 부분에 대해 괜찮은 책이나 블로그등 추천해주실만한 게 있을까요..? 아니면 불필요한 테스트 코드를 분별하는 방법에 대한 따로 노하우가 있으실까요.. ㅜㅜ
과제 피드백
안녕하세요 민기님! 8주차 과제 잘 진행해주셨네요 ㅎㅎ
이번에 테스트 코드를 작성하면서 '어떤걸' 테스트 해야할까? 라는 부분이 좀 헷갈립니다. 이번 과제에 통합 테스트를 했기에 사용자 흐름 및 예상치 못한 내용에 대해 테스트 코드를 작성했습니다. 하지만 여기에 불필요한 테스트 코드가 분명 있다고 생각합니다. 이러한 불필요한 테스트 코드를 분간하는 방법에 대해 어떤식으로 알아야할지 좀 고민됩니다. 발제 내용에도 이러한 내용이 있긴한데 아직 조금 어려운거같습니다. 혹시 이러한 부분에 대해 괜찮은 책이나 블로그등 추천해주실만한 게 있을까요..? 아니면 불필요한 테스트 코드를 분별하는 방법에 대한 따로 노하우가 있으실까요.. ㅜㅜ
흠.. 제가 책이나 블로그를 토대로 테스트를 익히질 않다보니.. 이에 대해 설명드리기가 조금 어렵네요 ㅠㅠ 이건 프로젝트 성격에 따라 무척 달라진다고 생각해요. 가령, 저는 이전 회사에서 "포털 서비스"를 만들었는데 그러다보니 "비즈니스 로직"보다는 "보여지는 것"이 더 중요했습니다. 단위테스트나 통합테스트 대신 비주얼 테스트 같은걸 하면 더 효과적으로 사이드 이펙트를 검증할 수 있었어요.
그런데 지금의 경우 웹빌더를 만들고 있고 여기에서는 비즈니스 로직에 대해 촘촘하게 검사를 해야 했어요. 통합테스트나 e2e 테스트로 커버하기가 굉장히 어렵고 오래걸렸죠.
결론은 우리 서비스에서 중요한 코드가 무엇이고, 이를 검증하기 위해 어떤 도구가 필요할지를 판단해야 하다고 생각해요.
가령 지금 과제의 경우 "반복 일정"이 핵심이 되는 로직이고 이에 대한 검증은 통합 테스트로 하는게 제일 효과적일 수 있죠.
그치만 13주차 과제인 쇼핑몰의 경우 e2e 테스트가 더 효과적일 수 있고, 46주차에서는 쇼핑몰의 할인로직이 핵심인데 이 때는 단위테스트가 효과적입니다.
어떤 상황이냐에 따라 다르다는 점만 인지해도 좋을 것 같아요!