- Published on
스프링 프레임워크 첫걸음 - 7장 : 요청 파라미터 취득하기
- Authors
- Name
- 손예지(Liv)
7장에서는 요청 파라미터에 대해서 다룹니다. 요청 파라미터(request parameter)는 서버에 전송되는 값을 의미합니다. 요청 파라미터의 종류에 대해서 알아보고 각각의 방법으로 입력을 받는 프로그램을 만들어 보겠습니다.
1. 요청 파라미터의 종류
서버에 요청을 보내는 방식에는 여러가지가 있는데, 그 중 요청 파라미터의 종류는 다음과 같습니다.
요청에서 쿼리스트링(query string)으로 보내지는 값 HTTP 통신에서 GET 메서드로 서버에 데이터를 전송하는 것을 의미합니다.
요청 본문(body)에 저장되어 보내지는 값 HTTP 통신에서 POST 메서드로 서버에 데이터를 전송하는 것을 의미합니다.
뷰에서 클릭한 버튼의 name 속성 값 뷰에서 버튼을 통해 값을 전달할때 name 속성을 통해 버튼을 구별하는데, 이 속성값을 의미합니다.
URL 경로(path)의 일부로 보내지는 값 링크와 같은 URL의 일부로 보내지는 값을 의미합니다.
요청 파라미터를 취득하려면 @RequestParam
어노테이션을 사용하거나, Form 클래스를 따로 생성해 만드는 방식이 있습니다. 각각의 방식을 통해 서버에 어떻게 요청을 전달하는지 살펴보겠습니다.
2. @RequestParam을 사용해 입력값을 받는 프로그램 만들기
화면에 값을 입력하고, 제출하면 입력한 값이 출력되는 두가지 화면을 만들어 보도록 하겠습니다. 먼저 스프링 프로젝트를 생성합니다. 이때 필요한 의존성은 Lombok, Thymeleaf, Spring Web, Spring Boot DevTools 입니다. 스프링 프로젝트가 생성되었다면 컨트롤러를 생성합니다.
컨트롤러에서 값 매핑해주기
package livoi.mvctest.controller;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDate;
@Controller
public class RequestParamController {
@GetMapping("show")
public String showView(){
return "entry";
}
@PostMapping("confirm")
public String confirmView(
Model model, @RequestParam String name, @RequestParam Integer age,
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @RequestParam LocalDate birth
) {
// 모델에 저장
model.addAttribute("name", name);
model.addAttribute("age", age);
model.addAttribute("birth", birth);
// 반환 값으로 뷰 이름을 돌려줌
return "confirm";
}
}
컨트롤러임을 명시하는 @Controller
어노테이션을 클래스 상단에 입력합니다. 입력한 화면을 출력해주는 /show 주소를 가진 showView 클래스와 입력창에서 입력한 값들을 저장해줄 /confirm 주소의 confirmView 클래스를 생성합니다.
showView 클래스는 화면에 입력한 값을 전달받아 출력해 주는 목적이기 때문에 GET 메서드를 의미하는 @GetMapping
어노테이션을 사용합니다. /show 이름의 링크를 호출하면 entry 이름의 뷰 이름을 반환해줍니다.
confirmView 클래스는 입력한 데이터를 저장하는 클래스 입니다. 여기서 Model 이라는 객체가 사용되었는데, Model은 스프링 MVC에서 컨트롤러의 메서드와 뷰 간에 데이터를 전달하는데 사용됩니다. 이때 Model 객체는 key-value 형태로 저장됩니다. Model 객체에 @RequestParam
을 통해 값을 매핑 해서 전달하는데, model.addAttribute
에서 입력한 key- value 값을 Model 객체에 추가합니다.
뷰에서 입력받고 출력해주기
다음으로는 사용자가 입력할 화면을 생성합니다. 컨트롤러에서 생성했던 entry에 대응 하는 html 파일을 resource > template 하단에 만듭니다. form 태그 부분을 살펴보면, POST 메서드를 사용해 /confirm 링크로 하단의 값을 전달한다는 것을 의미합니다. 나이, 생년월일 입력 부분에 input type을 각각 number 과 date로 지정해줬는데, 나이 입력란에서는 숫자만 입력 할 수 있고 생년월일 입력란에서는 날짜를 선택할 수 있게 됩니다.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>입력 화면</title>
</head>
<body>
<form th:action="@{/confirm}" method="post">
<div>
<label for="name">이름 :</label>
<input type="text" name="name" id="name">
</div>
<div>
<label for="age">나이:</label>
<input type="number" id="age" name="age" min="1" max="100">
</div>
<div>
<label for="birth">생년월일:</label>
<input type="date" id="birth" name="birth">
</div>
<input type="submit" value="전송">
</form>
</body>
</html>
위에 뷰는 화면의 값을 입력하기 위한 뷰였다면, 이제 만들어볼 뷰는 입력한 값을 출력해주는 뷰 입니다. 입력 부분보다 상대적으로 간단합니다. [[${}]]
형태로 태그 안에서 고정값과 함께 변수가 출력될 수 있도록 입력합니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>확인 화면</title>
</head>
<body>
<ul>
<li>이름 : [[${name}]]</li>
<li>나이 : [[${age}]]</li>
<li>생년월일 : [[${birth}]]</li>
</ul>
</body>
</html>
실행
이제 스프링부트를 실행하고 http://localhost:8080/show URL에서 입력창이 노출되는지 확인합니다.

값을 입력했다면 전송 버튼을 눌러 입력한 값이 노출되는지 확인합니다.

정리
이전 단원에서 공부한 타임리프가 뷰-컨트롤러-모델 로 어떻게 연결되는지 살펴봤습니다. 간단한 프로젝트 였지만 핵심을 다 담고 있어서 어떻게 동작하는지 원리를 알 수 있었습니다.
참고자료:
스프링프레임워크 첫걸음, 후루네스 키노시타 마사아키