스프링 부트는 웹 애플리케이션을 개발할 때 많은 편의성을 제공해 주는 프레임워크인데, 이 중에서도 @PathVariable과 @RequestParam 애노테이션은 URL 경로나 요청 파라미터를 처리할 때 사용되는 애노테이션입니다.
이번 블로그에서는 @PathVariable과 @RequestParam 애노테이션의 개념, 사용법, 그리고 둘 사이의 차이점에 대해 알아보겠습니다.
@PathVariable
@PathVariable 애노테이션은 URL 경로에서 변수 값을 추출하여 메서드의 파라미터로 바인딩하는 역할을 합니다.
즉, URL 경로의 일부를 변수로 사용하고자 할 때 주로 사용됩니다.
이 애노테이션은 중괄호{}로 감싼 경로 변수와 메소드 파라미터를 매핑하여 값을 전달합니다.
@GetMapping("/member/{id}") // @PathVariable URL 경로에서 값을 가져올 때 사용
public String findById(@PathVariable Long id, Model model) {
MemberDTO memberDTO = memberService.findById(id);
model.addAttribute("member", memberDTO);
return "detail";
}
위 코드에서 "/member/{id}" 경로는 각 회원의 상세 정보를 조회하는 url 주소입니다. {id}에서 id는 사용자의 ID 값을 나타내는 변수입니다.
@PathVariable 애노테이션을 통해 "id" 경로 변수를 자료형이 Long인 변수명 id 파라미터에 바인딩합니다.
이후 findById() 메서드 내에서 id 파라미터를 통해 각 사용자의 정보를 조회할 수 있습니다.
※ /member/{id}, /member/delete/{id} ...
위와 같이 Rest api를 개발하면서 중괄호로 감싼 경로 변수는 저장된 데이터베이스에 해당 데이터를 조회, 수정, 삭제할 때 주로 사용합니다. 저장된 여러 데이터 중에서 pk값인 id 값을 통해 처리합니다.
@RequestParam
@RequestParam 애노테이션은 요청 파라미터를 메서드의 파라미터로 바인딩하는 데 사용됩니다.
쿼리 문자열(query string) 또는 폼 데이터(form data)와 같은 요청 파라미터를 추출할 때 주로 사용됩니다.
@RequestParam은 파라미터 이름과 메소드 파라미터를 매핑하여 값을 전달합니다.
@PostMapping("/member/save")
public String save(@RequestParam("memberEmail") String memberEmail,
@RequestParam("memberPassword") String memberPassword,
@RequestParam("memberName") String memberName) {
memberService.save(new memberDTO(memberEmail, memberPassword, memberName));
return "login";
}
<form action="/member/save" method="post">
<!-- name속성: 서버로 전송할 때 변수 이름의 역할 -->
이메일 : <input type="text" name="memberEmail"> <br>
비밀번호 : <input type="password" name="memberPassword"> <br>
이름 : <input type="text" name="memberName"> <br>
<input type="submit" value="회원가입">
</form>
위 코드에서 "/member/save"는 사용자를 생성하는 경로입니다.
@RequestParam 애노테이션은 html 파일의 form 태그 안에 name 속성을 메소드 파라미터(memberEmail, memberPassword, memberName)에 바인딩합니다.
이후 메소드 내에서 memberEmail, memberPassword, memberName을 사용하여 사용자 정보를 처리할 수 있습니다.
@PathVariable와 @RequestParam 정리
사용 목적:
@PathVariable은 URL 경로에서 변수 값을 추출할 때 사용됩니다.
@RequestParam은 요청 파라미터를 추출할 때 사용됩니다.
사용 방법:
@PathVariable은 중괄호{}로 감싼 경로 변수와 메소드 파라미터를 매핑합니다.
@RequestParam은 파라미터 이름과 메소드 파라미터를 매핑합니다.
값 전달 방식:
@PathVariable은 경로 변수의 값을 추출하여 파라미터에 전달합니다.
@RequestParam은 요청 파라미터의 값을 추출하여 파라미터에 전달합니다.