게시판 프로젝트를 진행하면서 가장 헷갈렸던 부분을 고르라고 한다면, Controller부분을 작성할 때 사용되었던 @PathVariable과 @RequestParam이었다. 게시판 프로젝트를 시작하고 Controller를 처음 만들었을 때, 게시글 삭제 부분에서 @PathVariable을 사용했다가 삭제가 이루어지지 않는 것을 보고 '왜 되지 않지? 분명 게시글의 id를 받아와서 삭제 처리가 되어야되는데?'라는 생각으로(이 때는 수정, 상세 문단에서 @PathVariable을 써서 삭제도 당연히 그걸써야되는줄 알았다.)한시간을 넘게 고민을 했었다. 그러던 중 @PathVariable을 제외하고 @RequestParam도 있다는 것을 깨닫고(지금 생각하면 왜 @RequestParam을 제외했는지 이해가 되지 않는다.) @RequestParam을 적용해 봤더니 삭제 부분이 잘 동작하는 것을 확인할 수 있었다. 그래서 나는 두 어노테이션에 대한 이해가 부족함을 인지할 수 있었고 게시판 프로젝트를 완성하고 난 뒤, 두 어노테이션에 대해 공부했다. 오늘은 그 공부한 내용을 정리해 보고자 한다.
@PathVariable과 @RequestParam
두 어노테이션 모두 URL을 통해 값을 파라미터로 받아오는 역할을 한다는 것은 동일하다. 즉, 우리가 URL을 입력했을 때 들어가는 데이터를 Controller의 메소드 파라미터와 바인딩하는 역할을 하는 것이다.
그럼 이 두 어노테이션의 차이가 뭐길래 게시판 삭제파트에서 에러가 나는 것일까? 두 어노테이션은
@PathVariable
- URL 상에서 / 뒤의 변수값을 표현하는데 쓰인다.(예 : https://beginner-development.tistory.com/6의 6부분)
- 기본적으로 경로 변수는 반드시 값을 가져야하고, 값이 없는 경우 404 오류가 발생한다.
- GetMapping이나 PostMapping에서 {}로 감싸여 있는 값을 나타낸다.
- RESTful API에서 자원의 식별자를 URL 경로의 일부로 포함시킬 때 주로 사용된다.
- PathVariable은 1개의 데이터만 받아올 수 있다.
@RequestParam
- HTTP요청 파라미터를 메서드 매개변수에 바인딩할 때 사용한다. 주로 쿼리 스트링(사용자가 입력 데이터를 전달하는 방법 중 하나) 또는 폼 데이터(html에서 <form>태그에 실려 전송되는 데이터)에서 파라미터를 추출할 때 사용된다.
- URL 상에선 ?뒤에 데이터가 붙어져 쓰인다.(예 : https://beginner-development.tistory.com/manage/newpost/?type=post&return의 ?뒷부분)
- 기본값을 제공하지 않으면 기본값 설정이 가능하다. 파라미터가 필수가 아닐 경우, required 속성을 false로 설정하면 된다.
- @RequestParam에서 사용할 수 있는 속성은 name, value, required, defaultValue가 있다.(name, value : 쿼리 파라미터와 메소드의 파라미터의 이름이 다른 경우 바인딩해준다. required : 파라미터 입력 설정(기본값 : true) defaultValue : 파라미터가 입력되지 않은 경우의 기본값을 설정할 수 있다.)
- RequestParam은 여러개의 데이터를 받아올 수 있다.
위와 같은 차이가 있다. 내가 생각하기에 가장 큰 차이점은 1개의 데이터만 받아올 수 있는가, 여러개의 데이터를 받아올 수 있는가이다.
즉, 게시글 삭제 부분에서 삭제를 하려면 게시글 id, 제목, 내용을 다 불러와서 처리를 해야했기에 @PathVariable을 사용하면 아무런 동작없이 오류가 난 것이다.
'Spring MVC' 카테고리의 다른 글
Spring MVC)게시판 만들기 - DTO 추가 (0) | 2025.04.25 |
---|---|
Spring MVC)게시판 만들기 - 웹어플리케이션 실행 및 부족한 점 고찰 (0) | 2025.02.07 |
Spring MVC)게시판 만들기 - Controller 생성 (1) | 2025.02.07 |
Spring MVC)게시판 만들기 - Service 생성 (0) | 2025.02.06 |
Spring MVC)게시판 만들기 - Repository 생성 (0) | 2025.02.05 |