유정잉

⭐️ Model Attribute와 Request Parameter의 차이점 + RequestBody 본문

개발자 공부/🎀 스프링 공부

⭐️ Model Attribute와 Request Parameter의 차이점 + RequestBody

유정♡ 2024. 5. 29. 11:48

모델 어트리뷰트(Model Attribute)와 리퀘스트 파라미터(Request Parameter)는 웹 애플리케이션에서 데이터를 전달하는 방식에 있어서 차이가 있습니다.

 

[ 모델 어트리뷰트 (Model Attribute) ]

  • 모델 어트리뷰트는 컨트롤러에서 뷰로 데이터를 전달하는 데 사용됩니다.
  • 주로 컨트롤러에서 처리한 결과나 데이터를 뷰에 전달할 때 사용됩니다.
  • Spring MVC의 Model 객체를 통해 뷰로 전달됩니다.
  • 뷰 템플릿(JSP, Thymeleaf 등)에서는 모델 어트리뷰트에 접근하여 화면에 데이터를 표시합니다.
@Controller
public class MyController {
    @GetMapping("/example")
    public String example(Model model) {
        String message = "Hello, World!";
        model.addAttribute("message", message); // "message"라는 이름으로 데이터를 모델에 추가
        return "exampleView"; // exampleView라는 뷰로 이동
    }
}

예를 들어, 다음과 같이 모델 어트리뷰트를 사용하여 데이터를 뷰로 전달할 수 있습니다:위 코드에서 "message"라는 이름으로 데이터가 모델에 추가되고, "exampleView"라는 뷰로 이동할 때 해당 데이터가 함께 전달됩니다.

 

번외로 여기서 name에 담긴 값을 JSP에서 사용하려면 EL언어를 사용해야 한다 

<!DOCTYPE html>
<html>
<head>
    <title>Example View</title>
</head>
<body>
    <h1>Hello, ${name}!</h1>
</body>
</html>

 


 

[ 리퀘스트 파라미터 (Request Parameter) ]

  • 리퀘스트 파라미터는 클라이언트(브라우저)에서 서버로 데이터를 전달하는 데 사용됩니다.
  • 주로 웹 브라우저에서 사용자가 입력한 데이터나 요청 정보를 서버로 전송할 때 사용됩니다.
  • HTTP 요청의 쿼리 문자열(Query String)이나 폼 데이터(Form Data)를 통해 전달됩니다.
  • Spring MVC에서는 @RequestParam 어노테이션을 사용하여 요청 파라미터 값을 컨트롤러 메서드의 매개변수로 받아옵니다.

예를 들어, 다음과 같이 리퀘스트 파라미터를 사용하여 데이터를 전달할 수 있습니다:위 코드에서 "@RequestParam("name")"은 "name"이라는 파라미터 값을 받아와서 해당 메서드의 name 매개변수에 할당합니다. 그 후, 이 값을 모델에 추가하여 뷰로 전달합니다.

따라서, 모델 어트리뷰트는 컨트롤러에서 뷰로 데이터를 전달하는 데 사용되고, 리퀘스트 파라미터는 클라이언트에서 서버로 데이터를 전달하는 데 사용됩니다.

@Controller
public class MyController {
    @GetMapping("/example")
    public String example(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name); // "name" 파라미터 값을 모델에 추가
        return "exampleView"; // exampleView라는 뷰로 이동
    }
}

 


 

@RequestParam과 @RequestBody는 둘 다 스프링 MVC에서 HTTP 요청을 처리하는 데 사용되는 어노테이션입니다. 그러나 두 어노테이션은 요청의 다른 부분을 처리하며 사용되는 방식이 다릅니다.

 

[ @RequestParam ]

  • @RequestParam은 HTTP 요청의 쿼리 문자열(Query String)이나 폼 데이터(Form Data)를 처리하는 데 사용됩니다.
  • 쿼리 문자열이나 폼 데이터에서 특정한 매개변수 값을 추출하여 메서드의 매개변수로 전달합니다.
  • 주로 GET 요청이나 폼 제출(POST 요청)에서 사용됩니다.
  • 매개변수에 기본값을 설정하거나 필수 여부를 지정할 수 있습니다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @GetMapping("/hello")
    public String hello(@RequestParam("name") String name) {
        return "Hello, " + name + "!";
    }
}

 

위 코드에서 @RequestParam("name")은 요청의 쿼리 문자열에서 "name"이라는 매개변수 값을 추출하여 메서드의 name 매개변수로 전달합니다.

 

 

[ @RequestBody ]

  • @RequestBody는 HTTP 요청의 본문(body)을 처리하는 데 사용됩니다.
  • 주로 JSON 또는 XML 형식의 데이터가 요청 본문에 포함되어 있을 때 사용됩니다.
  • 요청 본문을 자바 객체로 변환하여 컨트롤러 메서드의 매개변수로 전달합니다.
  • 주로 POST 요청에서 사용되며, 요청 본문의 데이터를 객체로 바인딩하여 처리할 때 유용합니다.
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @PostMapping("/api/hello")
    public String hello(@RequestBody MyRequestData requestData) {
        return "Hello, " + requestData.getName() + "!";
    }
}

 

위 코드에서 @RequestBody MyRequestData requestData는 요청 본문에 포함된 JSON 데이터를 MyRequestData 객체로 변환하여 메서드의 requestData 매개변수로 전달합니다.

 

 

따라서, @RequestParam은 HTTP 요청의 쿼리 문자열이나 폼 데이터를 처리하고,

            @RequestBody는 HTTP 요청의 본문을 처리하는 데 사용됩니다.

728x90