HTML form과 Spring MVC 요청 처리 정리
아래 예제는 HTML form과 JavaScript를 통해 서버로 요청을 보내고, Spring MVC에서 이를 어떻게 처리하는지를 보여준다.
주 목적은 요청 방식(GET/POST), 데이터 전달 방식(PathVariable, RequestParam, JSON)에 따른 서버 처리 흐름을 이해하는 것이다.
1. HTML form은 무엇을 하는가
HTML의 form 태그는 사용자 입력값을 HTTP 요청으로 변환해 서버로 전송하는 역할을 한다.
브라우저가 기본적으로 제공하는 기능이기 때문에, 별도의 JavaScript 없이도 요청을 보낼 수 있다.
- method : HTTP 요청 방식 (GET / POST)
- action : 요청을 보낼 URL
- input name : 서버로 전달될 파라미터 이름
서버 입장에서는 누가 요청을 보냈는지보다
어떤 URL로, 어떤 방식으로, 어떤 데이터가 왔는지가 중요하다.
2. PathVariable 방식
요청 형태
GET /hello/request/star/Robbie/age/95
특징
- URL 경로 자체에 데이터가 포함된다
- 리소스를 명확히 표현할 때 자주 사용
- REST API에서 매우 자주 사용되는 방식
Controller
@GetMapping("/star/{name}/age/{age}")
@ResponseBody
public String helloRequestPath(@PathVariable String name, @PathVariable int age) {
return String.format("Hello, @PathVariable.<br> name = %s, age = %d", name, age);
}
3. RequestParam + GET 방식
요청 형태
GET /hello/request/form/param?name=Robbie&age=95
특징
- 쿼리 스트링(query string)을 통해 데이터 전달
- 검색 조건, 필터링 등에 자주 사용
Controller
@GetMapping("/form/param")
@ResponseBody
public String helloGetRequestParam(@RequestParam(required = false) String name, int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
4. RequestParam + POST 방식 (form 전송)
요청 형태
POST /hello/request/form/param
Content-Type: application/x-www-form-urlencoded
name=Robbie&age=95
특징
- form 태그의 기본 POST 전송 방식
- 데이터가 URL에 노출되지 않음
- 브라우저 기반 폼 제출에서 가장 전통적인 방식
Controller
@PostMapping("/form/param")
@ResponseBody
public String helloPostRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
5. @RequestParam 생략에 대한 이해
사실 Spring에서는 요청 파라미터 이름과 메서드 파라미터 이름이 같다면
@RequestParam을 생략할 수 있다.
하지만 생략했을 경우 다음 문제가 발생할 수 있다.
- 요청 데이터가 없으면 400 Bad Request 발생
- 필수 여부를 코드로 명확히 표현하기 어렵다
따라서 명시적으로 @RequestParam을 사용하는 것이 권장된다.
6. required 옵션
@RequestParam은 기본적으로 required = true 상태이다.
즉, 해당 파라미터가 요청에 없으면 에러가 발생한다.
@RequestParam(required = false) String name
required = false 특징
- 요청 파라미터가 없어도 에러 발생하지 않음
- 값이 없을 경우 null 반환
선택적인 값(optional parameter)이 있을 때 메서드를 여러 개로 나누는 것은 비효율적이므로,
이런 경우 required = false 옵션을 사용한다.
7. PathVariable에서도 required 사용 가능
@PathVariable 역시 required = false 옵션을 사용할 수 있다.
@PathVariable(required = false) String name
다만 PathVariable은 URL 구조 자체가 달라지기 때문에,
실무에서는 보통 URL 패턴을 분리해서 처리하는 경우가 많다.
8. JSON 요청은 form과 다르다
마지막 예제에서는 fetch를 사용해 JSON 형태로 데이터를 전송한다.
fetch('/hello/request/form/json', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
이 방식은 form 태그가 아니라 JavaScript가 직접 HTTP 요청을 생성한다.
현업에서는 이 방식이 훨씬 더 많이 사용된다.
핵심 정리
- form 태그는 HTTP 요청을 쉽게 만들어주는 브라우저 기능
- 서버는 HTML 여부와 관계없이 요청만 처리
- PathVariable: URL 경로 기반 데이터 전달
- RequestParam: 쿼리 스트링 또는 form 데이터 처리
- @RequestParam은 생략 가능하지만 명시 사용 권장
- required=false 사용 시 null 반환
- 실무에서는 form보다 JSON 기반 요청이 주류
'BackEnd > 내일배움캠프' 카테고리의 다른 글
| 13. 메모장 프로젝트 설계 (0) | 2026.02.10 |
|---|---|
| 12. HTTP 데이터를 객체로 처리하는 방법 (0) | 2026.02.10 |
| 10. Jackson이란 무엇일까? (0) | 2026.02.10 |
| 9. 데이터를 Client에 반환하는 방법 (0) | 2026.02.10 |
| 8. 정적 페이지와 동적 페이지 (0) | 2026.02.10 |