Spring 개념정리

[Spring] MVC : 요청 매핑, 커맨드 객체, 리다이렉트, 모델

개발자 문문 2025. 7. 6. 22:13

안녕하세요 개발자 문문입니다.

오늘은 MVC의 요청 매핑, 커맨드 객체, 리다이렉트, 폼 태그, 모델에 대해 공부하겠습니다.

 

  • 요청 매핑
  • @RequestMapping : 메서드가 처리할 요청 경로를 지정합니다.
  • @GetMapping : GET 방식의 요청 경로를 처리합니다.
  • @PostMapping : POST 방식의 요청 경로를 처리합니다.
  • @PutMapping : PUT 방식의 요청 경로를 처리합니다.
  • @DeleteMapping : DELETE 방식의 요청 경로를 처리합니다.
  • @PatchMapping : PATCH 방식의 요청 경로를 처리합니다.
REST API 목적 특징
GET 리소스 조회 요청 바디 없음, 쿼리스트링 사용
POST 리소스 생성 요청 바디에 데이터 포함 (JSON 등)
PUT 리소스 전체 수정 기존 리소스를 완전히 덮어씀
DELETE 리소스 삭제 일반적으로 요청 바디 없이 URL로 대상 지정
PATCH 리소스 일부 수정 PUT과 달리 일부 필드만 수정

 

  • 요청 파라미터 접근

- http://localhost:8080/register/step2?agree=true 로 요청이 왔다고 가정하겠습니다.

 

1. HttpServletRequest

@GetMapping("/register/step2")
public String handleStrep2(HttpServletRequest request){
	String agreeParam = request.getParameter("agree");
    ...
}

 

2. RequestParam

@GetMapping
public String handleStep2(@RequestParam(value="agree", required=true, defaultValue="false") Boolean agreeVal){
...
}

 

- 속성 : value(파라미터 이름) , requried(필수 여부), defaultValue(기본값)

 

  • 리다이렉트

- 리다이렉트를 시키는 방법은 "redirect:경로"를 뷰이름으로 리턴하면 됩니다.

@GetMapping("/register/step2")
public String handleStep2Get()
{
    return "redirect:/register/step1";
}

 

- 경로위치에 /로 시작을 안하면 상대 경로로 사용됩니다.

 

  • 커맨드 객체
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class RegisterRequest{
	private String name;
    private String email;
    private String password;
    private String confirm;
}
@PostMapping("/register/step3")
public String handleStep3(RegisterRequest regReq){
...
}

- 이런식으로 사용하면 요청 파라미터의 값을 커맨드 객체(RegisterRequest)로 복사하고 setter 메서드로 값을 주입시킵니다.

- 클래스명이 RegisterRequest 이렇게 되어있다면, JSP에서 아래와 같이 사용 가능합니다. 

- 스프링 MVC는 커맨드 객체의 클레스 이름(첫 글자 소문자로 변경)과 동일한 속성이름을 사용해서 커맨드 객체를 뷰에 전달합니다.

<p><string>${registerRequest.name}님</strong> 회원 가입이 완료되었습니다.</p>

 

- @ModelAttribute("속성 이름")을 사용하면 지정한 이름으로 커맨드 객체에 접근이 가능합니다.

@PostMapping("/register/step3")
public String handleStep3(@ModelAttribute("formData") RegisterRequest regReq){
...
}

 

 

  • Model

- Model은 뷰에 값을 전달할 수 있는 객체입니다.

- 컨트롤러에서 model.addAttribute("greeting", "안녕하세요 ", +name); 이런식으로 사용하면, 뷰에서 ${greeting}으로 사용 할 수 있습니다.

- 위와 같이 사용하려면 컨트롤러에서 뷰이름으로 리턴해줘야 합니다.

 

  • ModelAndView

- ModelAndView를 사용하면 뷰에 전달할 데이터 설정, 뷰 이름 리턴 이 두 과정을 한 번에 처리할 수 있습니다.

@GetMapping
public ModelAndView form(){
	List<Question> questions = new createQuestions();
	ModelAndView mav = new ModelAndView();
    mav.addObject("questions", questions);
    mav.setViewName("survey/surveyForm");
    return mav;
}