우리가 자주 코드를 작성하다보면, client로부터 인자를
path Variable로 받을지, RequestParam으로 받을지, 아니면 RequestBody로 받을지 고민된다.
GetMapping에서는 RequestBody를 지원하지 않기에, 자연스레 GetMapping을 할 때는 PathVariable vs RequestParam으로 귀결되게 된다.
이런 상황일 때, 나름의 기준이 있으면 좋을 것 같아 정리해보려 한다.
1. Query Parameter
/users?id=123 # 아이디가 123인 사용자를 가져온다.
@GetMapping("/user")
public String getUser(@RequestParam String id,
@RequestParam(name="password" String pw){
}
name이라는 파라미터를 통해 uri에서 바인딩할 파라미터의 이름을 지정할 수 있다.
또한 required라는 파라미터를 통해 해당 값이 필수적으로 전달되어야한다라는 것을 명시할 수 있다.
2. Path Variable
/users/123 # 아이디가 123인 사용자를 가져온다.
3. 각각 언제 사용해야하는가?
참고한 포스팅에서는 다음과 같이 명시한다.
어떤 resource를 식별하고 싶으면 Path Variable을 사용하고,
정렬이나 필터링 등을 한다면 Query Parameter을 사용하는 것이 Best Practice이다.
/users # 사용자 목록을 가져온다.
/users?age=20 # 나이가 20인 사용자를 가져온다.
/users/123 # 아이디가 123인 사용자를 가져온다.
또한, 기본적인 CRUD 기능을 위해서 또 다른 URL이나 Query Parameter를 정의할 필요는 없다.
대신에 원하는 기능에 맞게 HTTP 메서드를 변경하면 된다.
/users [GET] # 사용자 목록을 가져온다.
/users [POST] # 새로운 사용자를 생성한다.
/users/123 [PUT] # 사용자를 갱신한다.
/users/123 [DELETE] # 사용자를 삭제한다.
납득이 간다.
pathVariable은 하나만 전달할 수 있다.
그렇기에 보통 id로 인지하고 식별할 때 사용할 것이다.
반면에 Query Parameter는 여러 개를 전달할 수 있다.
여러 개의 인자가 필요할 때 RequestParam을 고려해보자.
나라면, id 처럼 값 하나를 통해 식별 가능할 수 있는 상황일 때 path variable을 사용하고
그게 아니라 인자의 이름도 필요하다면 request Param을 적극적으로 사용해보려 한다..!
참고
https://medium.com/@fullsour/when-should-you-use-path-variable-and-query-parameter-a346790e8a6d
'스프링 정리' 카테고리의 다른 글
JPA의 save와 saveAll의 성능차이 (1) | 2023.12.04 |
---|---|
왜 생성자 주입이 @Autowired(필드 주입)보다 좋을까? (0) | 2023.11.07 |
테스트코드에서의 @Transactional (0) | 2023.10.30 |
Spring Batch - @PersistJobDataAfterExecution (0) | 2023.04.04 |
Spring Security & JWT(Json Web Token) 활용 예제 (0) | 2023.03.28 |