본문으로 건너뛰기
목록으로

조용히 삼켜지던 파싱 실패를 드러낸 DTO 표준화

DTO에 변환 로직이 섞여 같은 값이 두 이름으로 공존했고, 파싱에 실패해도 기본값을 채우고 넘어가 화면만 비었습니다. 14개 feature의 DTO를 서버 응답의 직역으로 되돌리고 실패가 드러나게 했습니다.

상황

실패해도 기본값을 채우고 넘어가 아무 데도 남지 않았다

DTO에 변환과 헬퍼가 섞여 있어 같은 값이 두 이름으로 공존하는 등 중복 키와 타입 불일치가 반복됐습니다.

파싱에 실패해도 기본값을 채워 넣고 넘어가서 화면에는 빈 값이 보이는데 에러는 어디에도 남지 않았습니다. 여기에 더 이상 쓰이지 않는 feature 9개가 남아 전환 범위를 부풀리고 있었습니다.

바꾼 것

DTO는 서버 응답의 직역, 실패는 한 방향으로

  • DTO를 순수 zod로 되돌리고, 타입이 맞지 않으면 클라이언트에서 변환하지 않고 서버를 고치는 쪽으로 기준을 세움
  • 파싱 실패를 Datadog으로 보내는 보고 채널과 응답 봉투를 벗기는 공통 래퍼를 추가
  • 실패 흐름을 값 반환에서 예외를 던지고 훅이 보고하는 한 방향으로 바꿔 테스트할 지점을 명확히 함
  • baseURL과 토큰을 props로 내려주던 체인을 컨텍스트 주입으로 전환하고, 소비자가 없는 feature 9개를 제거
  • 규약을 AGENTS.md에 명문화 — 사람만 읽는 문서가 아니라 AI 에이전트도 읽으니 생성되는 코드도 같은 규칙을 따르게

확인한 결과

2주 만에 14개 feature 전환, 실패가 보이기 시작

2026년 8월 13일부터 25일까지 14개 feature의 DTO를 전환했습니다. DTO 안에 남아 있던 변환 로직 사용처는 119곳에서 17곳으로 줄었습니다.

파싱 실패가 Datadog에 보고되기 시작했고, 소비자가 없던 feature 9개(128파일 6,334줄)가 사라졌습니다. 에이전트가 만든 PR도 같은 규약을 따르게 됐습니다.