inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

@ModelAttribute에 대해서 궁금한점이 있습니다.

351

잘열심히

작성한 질문수 37

0

	@GetMapping("/nonModelAttribute")
	public void getList(Page page) {
		
	}
	
	@GetMapping("/modelAttribute")
	public void getList(Model model,@ModelAttribute Page page) {

	}
@Slf4j
@Component
public class PageArgumentResolver implements HandlerMethodArgumentResolver{

	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		// TODO Auto-generated method stub
	
		return parameter.getParameterType().equals(Page.class);
	}

	@Override
	public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
	
        return null;
	}

} 

강의에서 위 두개가 같다고 하셨는데 위의

/nonModelAttribute의 요청의 경우 Page 객체의 경우에는 Argument에서 객체를 만들지않으면 아예 null이 들어오기때문에 ArgumentResolver를 통해서 객체가 생성이 된다는것을 알수있는데

/modelAttribute의 경우에는 해당 부분에서 객체를 생성하지않아도 객체가 생성이 되던데 두개의 차이점이 있는건가요?? 그리고 만약에 차이가 있다면 ModelAttribute의 객체는 어디서 생성이 되는건가요?

spring mvc

답변 2

1

김영한

안녕하세요. 잘열심히님

다음을 참고해보시면 도움이 되실거에요.

https://velog.io/@0_0_yoon/%EB%A0%88%EB%B2%A83-ServletModelAttributeMethodProcessor%EA%B0%80-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94-%EA%B3%BC%EC%A0%95

감사합니다.

1

잘열심히

답변 감사합니다

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

잘열심히님의 질문은 @ModelAttribute가 붙어있는 파라미터와 없는 파라미터 사이에서 객체 생성 방식이 어떻게 다른지, 특히 @ModelAttribute가 붙어있을 때 객체가 어떻게 생성되는지에 대한 것 같습니다.

이와 관련하여 제시해주신 코드 및 설명을 기반으로 해당 주제에 대해 논의된 기존의 답변들을 살펴보았습니다. 아래의 질문과 답변들이 유사한 맥락의 내용을 담고 있으며, 이는 @ModelAttribute와 관련해 자세히 설명하고 있어 도움이 될 것 같습니다.

  1. @ModelAttribute가 있을 때, Model 객체 생성

    • 이 게시물에서는 @ModelAttribute 어노테이션이 파라미터에 있으면 Model 객체를 자동으로 생성하고 Model.addAttribute까지 해주는지에 대한 질문에, 강의의 김영한 강사님께서 직접 답변을 해주셨습니다. 그 내용에 따르면 Model 객체는 전체 구조에서 사용되며, RequestMappingHandlerAdapter에서 생성된다고 합니다.
  2. @ModelAttribute 어노테이션에 대해 질문 있습니다.

    • 이 질문에서는 @ModelAttribute 어노테이션이 Model에 더해지는 과정에 대해 논의되었습니다. 답변에 따르면 @ModelAttribute가 붙은 파라미터는 해당 타입의 객체를 Model에 추가하는 역할을 한다고 설명되고 있습니다.
  3. ArgumentResolver에 대해서 질문있습니다.

    • 여기에서는 HandlerMethodArgumentResolver를 직접 구현할 때 고려해야 하는 사항에 대한 질문과 그에 대한 답변을 찾을 수 있습니다. 이는 커스텀 파라미터 처리에 대한 이해를 심화하는 데 도움이 될 수 있습니다.

@ModelAttribute 어노테이션은 메서드 파라미터나 리턴 타입 앞에 붙을 수 있으며, HTTP 요청 파라미터들을 바인딩해서 모델 객체를 만들어서 넘겨주는 역할을 합니다. 스프링 MVC에서는 이 어노테이션이 붙은 파라미터에 대해서는 자동으로 모델 객체를 생성하고 요청 파라미터들을 해당 객체에 바인딩합니다. 만약 @ModelAttribute가 없는 경우에는 스프링 MVC의 HandlerMethodArgumentResolver를 통하여 파라미터에 맞는 객체를 생성해주어야 합니다.

이러한 차이는 스프링의 내부 구현에 의해 처리되는데, @ModelAttribute가 붙은 경우엔 스프링 내부의 해당 애너테이션을 처리하는 기본 HandlerMethodArgumentResolver가 작동하여 모델 객체를 생성해주는 반면, 커스텀 HandlerMethodArgumentResolver를 사용하는 경우에는 개발자가 명시적으로 해당 타입의 객체 생성 로직을 정의해주어야 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

servlet과 container에 대한 질문입니다

0

25

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

64

1

jsp 의존성 수정 요청

0

80

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

143

1

save() 메서드 문의

0

67

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

101

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

97

1

RequestMapping을 이용한 핸들러, 어댑터

0

119

2

save 후 결과화면

0

89

2

jsp를 이용한 view

0

97

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

178

1

수업 코드 제공 관련 문의

0

97

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

100

3

파일 오픈 시

0

70

1

스프링 배치 관련

0

78

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

112

1

postman으로 /request-body-json-v1 호출시 500 error

0

96

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

79

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

75

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

139

1

html 변경하는 부분 적용 문제

0

103

1

한글 깨짐

0

77

2