UND_ERR_REQ_CONTENT_LENGTH_MISMATCH 에러
이번 심화프로젝트를 시작하면서 회원가입 로직을 만들고 있는데, 처음 보는 에러가 계속 발생해서 당황했다.
우선 현재 회원가입 로직이 하나의 로직으로 두 개의 분기를 나눠서 처리해야 해서 zod 스키마를 base 스키마를 바탕으로 하는 A 스키마, B 스키마로 나누었다.
두 개의 분기는 URL params로 경로를 분산했고, 분기처리는 성공했는데 문제는 그 다음이었다.
서버에는 하나의 스키마로 된 api로 요청하도록 되어있는데, 각 분기별 필수값이 달라서 요청할 때 계속 특정 값들이 zod safeParse 검증을 통과하여 전달될 때 제외되는 현상이 있었다.
그래서 UND_ERR_REQ_CONTENT_LENGTH_MISMATCH 에러로 이어졌고, stack overflow 검색 결과, 이는 서버에서 받아들이는 데이터의 길이와 전달된 데이터의 길이가 다를 때 발생하는 것이었다.
그래서 해당되는 데이터들을 데이터가 없을 때 undefined, null, default value 등으로 지정하며 해결하려고 했지만 같은 에러가 반복되었다.
그러다가 팀원님들, 멘토님과 문제를 공유하여 함께 생각해보면서 결국 이틀만에 해결하게 되었다.
문제해결
지금까지 코딩하면서 어려운 문제가 발생하면 해결할 수 있는 방법은 늘 가까운 곳에 있었다.
이번에도 틀리지 않았고, 해결방법은 단순헸다.
이미 문제해결을 위한 1일차에 시도했던 방법이었는데, safeParse 검증이 되면 해당 검증데이터 대신 전달할 원래 데이터를 보내서 값들이 제외되지 않게 하면 길이가 안 맞는 문제는 해결됐다. 이렇게 해도 이미 검증이 통과됐으니 문제는 없었다.
두 번째 문제 해결방법은 나의 치명적 실수였다.
env 파일에 api base 경로를 적어놨는데, 끝에 /를 붙여놓고, 요청할 때 다음과 같이 요청했다.
{process.env.NEXT_PUBLIC_API_URL}/경로/경로2
결국 중간에 슬래쉬가 두 번 연달아 붙었고, 결국 요청도 실패하고 더 빠른 문제해결이 가능했음에도 안됐던 것이다.
이번 프로젝트 때는 app router의 RSC를 제대로 사용해 보고, 캐싱정책도 제대로 사용해보기 위해 노력하고 있는데, 그래서인지 브라우저 콘솔에 어떤 메세지나 로그가 표시되지 않아서 문제 해결 힌트를 터미널에서 놓치고 진행했던 것 같다.
'에러처리기록' 카테고리의 다른 글
refine 메서드로 검증하는 zod 스키마와 extend 동시 사용 불가 이슈 (0) | 2024.12.02 |
---|