[NestJS] 파라미터 라우트가 정적 경로 라우트 이후에 선언되어야 하는 이유

cabbage·2023년 4월 21일
0

NestJS

목록 보기
8/17
post-thumbnail

NestJS 공식문서에서 Controller 설명을 보던 중, Route parameters에 다음과 같은 문장이 있었다.

Routes with parameters should be declared after any static paths. This prevents the parameterized paths from intercepting traffic destined for the static paths.

해석했을 때, 파라미터 라우트는 모든 정적 경로 라우트 이후에 선언되어야 한다. 그래야 파라미터 경로가 정적 경로로 향하는 트래픽을 가로채는 것을 방지할 수 있다. 라는 의미로 받아들였다.

그런데 왜 파라미터 경로가 정적 경로로 향하는 트래픽을 가로챈다는 것인지 이해가 되지 않았는데, 아래 예시를 통해 쉽게 이해할 수 있었다.

아래와 같은 두 개의 라우트가 있다고 가정해 보자.

/users/:id
/users/profile
  • /users/:id - 동적으로 id 값을 받을 수 있는 파라미터 라우트
  • /users/profile - 정적 경로 라우트

위 두 개의 라우트를 선언할 때, /users/:id 라우트를 /users/profile 라우트보다 먼저 선언하면, /users/profile 경로로 요청이 들어오더라도 /users/:id 라우트에서 처리된다. 이 경우 요청이 잘못된 라우트에서 처리되어 올바른 경로에 요청을 전달하지 못하게 된다.

만약 /users/:id 라우트에서 id를 number 타입으로 선언한 상태에서 /users/profile 경로로 요청이 들어오면 id에는 'profile'이라는 문자열이 들어가게 되고, 아래와 같은 에러가 발생할 수 있다.

{
    "statusCode": 400,
    "message": "Validation failed (numeric string is expected)",
    "error": "Bad Request"
}

따라서 정적 경로 라우트인 /users/profile을 우선 선언한 다음 파라미터 라우트인 /users/:id를 선언해야 한다. 이렇게 하면 정적 경로와 동적 경로가 구분되어 올바른 라우트 핸들러로 요청이 전달된다.

/users/profile
/users/:id
profile
캐비지 개발 블로그입니다. :)

0개의 댓글