GET, POST 메소드부터 @Query, @Param, @Body 데코레이터의 용도까지 실제 예제를 통해 자세히 알아보겠습니다.
1. HTTP 메소드: GET vs POST
| GET | POST | |
| 용도 | 데이터를 가져올 때 | 데이터를 생성하거나 변경할 때 |
| 데이터 위치 | URL (주소창) | 요청 본문(Body) |
| 보안성 | 낮음 (주소에 노출) | 상대적으로 높음 |
| 용량 | 제한적 (URL 길이 제한) | 크고 자유로움 |
| 즐겨찾기/캐시 | 가능 | 불가 |
2. NestJS에서 사용하는 데코레이터
(1) @Query – URL 쿼리스트링에서 데이터 받기
URL 예시: GET /users?page=2&limit=10 @Get('users') getUsers(@Query('page') page: number, @Query('limit') limit: number) { return `페이지: ${page}, 제한: ${limit}`; }
- 주소 뒤에 ?key=value 형식
- 선택적 옵션, 검색 필터, 페이징 처리 등에 사용
(2) @Param – URL 경로 변수 받기
URL 예시: GET /users/123 @Get('users/:id') getUserById(@Param('id') id: string) { return `사용자 ID는 ${id}`; }
- 경로 중간에 들어가는 값
- 주로 리소스 식별자(ex. 유저 ID, 게시글 ID)에 사용
(3) @Body – POST나 PUT의 요청 본문에서 데이터 받기
// POST /users @Post('users') createUser(@Body() userData: { name: string, age: number }) { return `사용자 ${userData.name} 등록 완료`; }
- POST, PUT, PATCH와 함께 사용
- 복잡하고 구조화된 데이터를 받기에 적합
3. 사용 예시 비교

4. GET과 POST의 차이
물론 GET도 파라미터를 통해 데이터를 보낼 수 있지만,
- URL 길이 제한(대부분 브라우저에서 2048자)
- 보안 문제 (주소에 민감 정보 노출 가능)
- 복잡한 구조를 담기 어려움
이런 이유로 많은 데이터를 보낼 땐 반드시 POST를 사용합니다.
'공부 내용 정리' 카테고리의 다른 글
| RESTful 설계란? (1) | 2025.08.04 |
|---|---|
| NestJS의 Interceptor란 (0) | 2025.08.01 |
| DTO와 Exception 이란? (1) | 2025.07.30 |
| NestJS와 스마트 컨트랙트의 연동 (2) | 2025.07.29 |
| Nest.js란? (0) | 2025.07.28 |