@ModelAttribute는 스프링 프레임워크에서 사용되는 어노테이션(Annotation) 중 하나이다.
스프링은 MVC(Model-View-Controller) 아키텍처를 기반으로 하는 웹 애플리케이션을 개발할 때 자주 사용된다.
@ModelAttribute 어노테이션은 주로 컨트롤러 클래스의 메서드에서 파라미터와 모델 속성을 바인딩할 때 사용된다.
이 어노테이션을 사용하면 해당 메서드가 호출될 때 모델에 데이터를 바인딩하여 뷰로 전달할 수 있다.
@ModelAttribute가 @GetMapping함수에 파라미터로 들어갈때
여기서 @ModelAttribute는 해당 파라미터와 모델 속성을 바인딩하는 역할을 수행한다. 이는 주로 웹 요청의 데이터를 컨트롤러로 전달하거나, 컨트롤러에서 뷰로 데이터를 전달하는데 사용된다.
일반적으로 '@GetMapping'은 HTTP GET 메서드로 들어오는 요청을 처리하는데 사용되는 어노테이션이다. 이때, 요청 URL에 쿼리 파라미터가 포함 되어 있을 수 잇다. 이 쿼리 파라미터들을 컨트롤러의 메서드 파라미터와 연결하여 데이터를 추출하고자 할때 '@ModelAttribute'를 사용한다.
예를 들어보자!!!
@Controller
public class MyController {
@GetMapping("/showMessage")
public String showMessage(@ModelAttribute("name") String name) {
// name 파라미터를 사용하여 로직 처리
// ...
return "showMessage"; // showMessage.jsp와 같은 뷰 페이지를 반환합니다.
}
}
위의 코드에서 @GetMapping 어노테이션을 사용하여 /showMessage 경로로 들어오는 GET 요청을 처리하는 메서드를 정의한다.
이 메서드는 @ModelAttribute("name") String name을 파라미터로 받고 있다.
이렇게 정의된 name 파라미터는 요청 URL의 쿼리 파라미터 중에 "name"이라는 이름의 값과 바인딩됩니다.
예를 들면 /showMessage?name=John과 같이 요청이 들어오면, name 파라미터는 "John"이라는 값으로 설정됩니다.
@RequestParam과의 차이점
spring 공부를 처음 시작할때 @RequestParam과 @ModelAttribute 둘다 스프링 프레임워크에서 웹 요청의 데이터를 컨트롤러로 전달하는데 사용되는 어노테이션이기 때문에 둘 사이의 차이점이 무엇인지 제대로 파악하지 못했다.
이 둘은 비슷한 역할을 수행하지만, 몇가지 차이점이 있다.
1. 바인딩 대상 :
- @RequestParam: 이 어노테이션은 HTTP 요청의 쿼리 파라미터를 바인딩할 때 사용된다. 쿼리 파라미터는 URL 뒤에 "?"를 붙이고 파라미터 이름과 값을 설정한 것들을 말한다.
- @ModelAttribute: 이 어노테이션은 모델에 담긴 속성(attribute)을 바인딩할 때 사용됩니다. 주로 컨트롤러 메서드에서 모델에 데이터를 추가하여 뷰로 전달하거나, 뷰에서 전달된 데이터를 컨트롤러에서 사용할 때 활용됩니다.
2. 기본 적용 범위:
- @RequestParam: 이 어노테이션은 메서드 파라미터에 사용되며, 요청의 특정 쿼리 파라미터를 해당 파라미터와 바인딩한다.
- @ModelAttribute: 이 어노테이션은 메서드 파라미터와 메서드 레벨에서 사용된다. 메서드 파라미터에 사용되면 해당 파라미터와 모델 속성을 바인딩하고, 메서드 레벨에 사용되면 해당 메서드가 반환하는 객체를 모델에 추가한다.
3. 데이터 바인딩 전처리:
- @RequestParam: 요청의 쿼리 파라미터를 자동으로 기본 데이터 타입으로 변환해준다. 예를 들어, 요청 파라미터가 숫자 형태인 경우 자동으로 int 또는 double과 같은 데이터 타입으로 변환한다.
- @ModelAttribute: 객체 타입으로 데이터를 바인딩해주기 때문에 보다 복잡한 객체에 대한 데이터 전달이 가능합니다. 하지만 자동 변환이 이루어지지 않으므로, 요청 파라미터와 매핑되는 객체의 생성과 속성 설정은 개발자가 수동으로 해주어야 합니다.
정리하자면, @RequestParam은 요청의 쿼리 파라미터를 메서드 파라미터와 연결하여 단순한 데이터를 받아오는 데 주로 사용되고, @ModelAttribute는 컨트롤러에서 모델과 데이터를 주고받는 데 활용되며 객체를 바인딩하여 보다 복잡한 데이터를 다루는 데 유용하다.
'Back End > Spring' 카테고리의 다른 글
[Spring] 서블릿(servlet) aka. MVC 구버전 (0) | 2023.08.03 |
---|---|
[Spring] 웹 애플리케이션의 이해... (0) | 2023.08.01 |
[Spring] 간단한 쇼핑몰 예제 (0) | 2023.07.23 |
Spring - 빈 스코프 (0) | 2023.07.17 |
Spring - 빈 생명주기 콜백 (0) | 2023.07.16 |