상세 컨텐츠

본문 제목

[nestJS] get일때는 number고 delete일때는 왜 parseIntPipe를 사용하는가

카테고리 없음

by esoesmio 2024. 5. 11. 19:50

본문

 

 

`@Param('id')`와 `@Param('id', ParseIntPipe)` 사용의 차이는 요청에서 받는 `id` 파라미터의 유효성 검증과 변환 방법에 있습니다.

1. **`@Param('id') id: number`**:
   - 이 방식은 `id` 파라미터를 직접적으로 `number` 타입으로 받습니다. 하지만 이는 TypeScript의 타입 시스템 내에서의 타입 지정일 뿐, 실제 HTTP 요청으로부터 받은 파라미터가 자동으로 숫자 타입으로 변환되거나 검증되지는 않습니다. 따라서, 클라이언트가 숫자가 아닌 값을 전송하면, 해당 함수 내에서 이를 처리해야 할 필요가 있습니다.

2. **`@Param('id', ParseIntPipe) id`**:
   - `ParseIntPipe`는 NestJS에서 제공하는 파이프 중 하나로, 들어오는 `id` 파라미터를 정수로 변환하려고 시도합니다. 만약 파라미터가 유효한 정수가 아니면, 에러를 발생시켜 요청을 즉시 거부합니다. 이는 함수 내부 로직을 시작하기 전에 입력 데이터의 유효성을 보장하고, 함수가 예상한 타입의 데이터만을 처리하도록 강제하는 장점을 가지고 있습니다.

**왜 ParseIntPipe를 사용하나?**
- `deleteBoard` 같은 함수에서는 데이터의 정확성이 중요합니다. `id` 값이 정수가 아니면 데이터베이스 조회나 데이터 조작에서 오류가 발생할 수 있으며, 이는 보안 문제로도 이어질 수 있습니다. `ParseIntPipe`를 사용함으로써, 이런 문제를 API 레벨에서 사전에 방지할 수 있습니다.
- 데이터를 조작하는 함수(예: 삭제)에서는 입력 값에 대한 엄격한 검증이 더 중요할 수 있습니다. `getBoardById`의 경우, 만약 `id`가 숫자 형태가 아닐 때 서비스 로직 내에서 다루거나 무시할 수 있지만, `deleteBoard`는 보다 정확한 `id` 입력을 요구하는 작업이기 때문입니다.

이러한 이유로 `deleteBoard` 함수에서는 `ParseIntPipe`를 통해 요청의 `id`를 미리 검증하고 처리하는 것이 좋습니다. 이렇게 함으로써 함수의 내부 로직은 유효한 데이터에만 집중할 수 있으며, 데이터베이스 오류나 잠재적인 보안 문제를 예방할 수 있습니다.

댓글 영역