웹 애플리케이션 개발에서 HTTP 요청을 통해 Client로부터 데이터를 수신하는 것은 매우 중요한 작업입니다.
Spring에서는 이러한 Http 요청 파라미터 값을 간편하게 처리할 수 있는 다양한 기능을 제공합니다.
특히, URL 경로와 Query String를 통해 데이터를 수신하는 두 가지 주요 방법인 Path Variable과 Request Param 이 두 가지 방법은 각기 다른 상황에서 유용하게 사용됩니다.
Path Variable란❓
Path Variable은 말 그대로 경로를 변수로 사용합니다. Path Variable은 GET 방식으로 URL 경로의 일부를 변수로 사용하여 서버에 HTTP 요청을 보낼 때 사용됩니다.
간단하게 정리하면 "데이터를 URL 경로에 추가하는 방법"이라고 할 수 있습니다.
이를 통해 변수 값을 컨트롤러 메서드의 매개변수로 전달할 수 있습니다.
Path Variable 사용 방법
Spring boot에서 Path Variable을 사용하는 방법은 간단합니다.
URL 경로에서 변수 부분을 /star/{name}/age/{age}처럼 중괄호 {}로 감싸고, 이를 컨트롤러 메서드에서 @PathVariable 어노테이션을 사용하여 매핑합니다.
위 코드처럼 @PathVariable이라는 어노테이션을 메서드 파라미터에 사용합니다.
이는 URL 경로 (http://localhost:8080/hello/request/star/ZINU/age/123)에 포함된 {} 데이터를 (name, age) 해당 파라미터로 가져오겠다는 뜻입니다.
String.format을 사용하여 간단하게 표현해 보았습니다.
위 결과를 보면 Client에서 보낸 데이터를 Server가 잘 받아서 다시 Client에 잘 보내준 것을 알 수 있습니다.
URL 예시: http://localhost:8080/hello/request/star/ZINU/age/123
또한 이 URL을 통해 서버로 Path Variable 형태로 요청한 것을 볼 수 있습니다.
Request Param란❓
@RequestParam은 스프링 프레임워크에서 사용되는 어노테이션으로, URL의 쿼리 파라미터를 메서드의 파라미터로 매핑하는 데 사용됩니다.
이를 통해 클라이언트가 보낸 HTTP 요청에서 쿼리 문자열에 포함된 값을 쉽게 추출할 수 있습니다.
간단하게 정리하면 "데이터를 URL 경로 마지막에? 와&를 사용하여 추가하는 방법"이라고 할 수 있습니다.
Request Param 사용 방법
Spring boot에서 Request Param을 사용하려면, URL 쿼리 스트링의 파라미터를 @RequestParam 어노테이션을 통해 매핑합니다.
위 코드처럼 @RequestParam이라는 어노테이션을 메서드 파라미터에 사용합니다.
@RequestParam 어노테이션을 메서드 파라미터에 사용합니다.
이는 API 경로 뒤의 '?' 이후에 key와 value 형태로 주어진 경로(http://localhost:8080/hello/request/form/param? name=ZINU&age=123)에 포함된 데이터 name과 age를 해당 파라미터로 가져오겠다는 뜻입니다.
String.format을 사용하여 간단하게 표현해 보았습니다.
위 결과를 보면 Client에서 보낸 데이터를 Server가 잘 받아서 다시 Client에 잘 보내준 것을 알 수 있습니다.
URL 예시 : http://localhost:8080/hello/request/form/param? name=ZINU&age=123
또한 이 URL을 통해 서버로 RequestParam 형태로 요청한 것을 볼 수 있습니다.
form 태그 POST
POST http://localhost:8080/hello/request/form/param
또한 HTML의 form 태그를 사용하여 POST 방식으로 HTTP 요청을 보낼 수 있습니다.
<form method="POST" action="/hello/request/form/model">
<div>
이름: <input name="name" type="text">
</div>
<div>
나이: <input name="age" type="text">
</div>
<button>전송</button>
</form>
HTTP POST는 HTTP GET과 다르게 Body 즉 Payload를 가지고 있습니다.
이 Payload 부분에 "name=ZINU&age=123" 이런 식으로 Query String방식으로 데이터를 보냅니다.
이때 Payload(Body)에 담긴 데이터를 서버에서 받고자 한다면 @RequestParam 어노테이션을 사용하면 됩니다.
위 결과를 보면 알 수 있듯이 HTTP 요청이 정상적으로 처리된 것을 볼 수 있습니다.
개발자 도구를 통해 확인해 보면:
- Request Method: POST로 정상적으로 전송됨
- Payload (Body): "name=Park&age=123"와 같은 Query String 방식으로 데이터가 서버로 전송된 것을 확인할 수 있습니다.
@RequestParam 생략 가능성
@RequestParam 생략
위 코드를 보면 age부분에 @RequestParam 어노테이션이 생략된 것을 볼 수 있습니다.
그러나 결과를 보면 정상적으로 처리가 됐습니다. 이는 Spring이 메서드의 파라미터 이름을 자동으로 바인딩해 주기 때문입니다. 이처럼 @RequestParam은 생략이 가능합니다.
@RequestParam의 기본 동작
@RequestParam은 기본적으로 required=true로 설정되어 있습니다. 즉, 요청 파라미터가 반드시 있어야 함을 의미합니다.
따라서 Query String의 "name"은 필수 값이므로 데이터를 넣지 않고 보낸다면 아래와 같이 에러(400 Bad Request)가 발생합니다.
결과를 보기 쉽게 "POSTMAN" 어플리케이션 을 사용했습니다.
console창에서도 "Required request parameter 'name' for method parameter type String is not present"라는 에러가 발생했습니다.
required 옵션
@RequestParam의 required 옵션을 false로 설정하면 해당 파라미터는 선택적으로 제공될 수 있습니다.
이렇게 설정하면, Client가 name 또는 age 파라미터를 보내지 않더라도 서버에서 에러가 발생하지 않습니다.
파라미터가 없을 경우에는 null로 처리되며, 적절한 기본값이나 메시지를 제공할 수 있습니다.
'Framework > Spring\Spring boot' 카테고리의 다른 글
[Spring] Spring에서 빈 이름 결정 방식 (0) | 2024.07.28 |
---|---|
[Spring] Spring IoC 컨테이너에 Bean 수동 등록하기 (@Configuration, @Bean) (0) | 2024.07.28 |
[Spring] Spring IoC Container와 Bean 알아보기 (0) | 2024.07.24 |
[Spring] Spring MVC: HTTP 요청 데이터의 객체 변환 방법 (@ModelAttribute vs @RequestBody) (2) | 2024.07.23 |
[Spring] 로그(logger) 알아보기 (0) | 2024.03.17 |