자바스크립트가 비활성화 되어있습니다.
자바스크립트가 활성화 되어야 콘텐츠가 깨지지 않고 보이게 됩니다.
자바스크립트를 사용할수 있도록 옵션을 변경해 주세요.
- willbsoon

본문 바로가기
Java/SpringBoot

@RequestParam @PathVariable 차이점 비교

by willbsoon 2020. 5. 26.

웹 개발에서는 http의 비연결성으로 인해 데이터를 전달해줄 여러가지 방법들이 있어왔습니다.

예전에는 쿠키도 있었고 세션도 있었고 여러가지 방법들이 있었는데요. 

 

스프링에서도 두 가지의 대표적인 예시가 있습니다.

RequestParam과 PathVariable인데요. 가끔 쓰다보면 똑같은게 아닌가 하는 생각이 드는데요.

비슷하면서도 다른 2가지 방법들에 대해서 한번 기록해보겠습니다.

 

 

먼저 동일한 점으로는 데이터 전달을 위해 사용되어진다는 점입니

다. 아까도 말씀드렸지만 http에서는 요청간에 데이터를 보장해주지 않아서 이 데이터를 보관하고있어야 할곳이 필요한데 이걸 보장해주는것이죠.

아래와 같이 연결해놓고 데이터를 주고 받는 형식이 아니라 필요할때마다 연결하는것이기때문에 이전에 데이터를 가지고있지 않다는겁니다. 그래서 보조적인 방법들로 해소시켜주기때문에 사실 클라이언트 입장에서는 잘 모르는 것이죠

http 연결 과정

 

 

두번째로 uri 를 통해서 값을 전달하고 있다는것을 볼수있겠습니다.

uri 를 통해서 id와 page 또는 id를 전달하고 있습니다.

 

 

 

그럼 이제 코드상으로 한번 비교해 보겠습니다.

 

RequestParam

 

먼저 requestParam을 보면 4가지 파라미터를 가지고있습니다.

 

  • defaultValue - 값이 없을때 기본으로 전달할 값
  • name - uri에서 바인딩할 파라미터의 이름
  • value - uri에서 바인딩하여 별칭으로 정할 값
  • required - 필수적으로 값이 전달되어져야 하는 파라미터. 이게 없다면 에러가 뜰것.
public String get(
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
...
}

 

이정도가 될것같습니다.

 

PathVariable

PathVariable 에서 알아야 할것 은 딱 하나입니다. 어떤 요청이든간에 하나밖에 못쓰는겁니다. 아래와 같이 id 하나만 설정할 수 있겠습니다. 이것을 인지한 상태로 작업을 해야합니다.

@RequestMapping("/hello/{id}")    
public String getDetails(@PathVariable(value="id") String id){
.......
}

 

 

 

굳이 PathVarible 방식으로 여러 파라미터를 보내고 싶다면 비슷한 방법으로

@MatrixVariable 라는 메서드가 있으니 이것도 한번 참고해보시길 바랍니다. (여기)

이는 uri에 맵으로 데이터를 보내는 방식이다.

 

 

간단하게 정리하자면 uri를 '어떻게 전달하느냐' 에 따라 PathVariable로 받을지 RequestParam으로 받을지 결정하면 되겠습니다. 사실상 이것을 결정하는 것은 팀간 협의를 따라서 결정하면 될것 같습니다.

 

그리고 두가지를 혼합하여 사용하는 경우도 있는데 

 

@RequestMapping("/hello/{id}")    
public String getDetails(@PathVariable(value="id") String id,
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
.......
}

이와 같이 코드를 작성하면 id값에 따라 여러가지 파라미터를 주고받을수 있으며 이것을 통해 다양한 시도를 할수 있을것 같습니다.

 

 

 

 

 

그럼 이만~~

 

 

 

 

댓글