목록 보기
1. 통과하는 테스트 뒤에 숨어 있던 것들
백엔드

1. 통과하는 테스트 뒤에 숨어 있던 것들

아임웹
아임웹
2026년 8월 7일

두줄요약

통합 테스트가 없던 코드베이스에서 Mock이 급증한 원인과, AI가 그 관성을 더 키우는 구조를 정리했습니다. 실제 DB와 기록형 대역, 스냅샷, lint로 검증 기반을 바꿔 Mock 의존을 줄인 과정을 공유했습니다.

핵심 내용

  • 통합 테스트가 없던 TypeScript 서버에서 Mock이 급증한 배경과, 특히 AI 보조 작성이 Mock을 더 빠르게 늘리는 자기강화 루프
  • Mock은 외부 경계와 재현 불가 상황에만 두고, 내부 로직은 실제 DB 기반 통합 테스트나 인메모리 대역으로 검증하는 기준 정리
  • Testcontainers, WireMock, 기록형 Mock, 특성화 테스트, 스냅샷, lint 규칙으로 Mock 의존을 줄이고 안전하게 제거한 과정

구조와 흐름

  • 시작점: 통합 테스트 0개, Mock 1,336개에서 출발
  • AI가 Mock을 양산하는 네 가지 원인 분석: 낮은 문맥 요구, 빠른 종료 신호, 기존 관례 모방, 문서상 기본값
  • Mock을 세우는 대신 실제 출력과 나간 값을 검증하도록 테스트 구조 전환
  • 특성화 테스트와 lint 정비로 유닛 Mock을 삭제할 수 있는 기반 마련

선택 이유

  • 외부 API, S3, Redis 실패 같은 경계는 Mock이 적절한 검증 수단
  • 저장·조회 결과가 중요한 내부 로직은 실제 DB 통합 테스트가 더 정확한 검증 수단
  • 호출 여부보다 전송된 payload 자체를 보는 기록형 대역이 계약 검증에 더 적합

적용해볼 점

  • 테스트 대상이 내부 로직인지 외부 경계인지 먼저 구분
  • Mock 단언을 호출 횟수 대신 실제로 나간 값 검증으로 전환
  • 통합 테스트 인프라와 lint 게이트를 먼저 마련한 뒤 Mock 제거

다음 읽기

#Lint 주제를 이어서 읽기

2. 유스케이스를 격리하고 의존성을 나누어 Lint로 규칙 세우기

Mock 의존을 줄이기 위해 유스케이스 분리, 리포지토리 포트화, 트랜잭션 정리를 단계적으로 진행했습니다. 문서보다 lint·타입·CI 같은 강제 규칙으로 사람과 AI의 관성을 막았습니다.

아임웹
아임웹
아키텍처

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...