티스토리 뷰

@PathVariable이란?

  • 경로 변수를 표시하기 위해 메서드에 매개변수에 사용된다.
  • 경로 변수는 중괄호 {}로 둘러싸인 값을 나타낸다.
  • URL 경로에서 변수 값을 추출하여 매개변수에 할당한다.
  • 기본적으로 경로 변수는 반드시 값을 가져야 하며, 값이 없는 경우 404 오류가 발생한다.
  • 주로 상세 조회, 수정, 삭제와 같은 작업에서 리소스 식별자로 사용된다.
@GetMapping("/add/{id}")
    public ModelAndView reviewAdd(@PathVariable("id") Long id){
    	...
    }
URL
localhost:8080/add/1

@RequestParam이란

  • URL의 쿼리 문자열에 포함된 파라미터 값을 메서드의 매개변수로 전달한다.
  • 선택적으로 매개변수에 기본값을 지정할 수 있으며, 매개변수가 필수가 아닐 때 required=false로 설정할 수 있다.
  • @RequestParam이 붙은 매개변수는 필수이며, 요청에 해당 파라미터가 포함되지 않으면 400 Bad Request 오류가 발생한다.
@GetMapping("/add")
    public ModelAndView reviewAdd(@RequestParam("id") Long id){
    	...
    }
URL
localhost:8080/add?id=1

 

여기부터는 제가 프로젝트를 진행하면서 @PathVariable과 @RequestParam에 대해 느낀점입니다.

 

직접 사용하기 전에는 큰 차이를 못느꼈습니다. 어떤 것을 사용해야될까?  

둘 중 어느 것을 사용해도 구현은 가능했으니 계속 고민을 했습니다.

 

느낌점은 두 가지가 있습니다.

 

첫번째는 경로 이름을 설정하는 것이였습니다. 

 

리뷰 작성

 

user가 예약한 뮤지컬 제목을 들고와서 제목리스트를 보여주는 것입니다.

@GetMapping("/add")
    public ModelAndView reviewmove(@RequestParam("user") String user){
        List<String> titleList = reviewService.findtitle(user);
        System.out.println(titleList);

        ModelAndView mv = new ModelAndView();
        mv.setViewName("/review/review-add");
        mv.addObject("list", titleList);
        return mv;
    }

 

 

리뷰 작성

 

리뷰 작성에서 제목에 맞는 리뷰 작성 페이지를 제공하는 것입니다. 

@GetMapping("/add-resno")
    public ModelAndView reviewmoveV2(@RequestParam("resno") Long resno){

        MusicalDTO dto = musicalService.findByResno(resno);

        List<String> title = new ArrayList<>();
        title.add(dto.getTitle());

        ModelAndView mv = new ModelAndView();
        mv.setViewName("/review/review-add");
        mv.addObject("list", title);
        return mv;
    }

 

문제점은 여기서 발생합니다. 추가적인 파라미터를 원할 때 마다 add뒤에 추가로 더 붙여줘야했습니다.

비슷한 기능을 하는 코드가 증가할 수록 가독성이 떨어질 것이라고 생각했습니다.

 

RESTful API 법칙을 간단히 설명하면 다음과 같습니다.

RESTful API 설계에서 적절한 네이밍 규칙은 API의 가독성을 높이고, 일관성을 유지하며, 사용자에게 명확한 의미를 전달하는 데 중요한 역할을 합니다.

 

동료 개발자가 관련 코드를 봤을 때 명확히 기능을 파악할 수 있어야 한다고 생각합니다.

 

 

PathVariable

@GetMapping("/add/{resno}")
    public ModelAndView reviewAddV2(@PathVariable("resno") Long resno){

        MusicalDTO dto = musicalService.findByResno(resno);

        List<String> title = new ArrayList<>();
        title.add(dto.getTitle());

        ModelAndView mv = new ModelAndView();
        mv.setViewName("/review/review-add");
        mv.addObject("list", title);
        return mv;
    }

 

{} 안에 원하는 파라미터를 직접적으로 보여주기 때문에 기능을 파악하기 더 수월합니다.

개인적으로 PathVariable을 사용하는 것이 가독성이 좋았습니다.

가독성이 좋다는 것은 유지보수 차원에서 더 좋은 것이라 생각이 듭니다.

 

 

두 번째는 파라미터를 받는 법입니다. 

 

Form에서 데이터를 여러 개를 받는다면 

PathVariable만 사용한다면 다음과 같이 코드가 작성될 것입니다.

@GetMapping("/add/{...}/{...}/{...}/{...}")

 

RequestParam은 /add만 작성해도 됩니다. 

@GetMapping("/add")

 

데이터를 여러개 받는 상황이 있다면 RequestParam을 사용해서 받는 것이 좋을 것 같습니다.

저는 두 가지 모두 사용하는 것이 좋다고 생각합니다.

@GetMapping("/add/{id}")
public String review(@PathVariable("id") int id, @RequestParam("user") String user) {
	return "";
}

 

 

추가로 값을 입력받아 보여지는 부분에서 차이가 있습니다.

 

PathVariable를 사용하는 경우에는 /add/1 이라는 것을 사용자가 보기 때문에 어떤 변수에 값이 들어갔는지 확인 할 수 없습니다. 

 

RequestParam을 사용하는 경우에는 /add/1?user=유저 로서 user에 값이 들어간 것을 확인할 수 있습니다. 

 

사용자에게 입력된 정보에 대해 보여주는 작업이 필요하다면 RequestParam이 더 좋은 것입니다.

 

 


참고 블로그

https://woogienote.tistory.com/104

 

[Spring Boot] @PathVariable 이란 ?

🔍@PathVariable 이란? 경로 변수를 표시하기 위해 메서드에 매개변수에 사용된다. 경로 변수는 중괄호 {id}로 둘러싸인 값을 나타낸다. URL 경로에서 변수 값을 추출하여 매개변수에 할당한다. 기본

woogienote.tistory.com

 

개인적인 생각도 들어있고 정확하지 않을 수 있지만 제가 생각하고 배운점에 대해서 기록하기 위해서 작성했습니다.

'CS > Web' 카테고리의 다른 글

정적 컨텐츠와 동적 컨텐츠  (0) 2024.08.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함