<경위 설명 길음.. 결론은 제일 밑에!>
멋지게 코드를 짜고 test를 돌리니 더 멋지게 500에러가 떴다.
500에러는 서버오류인걸 알고 있었기에 내가 잘못 짠 코드가 있나 확인을 했다.
근데 아무리 확인해도 코드 넘 잘 짰음..
에러 메시지를 다시 확인해보니
이상하게도 어느 부분에서 오류가 났는지는 나타나지 않고
[Nest] 3589 - 2023. 05. 31. 오후 12:47:41 ERROR Object:
{
“statusCode”: 500,
“timestamp”: “2023-05-31T03:47:41.648Z”,
“path”: “/my”,
“message”: “”,
“name”: “”
}
계속 이렇게만 뜨는거임
client에서 요청을 보내는 엔드포인트가 잘못 설정됐을 수도 있어서
swagger랑 post man을 확인해봤는데 넘 멀쩡함..
입력값을 잘못 줬나 확인해봐도 넘 잘 줬음...
ㅇㅏ ~ ~ 엔드포인트 구성 코드가 잘 못 됐구나^^..
그래서 엔드포인트 코드를 확인해봤는데
또 엔드포인트도 넘 잘 짰음...
export const GetMyProduct = () =>
applyDecorators(
Get('/my'),
ApiOperation({ summary: '내 상품 확인' }),
ApiCreatedResponse(),
);
그래서 원인을 찾기 위해 엔드포인트로 여러가지 실험을 해봤다.
실험결과
1. '/my', '/user', '/abcd' 와 같이 한개의 엔드포인트로 이루어지면 500오류가 남
2. '/my/point', '/user/list', '/abcd/efgh' 와 같이 두개의 엔드포인트로 이루어지면 200코드가 뜸
3. 근데 '/11', '/1234' 와 같이 숫자로 작성하면 한개의 엔드포인트로 이루어졌더라도 200코드가 뜸
대체 뭘까....!!!
다른 엔드포인트랑 중복되는 것도 없고, 오탈자도 없는데....!!!
원인은 허무했다.
export const GetUserInfo = () =>
applyDecorators(
Get('/:userId'),
ApiOperation({ summary: '유저 정보 조회' }),
ApiCreatedResponse({ schema: {} }),
);
export const GetMyProduct = () =>
applyDecorators(
Get('/my'),
ApiOperation({ summary: '내 상품 확인' }),
ApiCreatedResponse(),
);
위쪽 GetUserInfo가 기존에 있던 다른 엔드포인트 중 하나이고
아래쪽 GetMyProduct가 에러가 났던 엔드포인트이다.
문제점을 찾아보시오....
정답은.. ~~ 엔드포인트 중복이었다! ^^
저게 중복이라니...!!
쉽게 말 하자면 오류가 났던 GetMyProduct의 '/my'의... my<-를
GetUserInfo가 본인한테 요청 들어온 param (':/userId')인 줄 알고 Int로 보내줘야지 왜 String으로 보내주냐면서 500오류를 외쳤던 것.....
그래서 GetMyProduct의 엔드포인트를 숫자로 작성하면 Int로 잘 들어갔기 때문에 200코드가 떴던 것이다.....^^
결론은
'/my' 엔드포인트와, '/:param' 엔드포인트는 중복된다...ㅎ
'/my' 엔드포인트의 'my'가 '/:param' 엔드포인트의 param으로 처리됐던것이다......
해결방법은
':/userId' 엔드포인트를 '/user/:userId' 로 수정하기
그리고 잘못된 엔드포인트로인한 서버 오류를 방지하기 위해
인자를 받는 코드쪽에 ParsIntPipe를 추가해서 String으로 들어와도 Int로 변환해주는 과정을 추가하거나
인자 타입을 dto로 따로 작성해 타입 변경을 하려고 한다.
이 두가지는 따로 글을 작성할 예정이다!