• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

model역할에 대해 궁금한점이 있습니다.

24.05.01 19:04 작성 조회수 55

0



@GetMapping("/add")
public String addForm(Model model) {
    model.addAttribute("item", new Item());
    return "validation/v1/addForm";
}

위에 코드는 mvc2 강의 v1controller 코드 중 일부이고

아래는 mvc1 강의 마지막 챕터 코드 중 일부입니다.

public class BasicItemController {    
@GetMapping("/add")
    public String addForm() {
        return "basic/addForm";
    }

 

궁금한점이 있는데. v1controller 코드에서 mvc1처럼 코드를 입력하게 되면 add 사이트로 이동시 서버 에러가 뜹니다.

Model 객체는 뷰에 전달할 데이터를 담는 컨테이너 역할을 합니다. 라고 하는데 그렇다면 mvc1에서 model없이 어떻게 작동이 되는건가요?

model이 view와 controller사이에서 사다리 역할하는건가요? 데이터 저장소가 아니라요?

@GetMapping("/add")
public String addForm() {
    
    return "validation/v1/addForm";
}

답변 2

·

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2024.05.01

안녕하세요. zzzzz님, 공식 서포터즈 OMG입니다.

Model 객체는 뷰에 전달할 데이터를 담는 컨테이너 역할라는 표현은 매우 적절한 표현입니다.

model을 생략하는 경우라면, 뷰에 전달할 데이터가 없다면 생략하여도 무방합니다.

다만 아래의 코드를 생략했을 때 오류가 발생하였단 것은 new Item()으로 단순 인스턴스만을 담아서 전달하는 것이 뷰에서 유의미한 동작을 했다고 보시면 됩니다.

model.addAttribute("item", new Item());

타임리프의 th:object와 연관이 있는데요, th:object를 타임리프에서 사용한다면 모델로부터 오브젝트의 정보(껍데기의 인스턴스일지라도)를 전달받아야합니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.01

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

zzzzz님이 제시하신 질문은 Spring MVC에서의 Model 객체의 역할과 그에 따른 행동 방식에 대한 궁금증으로 보입니다. 지정된 코드 예시를 통해 Model의 작용과 필요성을 이해하려는 노력이 엿보입니다. 이와 관련하여 몇 가지 정보를 드리면, Model 객체는 실제로 뷰(View)에 데이터를 전달하는 컨테이너 역할을 합니다. 즉, 컨트롤러(Controller)에서 뷰로 데이터를 전달할 때 사용하는 중간 매개체입니다.

Model 객체의 작용

  • Model.addAttribute("name", value) 메서드를 통해 뷰에 전달할 데이터를 추가합니다.
  • 뷰 템플릿(예: Thymeleaf, JSP)에서는 이러한 Model에 담긴 데이터를 사용하여 동적인 웹 페이지를 생성할 수 있습니다.

Model 없이 작동하는 경우

  • Model을 사용하지 않고 뷰로 데이터를 전달하지 않는 경우(예: 단순한 페이지 이동)는 Error를 발생시키지 않습니다. 단순한 페이지 이동에서는 서버에서 클라이언트로 어떠한 데이터를 보낼 필요가 없기 때문입니다.
  • 하지만, 뷰에 특정 데이터를 동적으로 반영해야 하는 상황에서 Model 없이 작동하려 하면, 뷰 템플릿에서 해당 데이터를 찾을 수 없어서 오류가 발생합니다.

주어진 상황에서, MVC1 강의의 코드가 문제 없이 작동하는 이유는 해당 예시에서는 단순 페이지 이동만 이루어지고, 어떠한 데이터도 뷰로 전달할 필요가 없기 때문입니다. 반면, MVC2 강의의 예에서는 new Item() 객체를 뷰로 전달하려고 합니다. 따라서, 해당 데이터를 뷰에 전달하기 위해 Model 객체를 사용해야 하며, 그렇지 않으면 서버 에러가 발생하는 것입니다.

비슷한 상황을 설명하면서 Model의 역할에 대해 논의한 기존 질문의 답변을 참고하시면 도움이 될 것입니다.

Model이 생략되는 이유가 궁금합니다. - 이 링크에서는 Model의 작용과, 언제 Model을 생략할 수 있는지에 대한 구체적인 설명을 제공합니다. 특히, Model이 뷰로 데이터를 전달하는 중요한 역할을 하지만, 뷰에서 추가 데이터가 필요하지 않은 경우에는 생략할 수 있다는 점을 확인할 수 있습니다.

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