이번 포스팅에서는 쿼리 스트링과 요청 DTO의 차이점에 대해 기록한다.
오늘 과제에서 생긴 문제를 해결하던 중에 팀원분들에게 조언을 받았다.
나는 회원 이름으로 조회할 때 @RequestParam을 이용해서 쿼리 스트링으로 조회했는데, 팀원분들은 GetMemberRequest 처럼 DTO로 이름을 받아서 구현하셨다고 했다.
@GetMapping("/api/members")
public ResponseEntity<GetMemberResponse> getMemberByName(@RequestParam("name") String name) {
return ResponseEntity.status(HttpStatus.OK).body(memberService.findMemberByName(name));
}
두 방식에 무슨 차이가 있는지 궁금해서 알아보았다.
/api/members/?name=홍길동"@RequestParam 어노테이션을 사용해서 요청 파라미터의 이름("name")과 컨트롤러 메소드의 파라미터(String name)을 직접 매핑한다.
@ModelAttribute를 사용하여 쿼리 스트링의 여러 파라미터를 DTO의 필드에 바인딩한다.@RequestBody를 사용한다.@RequestParam을 사용하는 것이 코드를 간결하게 하고 직관적이다.@Valid나 @Validated를 활용하여 DTO에서 일괄적으로 입력값 검증을 수행하기 편리하다.일반적으로 조회 조건(파라미터)가 2개가 넘어가거나, 앞으로 늘어날 가능성이 있다고 판단되면 요청 DTO를 사용하는 게 좋아보인다.
조회 필터링 조건이 늘어나도 메소드 시그니처를 변경하지 않아도 되기 때문이다.