QA Agent 병렬 실행 개선과 MSW 마이그레이션 삽질

26년 03월 18일

QA Agent, 동적 Lane 선택

이날은 QA Agent 실행 흐름을 개선하고 회사 프로젝트 MSW 마이그레이션 리뷰를 반영하느라 정신없이 보냈다.

틈틈이 개인 프로젝트 검증이랑 위키 스킬 정리도 했다.

할 일은 많았는데 다

제각각이라 컨텍스트 스위칭이 꽤 빡셌다.

QA Agent는 Slack에서 /qa 명령을 받으면 테스트 대상 URL이랑 시트 정보를 수집해서 브라우저로 자동 테스트를 돌리는 시스템이다.

실행 흐름이 DAG 기반 스케줄링인데, Lane이라는 단위로 테스트 케이스를 병렬로 묶어서 돌린다.

그 전까지는 병렬 실행 개수가 고정이었다.

parallelism=3으로 고정해두고 썼다.

근데 이게 잘 안 맞을 때가 있다.

테스트 케이스가 서로 의존성이 있어서 순차로 돌아야 할 때도 3개씩 묶으니까 비효율적이고 디버깅도 어려웠다.

반대로 케이스가 많고 서로 독립적일 때는 3개로는 부족해서 느렸다.

그래서 Planner가 케이스 특성에 맞춰서 Lane 개수를 1~5개 사이에서 동적으로 선택하게 만들었다.

케이스들이 서로 의존성이 많이 엮여 있으면 직렬에 가깝게, 독립적이면 최대 병렬로. 의존성 그래프 형태에 맞춰 동시성을 조절하는 셈이다.

그리고 Lane 실행 로그가 파일 3개로 나뉘어 있던 걸 하나로 합쳤다.

Slack에 올라가는 메시지랑 첨부 파일 정책도 단순화했다.

채널에서 결과를 읽는 사람 입장에서 노이즈가 너무 많았거든. 로그가 흩어져 있으면 어디서 뭘 봐야 할지 헷갈리니까.

회사 프로젝트 MSW 마이그레이션

본업 쪽에서는 MSW 마이그레이션 작업을 이어갔다.

회사 모노레포 프로젝트인데, 앱마다 MSW 핸들러 세팅이 제각각이었다.

Worker 초기화 코드도 중복되고 경로도 달라서 빌드 에러가 종종 났다.

이걸 공통 API 클라이언트 기반으로 통합하는 작업이었다.

각 앱에 흩어진 MSW 핸들러를 공통 스펙 기반으로 다시 쓰고 Worker 인스턴스도 하나로 통일했다.

이 패턴이 나중에 다른 앱 추가할 때 표준이 됐다.

이날은 리뷰 피드백을 반영하고 main 브랜치 머지 과정에서 생긴 충돌을 풀고 CI 타입체크 에러를 잡았다.

마이그레이션 PR을 랜딩시키려면 거쳐야 할 뒷정리 작업이었다.

MSW는 MSW=true 환경변수로 토글된다.

디폴트 개발 서버는 MSW가 켜져 있고 실제 백엔드를 잡아서 검증하려면 MSW=false로 끄면 된다.

이 토글 방식이 헷갈릴 수 있는데, 새로 합류한 사람한테 설명할 게 하나 줄어들어서 나쁘지 않았다.

판타지 일기 DEV 검증

개인 프로젝트인 판타지 일기도 틈틈이 만지고 있었다.

한국 괴담을 수집해서 각색하고 TTS 소설로 만드는 자동화 시스템이다.

Supabase랑 pgvector 기반이고 워크플로우 엔진으로 실행된다.

이날은 DEV 환경 스키마에서 에피소드 생성이 제대로 동작하는지 검증했다.

실서비스 가기 전에 스테이징 스키마에서 한 번 찍어보는 검증이었다.

결국 잘 돌아갔다.

이 에피소드 생성 파이프라인은 약 석 달 뒤에 통째로 날리고 괴담 각색 흐름으로 갈아엎었다. 이때는 이걸 쓸 줄 알았는데, 프로젝트 방향이 바뀌면서 결국 다

사라졌다.

위키 스킬 정리

하루 동안 배운 걸 위키 스킬로 정리하는 작업도 했다.

하나는 Daily 노트 작성 규칙이었다.

frontmatter는 date만 남기고 본문은 프로젝트 카테고리 헤딩부터 바로 시작한다.

기술 용어는 쉬운 한국어로 풀어쓰고 끝까지 존댓말을 유지한다.

내부 링크는 실제로 존재하는 노트만 건다.

안 그러면 링크가 점점 쌓이면서 깨진 링크 투성이가 된다.

그리고 Slack 봇 Socket Mode 연결 절차도 문서화했다.

QA Agent가 Slack 봇으로 동작하는데, 이 연결 점검하느라 삽질했던 걸 재사용 가능하게 정리해둔 거다.

Socket Mode는 공개 Request URL이나 ngrok 없이 로컬에서 봇을 테스트할 수 있게 해준다.

토큰 두 개가 필요한데, App-Level 토큰이랑 Bot User OAuth 토큰이다.

스코프도 각각 달라서 헷갈리기 쉬운 부분이었다.

마무리

컨텍스트 스위칭이 많은 날이었다.

QA Agent, 회사 프로젝트, 개인 프로젝트, 위키 정리까지 네 가지를 왔다

갔다

하니까 집중이 자꾸 깨졌다.

근데 QA Agent 동적 Lane 선택은 결과가 좋았다.

고정 병렬에서 벗어나니까 실행 시간이랑 디버깅 편의성 둘 다

잡혔다.

MSW 마이그레이션은 그날 당장은 끝나지 않았지만 표준 패턴이 정해진 게 큰 수확이었다.

나중에 앱 추가할 때마다 이 패턴을 그대로 쓰니까 세팅 비용이 확 줄었다.