[5팀 윤영서]. Chapte,r 3.-.2.. 프론트엔드 테스트. 코드 🦍#7
Open
YeongseoYoon-hanghae wants to merge 121 commits intohanghae-plus:mainfrom
Open
[5팀 윤영서]. Chapte,r 3.-.2.. 프론트엔드 테스트. 코드 🦍#7YeongseoYoon-hanghae wants to merge 121 commits intohanghae-plus:mainfrom
YeongseoYoon-hanghae wants to merge 121 commits intohanghae-plus:mainfrom
Conversation
added 30 commits
August 24, 2025 01:20
added 4 commits
August 29, 2025 06:21
This was referenced Aug 28, 2025
added 18 commits
August 29, 2025 07:35
…조화하여 가독성 및 재사용성 향상
…넌트로 분리하여 가독성 및 유지보수성 향상
…간 반복 요일 선택 기능을 위한 데이터 모델 확장
…선택할 수 있는 요일 옵션 및 검증 함수 정의
…tion 통합에 대한 상세 설명 포함
… 성능 검증에 대한 상세 설명 포함
…성 검증 및 오류 메시지 처리 포함
|
영서햄은 해냈구나.... |
added 2 commits
August 29, 2025 10:20
…가 - EventForm 및 useEventForm에서 주간 옵션 관리 통합
…gDatesWithOptions 함수에서 주간 요일 선택 로직 개선
|
안녕하세요 영서님, 비매드를 정말 훌륭하게 활용하신 것 같아요. 읽으면서 저도 많이 배웠습니다. 특히 멀티에이전트 방식에서 맥락이 사라지는 문제를 사람 간 협업의 맥락 소실과 연결해주신 부분이 굉장히 인상 깊었어요. 저 역시 늘 아쉽다고 생각했던 지점인데, 이렇게 풀어주신 덕분에 더 잘 이해할 수 있었습니다. 말씀처럼 혼자 일할 때는 모든 컨텍스트를 알고 있어 수퍼에이전트처럼 움직일 수 있지만, 협업에서는 커뮤니케이션 비용으로 인해 문서화의 중요성이 커지는 것 같아요. 그리고 비매드 같은 AI 네이티브 프레임워크가 문서 중심으로 개발·검증·수정까지 이어지는 과정을 자연스럽게 만들어준다는 점은 정말 배울 만한 포인트였습니다. AI와 프레임워크가 합쳐지면서 생산성 패러다임 자체가 바뀐다는 말씀도 크게 공감했어요. 특히 TDD를 “사람들이 잘 못했던 것”을 AI가 도와줄 수 있다는 관점으로 바라본 건 저에겐 새로운 인사이트였습니다. 무엇보다 영서님처럼 AI를 적극적으로 받아들이고 즐기면서 활용하는 태도가 멋지다고 생각해요. 저도 그 점을 본받고 싶습니다. 남은 2주도 화이팅하시고, 저도 앞으로 많이 배우겠습니다 |
Author
|
@BBAK-jun 갑자기 우다다... 준일봇인줄...암튼 넵...감사요 |
| */ | ||
| export const clearApiInterception = async (page: Page) => { | ||
| await page.unrouteAll(); | ||
| }; |
|
|
||
| await expect(page.getByTestId('month-view').getByText('겹치는 회의')).toBeVisible(); | ||
| }); | ||
| }); |
| setupSampleEventApis, | ||
| resetEventStore, | ||
| loadSampleData, | ||
| }; |
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주차 과제 체크포인트
기본 과제
필수
선택
심화 과제
각 팀원들의 테스트 전략은?
테스트 전략
각자 논의에 앞서서 테스트 전략에 대해 다음과 같이 논의했습니다.
이지훈
이은지
허정석
주산들
윤영서
여찬규
합의된 테스트 전략과 그 이유는 무엇인가요?
최종적으로는 테스트 트로피 전략을 선택했습니다.
선택 이유
선택의 이유는 일단 좀 더 다수가 트로피 전략을 생각하기도 했고 (피라미드파가 팔랑귀...) 물론 값싼 단위 테스트를 많이 작성하여 테스트 작성의 속도를 높일 수 있다는 장점이 있지만 프론트엔드의 특성상 유저에 좀 더 가까운(그렇지만 너무 비싸지는 않은) 통합테스트를 많이 작성하는것이 어떤가 하는 생각에 모두가 동의했던 것 같습니다.
그래서 결론적으로는
통합 테스트를 주로 작성하되, 값비싼 e2e 테스트는 정말 우리 서비스에서 중요한 유저 플로우에 대해서만 작성하자고 논의했습니다.
추가로 작성된 테스트 코드는 어떤 것들이 있나요?
전반적으로 반복일정에 대한 통합테스트를 추가적으로 작성했습니다.

그리고 트로피 전략에 알맞게, 그나마 이 프로젝트에서 중요하다고 생각되는 유저 시나리오에 대하여 e2e를 작성했습니다.

그리고 잘 찾아보시면 제가 그렇게 신경쓰지 않았지만 비매드가 소중하게 만들어준 유틸들이...있습니다....
과제 셀프회고
왜 매번 나는 새벽까지 고생을 하는 가에 대한 고찰... 매번 쉽지 않았다고 쓰기도 손 아프네요 그치만 이번에도 쉽지 않았습니다...
이번 과제의 부제는 비매드와 친해지기 입니다. (인간개입을 곁들인...)

기술적 성장
사실 테스트 전략에 대해서는 이전에도 면접이라거나, 4기를 했었기 때문에... 새로 학습했다고 보기엔 어렵고, 또 e2e도 회사에서 작성을 해본 경험이 있었기때문에 학습했다고 보기는 어려운 것 같습니다.
이번 과제에서 진짜 학습을 했다하면... 모두(?)가 극찬했던 비매드...가 아닐까 싶습니다.
코치님께서 처음에 이번 과제에는 풀 ai를 사용해도 된다고 말씀주셔서 '진짜 게르마늄 팔찌' 한 번 사봐? 라는 생각을 했던 것 같습니다.
영서에게... '비매드'란?
저에게 비매드란 사실 '게르마늄 팔찌'였습니다. 아니 뭐 다들 좋다는데...진짜 보기에는 좋은건 모르겠고... 잡솨보라는데... 오히려 좋다고만하니까 진짜 좋은가? 싶은 생각이 드는...그런 존재가 비매드였어요. (약간 게르마늄 팔찌보다는 풀리오 안마기같기도) 암튼 이번 과제에 뛰어들면서 적(?)에 대해서 알면 욕하기 쉽다는 생각으로 '아 내가 써보니까 별로던데 ㅋㅋ'라는 멘트를 칠 생각하며 비매드를 설치했습니다.
일요일 오후 3시 쯤에 설치를 했고, 모델은 GPT-5을 사용했습니다. 문서양이 상당할 것으로 생각이 되는데 클로드 소넷 모델을 사용하면서 토큰을 살살 녹이기에는 너무 부담이 될 것 같았습니다.
그런데... 처음 비매드를 설치하고, 비매드에게 절차적으로 프롬프팅을 하려고 하니 비매드가 제 생각처럼 움직여 주지 않았습니다. 제가 여태까지 봤던 비매드의 폴더 구조와, 제가 에이전트에게 요청을 해서 만들어준 폴더구조가 다른것을 보고 '뭔가 잘못됐다'고 생각했습니다.


뭔가 잘못되었다고 생각을해서 일단 쉼호흡을 한 번하고 비매드를 삭제하고 다시 설치하고 커서를 껐다 켰습니다.
그런데도 원하는대로 문서를 생성해주지 않았고, 두번의 삭제 후 세번째 트라이때 갑자기 '한 번 존댓말을 해볼까?'라는 생각이 들어 존댓말을 해보니 너무 잘해주더라고요...?

약 세시간이 지난뒤에야 원하는 형태의 문서를 얻을 수 있었습니다...(이제 시작)
이때부터 미칠듯이 화가나기 시작합니다. 아니 비매드 왜 쓰는거임? 저는 프롬프팅을 너무나도 잘했다고 생각했기 때문에... 갑자기 제가 고용한 Sarah 대신 '윤진우'씨가 오신것이 이해가 되지 않았습니다.

주먹을 꽉 쥐고 그때 질문을 하게 되는데요.
이때 준형님께서 좋은 답변을 해주셨습니다.
그러니까 요약을 하자면, 단순히 AI를 사용해서 작업을 하는 것보다 비매드를 통해서 문서화를 하고, 해당 컨텍스트를 통해 모든 직군이 같은 컨텍스트를 바라보도록 강제(?)해서 효율성의 극대화를 하자는...요런 얘기 같았는데요.
암튼 납득이 되는 이유라서 화를 다시 꾹 참고 다시 재개하기 시작했습니다.
bmad의 시스템 아키텍쳐는 다음과 같은데요.
여러 페르소나들이 있지만 저는 pm, architect, po, dev, qa를 사용해서 작업을 하도록 구현했습니다.
이렇게 1에서 5를 순차적으로 문서화를 진행했고, 만약 제가 문서화를 봤을때 납득가지 않는 내용이 있다면 다시 재문서화를 하거나 아니면 에이전트들과 토론을 하는 형태로 문서를 보정했습니다.
또 이번 과제의 경우에는 tdd를 했어야 했기때문에, dev 페르소나인 제임스에게 나름의 행동 강령을 추가했습니다.
그리고 tdd 행동강령을 만들어주고, 이 친구가 길을 잃으려고 할때마다 복창하도록 했습니다.
tdd 행동강령
# 테스트 코드 & 개발 행동 강령Kent Beck과 Kent C. Dodds의 TDD 원칙 기반
🎯 핵심 원칙
"테스트가 없으면 기능이 아니다. 클린하지 않으면 완성이 아니다."
모든 코드 작성은 **신뢰성(Confidence)**를 높이는 것이 목표입니다. 테스트와 코드 모든 결정은 "이것이 사용자에게 더 나은 경험을 제공하는가?"라는 질문에 답할 수 있어야 합니다.
🔴🟢🔵 Red-Green-Refactor 사이클
1. 🔴 RED Phase: 실패하는 테스트 작성
RED Phase 체크리스트:
2. 🟢 GREEN Phase: 테스트를 통과시키는 최소 구현
GREEN Phase 체크리스트:
3. 🔵 REFACTOR Phase: 클린 코드로 개선
REFACTOR Phase 체크리스트:
🚫 Kent C. Dodds - 피해야 할 실수들
실수 1: 구현 세부사항 테스트 (HIGH 위험)
실수 2: 100% 코드 커버리지 강박 (MEDIUM 위험)
실수 3: React Testing Library 잘못된 사용
📋 React Testing Library 체크리스트
쿼리 우선순위 (중요도 순)
getByRole- 접근성 기반 (최우선)getByLabelText- 폼 요소getByPlaceholderText- 입력 필드getByText- 표시되는 텍스트getByTestId- 최후의 수단ESLint 플러그인 필수 사용
waitFor 올바른 사용법
🎯 클린 코드 원칙
1. 단일 책임 원칙 (SRP)
2. 의미있는 이름 사용
3. 순수 함수 우선 사용
✅ 코드 리뷰 체크리스트
테스트 코드 리뷰
프로덕션 코드 리뷰
🎯 결론
"코드는 컴퓨터가 이해할 수 있도록 작성하는 것이 아니라, 사람이 이해할 수 있도록 작성하는 것이다." - Kent Beck
모든 코드와 테스트는 다음 개발자(미래의 나 포함)가 쉽게 이해하고 수정할 수 있도록 작성해야 합니다. 테스트는 코드의 살아있는 문서이자 안전망입니다.
기억할 핵심 메시지
참고 자료:
또 작업을 하다가, 기존의 epic 혹은 story가 잘못 작성된 것 같거나, 코드 구현에 있어서 이상함이 느껴지면 에이전트 친구들과 토론을 시작했습니다.

인간의 개입이 없이 전체적으로 프로그래밍을 맡기기에는 아직은 부족함이 있지 않나 하는 생각을 했던 것 같습니다.
그렇다면 비매드의 욜로옵션은...어떻게 써야하는 걸까...라는 생각이 들은...그리고 po한테 epic을 만들어 달라고 한뒤에 해당 epic으로 story를 만들면 story단위가 너무 커서 하지 않은 일도 했다고 몇번이고 박박 우기는 상황이 있었는데요.
그럴때 story를 좀 더 세분화해서 만들어달라고하니 잘되었던 것 같습니다.

e2e
e2e의 경우에 앞서서 말한것처럼 엄청 비싼 테스트기 때문에 주요 시나리오에 대해서 작성할 필요가 있다고 생각했습니다.

그래서 우선 architect에게 e2e 시나리오를 식별해달라고 요구했습니다.
그렇게 길게 대화한 내용을 문서화하도록 요구한뒤, dev에게 작업에 들어가 달라고 했습니다. 그러다 문제가 하나 발생했는데요... 발생한 문제는 하위의 학습효과 분석에서 확인하실 수 있습니다
암튼 e2e 시나리오는 아키텍쳐를 기반으로 에이전트인 제임스가 작성해주었는데요, 제임스가 작성해준 e2e가 시원치 않아서 완벽한 인간의 개입이 있어야했습니다. (사실 지금도 만족스럽진 않지만...하위를 보시면 왜 다른 부분에 더 힘을 썼는지 조금은...이해해주실듯...우하하)
억까...
나만보기 너무 억울해서...

계속 타임아웃이 나길래 제가 뭐 잘못했나 싶어서 테스트간 간섭이 있나 코드 다 뜯어 고쳐보고 원래 짠 코드 원복하고 했는데...
결론은 커서+크롬이 너무 무거워서 감당을 못해서 타임아웃이 간헐적으로 일어난 것 같았음요..
다른 맥 켜서 확인해보니까 잘되길래 타임아웃을 10000으로 늘려서 테스트해보니까 통과함... 4시간동안 억까당하고 엉엉울뻔했습니다
코드 품질
코드 품질은 처음엔 ai가 짜준것이 많다보니 마음에 들지 않는 것이 많았습니다. 그래서 프롬프팅을 통해 해결하거나, 제가 리팩토링을 직접하고 ai에게 '나 이러이렇게 고쳤어'라고 일러주는 방식으로 진행했습니다.
그렇게해도 기본과제가 끝난다음에 마음에 들지 않는 부분들이 있어서, 리액트 행동 강령을 클로드를 통해서 만든뒤 이를 에이전트들에게 알려주었습니다.
architect를 불러서 아키텍쳐를 분석해서 리팩토링을 어떻게하면 좋을지 문서화 해달라고 했습니다...만 갑자기 아키텍쳐인 윈스턴이 삘받아서 지가 리팩토링까지 다해버리는 바람에 진정시켯습니다...
암튼 시키고 있는데 epic -story로 나눠서 그런가 정말 너무너무 잘게 잘게 리팩토링을 하길래... 끊어버리고 직접 james에게 요청했더니 그제서야 제 의도를 파악하고 제가 원하는 크기로 리팩토링을 해줬습니다.
학습 효과 분석
e2e 작성시에 다음과 같은 문제 상황이 발생했는데요.

프로젝트를 진행하면서 E2E 테스트를 구축하는 과정에서 예상치 못한 문제에 직면했습니다. 논리적으로는 일정 겹침이 발생하지 않아야 하는 테스트 시나리오임에도 불구하고, 이전에 실행된 테스트의 데이터가 남아있어 예기치 않은 일정 충돌이 발생하는 것이었습니다.
기존 프로젝트에서는 realEvents.json 파일을 통해 일정 데이터를 관리하고 있었는데, E2E 테스트도 동일한 데이터소스를 참조하다 보니 테스트 실행 순서나 이전 테스트의 부작용에 따라 결과가 달라지는 불안정한 상황이 발생했습니다.
이를 위한 근본적인 해결책이 필요하다고 생각했습니다.
환경구성
문제의 핵심은 서로 다른 성격의 테스트들이 동일한 데이터소스를 공유한다는 점이었습니다. 따라서 다음과 같이 환경을 분리했습니다.
Playwright의 page.route() 기능을 활용하여 E2E 테스트만의 독립적인 API 모킹 시스템을 구축하는 것이었습니다.
interceptorApi
먼저 모든 API 인터셉터를 통합 관리하는 유틸리티를 구성했습니다. 이를 통해 테스트 코드에서는 간단한 한 줄의 호출로 모든 API 모킹을 적용할 수 있게 되었습니다.
실제 모킹 인터셉터
가장 중요한 부분은 실제 백엔드처럼 상태를 유지하는 API 인터셉터를 구현하는 것이었는데,
사실 e2e를 적게 구현할 생각이라서 저렇게 만능 인터셉터로 구현했지만, 시간이 더 있다면 분리된 인터셉터로 구현하지 않을까 싶습니다. 핵심은 POST로 생성한 데이터가 즉시 GET 요청에서 조회 가능하다는 점입니다.(일정 추가시에 저장한 데이터를 바로 확인할 수 있어야 하기 때문) 마치 실제 백엔드처럼 상태가 유지되면서도, 테스트가 끝나면 깨끗하게 초기화됩니다.
vitest와 plawright 환경 분리
위와 같이 구성해서 msw 기반의 단위/통합 테스트와 독립적인 환경을 구성하도록 했습니다.
e2e를 ci에서 돌아가게 구현하기
위 처럼 ci시 워크플로우를 작성해서 ci환경에서도 e2e가 돌아가도록 작성했습니다.
과제 피드백
여태까지 과제중에서 제일 열려있는 요구사항의 과제였다고 생각하는데요, 의도 자체가 모호한 요구사항을 구체화해서 기능 구현을 하는 것이기 때문에 아쉽진 않았고 오히려 자유도가 높아져서 구현하기 재밌었던 것 같습니다.
소요시간은..예상했던 20시간(순시간)에 비해서...삽질하는 시간이 길었던것같고 순시간으로 따지면 30시간정도..걸린것 같습니다.
다행인건 비매드를 사용하면서 지금도 리팩토링을 돌려두고 이렇게 pr을 작성하고 회사일을 할 수 있었다는 것인데요.
어떻게 보면 비매드의 소중함(?)을 알 수 있었던 과제였다고 생각합니다.
리뷰 받고 싶은 내용