Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 항해
- 2025년회고
- 프론트엔드
- 항해플러스
- 박 터뜨리기
- SSE 후기
- 프로그래머스
- EC2
- 백준 반례
- SSE
- greedy
- 테스트코드
- SSE 적용 방법
- JavaScript
- react
- 탐욕알고리즘
- 코딩테스트
- 코테
- 자바스크립트
- next.js
- 클린코드
- 리액트
- 그리디
- jQuery
- SSE적용방법
- 리팩토링
- 항해99
- 백준 19939
- 백준
- 알고리즘
Archives
- Today
- Total
공부 및 일상기록
[WIL] 프론트엔드 테스트코드 - 8주차 과제 본문
이번 8주차는 TDD를 진행해보는 시간이였다.
지난주차에 공부했던 프로젝트에 추가적으로 기능을 추가하는 미션이였는데, 그 미션을 TDD로 진행하는것이였다.
따라서 테스트를 작성하고, 테스트 코드를 작성, 그리고 기능을 작성, 검증 이 단계를 거치는 연습을 하게 되었다.
그럼 본격적으로 내가 배운점들을 요약해보겠다.
배운 점
- TDD 사이클 실습
이번 과제는 Red → Green → Refactor 사이클을 처음부터 끝까지 경험할 수 있었다. 기능 요구사항이 명확했기 때문에 테스트를 먼저 작성하고 구현을 뒤따라가는 흐름이 비교적 자연스러웠다.
테스트 코드가 실패하는 순간, 내가 무엇을 구현해야 하는지 방향이 명확해지는 걸 느꼈다. “기능 구현의 나침반” 같은 역할을 실제로 체감했다. - 테스트 도구 활용 능력 향상
- vitest-preview를 사용하면서 실패 시점의 UI를 눈으로 확인할 수 있었고, 덕분에 디버깅 시간을 크게 줄일 수 있었다.
- testId 같은 속성을 전략적으로 추가해 테스트에서 UI 요소를 쉽게 식별하는 방법을 배웠다.
- AI와 TDD의 조합
기능 구현을 대부분 AI에게 맡기고, 나는 테스트 설계와 보정에 집중했다. 이 과정에서 AI의 한계(구조적 이해 부족, MUI 특성 오판 등)를 보완하는 역할을 테스트 코드가 해준다는 걸 실감했다.
→ 결국 “AI에게 넘길 최소 단위 작업을 어떻게 정의할 것인가”가 생산성을 좌우한다는 점을 배웠다.
고민한 점
- 알림 토스트 중복 발생 (테스트 환경 vs 실제 환경)
알림 검증 시 vi.advanceTimersByTime()을 사용했는데, 테스트에서는 토스트가 1번이 아닌 여러 번 발생했다.
원인은 알림 체크가 setInterval(1000ms) 기반으로 이루어지고, 테스트에서 시간을 강제로 점프했을 때 이벤트가 여러 번 감지된 것으로 추정된다.
실제 앱에서는 한 번만 발생하는데, 테스트 환경에서는 “밀린 이벤트”가 중복으로 발생한 것처럼 처리된 셈이다.
→ 억지로 -1000ms를 빼는 식으로 통과시켰지만, 이는 근본적인 해결은 아니라고 생각한다.
앞으로는 “시간 이벤트를 시뮬레이션할 때 interval 기반 로직을 어떻게 안정적으로 테스트할지” 더 고민해봐야겠다. - 극값 테스트의 필요성
하루 종일 일정(00:00–23:59)이나 시작=종료시간 같은 케이스는 실제 사용자가 자주 쓰지는 않겠지만, 시스템 안정성을 위해 필요한 테스트라고 판단했다.
다만 사용자 관점에서는 일정 충돌이나 잘못된 입력 처리 같은 케이스가 훨씬 중요하다.
→ “시스템 안정성 테스트 vs 사용자 중심 테스트” 사이의 우선순위를 어떻게 정할지가 앞으로도 계속 고민될 것 같다.
기술적 성장
- 단순히 “테스트를 작성할 수 있다”에서 한 단계 나아가, 테스트 전략을 고민하고 팀과 합의할 수 있었다.
- 우리 팀은 “테스트 트로피에서 E2E는 제외하고, 통합 테스트를 중심으로 간다”는 전략을 세웠다.
- 이유: 요구사항이 계속 바뀌는 환경에서 E2E는 유지보수 비용 대비 효율성이 떨어지고, 통합 테스트만으로도 사용자 여정을 충분히 커버할 수 있기 때문이다.
- 이는 단순 기술이 아니라 실제 현업에서 테스트 리소스를 어디에 집중해야 하는가라는 전략적 관점을 배우는 경험이었다.
아쉬운 점 & 다음 목표
- 테스트 코드가 실제 동작과 불일치할 때(알림 중복 이슈처럼) 원인을 깊게 파악하기 어려웠다. 라이브러리 레벨의 동작이나 타이머 메커니즘을 더 공부해야 한다고 느꼈다.
- 앞으로는 시간 관련 로직 테스트를 별도의 유틸 함수로 분리하고, 단위 테스트와 통합 테스트를 다른 접근법으로 나누는 방식을 시도해보고 싶다.
- 또한 이번에 통합 테스트에 집중했지만, 나중에는 서비스가 복잡해졌을 때 E2E를 어디서 도입해야 할지 미리 감을 잡아두고 싶다.
'개발 > React' 카테고리의 다른 글
| EC2에 배포한 React가 사용자에게 항상 최신이 보이도록 설정하기 (0) | 2025.11.14 |
|---|---|
| [React] 성능 최적화 하기 (0) | 2025.09.15 |
| [WIL] 프론트엔드에서 테스트코드 (1) | 2025.08.30 |
| [React] FSD 폴더구조 공부 후기 (1) | 2025.08.23 |
| [React] 디자인 패턴과 함수형 프로그래밍 (5) | 2025.08.10 |