본문 바로가기
Java Spring/MVC

Model interface

by GGShin 2022. 8. 20.

안녕하세요 이번에는 Spring framework에서 제공하는 Model이라는 interface에 대해서 알아보려고 합니다.☺️

 

Model Interface의 역할

Spring MVC에서 MVC는 Model, View, Controller의 약자입니다. 이 중에 Model은 애플리케이션에서 사용되는 데이터를 담고 있는 역할을 합니다.

Model interface는 그런 model의 역할과 맞게 data를 다룰 수 있는 interface입니다. 조금 더 정확히 이야기 하자면 model에 "attributes"를 추가하기 위해 고안된 interface입니다. Model에 담길 수 있는 데이터는 String, Object 등 여러 type의 데이터가 있습니다.

 

Model interface에 대한 공식적인 설명

 

그리고 view와 controller 사이에서 데이터를 전송하는 역할도 수행합니다. 

 

Model Interface에 정의된 method

Model interface에는 몇가지 메서드가 정의되어 있습니다. 그 중에 제가 사용 사례를 보았던 두 가지 메서드는 addAttribute(String attributeName, Object attributeValue)와 getAttribute(String attributeName)가 있었습니다. 메서드명 그대로 attribute를 추가하고 attribute의 값을 가져오는 것입니다. 나머지 메서드들 역시 이 두가지 메서드가 수행하는 역할과 유사합니다. 즉, 데이터를 넣고 넣은 데이터가 무엇인지 값을 가져오고 이 두 행동을 하는 것입니다!

 

사용 방법 살펴보기

구체적으로 어떻게 사용하는지 간단한 예시로 살펴보겠습니다.

 

Controller

@Controller
public class DemoController {

    @GetMapping("/")
    public String viewPage(Model model) { //데이터를 저장할 Model을 매개변수로 사용
        Member member = new Member("Anne-Marie");
        model.addAttribute("name", member.getUsername()); //Model 인스턴스에 attribute 추가!

        return "demo";
    }

}

Model을 매개변수로 설정하면, Spring Mvc가 자동으로 Model을 사용한 객체를 만들어주어 사용할 수 있게 된다고 합니다. 

Member clas의 인스턴스가 가진 name이라는 field와 값을 attribute로써 model에 add 해주었습니다.

 

Entity(Member)

public class Member {
    private String username;

    public Member(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }
}

 

Member class의 모습입니다.

 

ViewResolver

 

Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
    
    //Mustache를 사용하였습니다. 

        MustacheViewResolver resolver = new MustacheViewResolver();
        resolver.setCharset("UTF-8");
        resolver.setContentType("text/html; charset=UTF-8");
        resolver.setPrefix("classpath:/templates/");
        resolver.setSuffix(".html");

        registry.viewResolver(resolver);
    }
}

 

🏷 Mustache (템플릿 엔진)
Mustache는 템플릿 엔진(template engine) 중의 하나입니다. 템플릿 프로세서(template processor)라고도 불리는 템플릿 엔진은 템플릿들과 데이터 모델을 결합하여 문서 결과물(HTML, etc)를 만들어내는 소프트웨어입니다. 
Mustache는 문법이 다른 템플릿 엔진들보다 비교적 쉬운 것으로 유명합니다. 또한 로직코드를 사용할 수 없기 때문에 view와 서버의 역할이 명확하게 분리된다는 장점이 있습니다. (참고: https://velog.io/@roo333/Mustache-1

 

demo.html(View)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Demo page</title>

</head>
<body>
    <h2>데모입니다 ㅎㅎ</h2>
    <td>{{name}}</td>
</body>
</html>

 

{{name}} 부분에 위 Controller 소스코드에서 model.addAttribute("name", member.getUsername()) 으로 설정해 준 attribute의 value가 들어가게 됩니다!

 

Server를 구동한 뒤에 url로 들어가 보면

이렇게 attribute로 설정했던 값이 view에 잘 나오고 있음을 확인할 수 있습니다. 

Model interface에 대해 요약하자면,

1) model에 "attributes"를 추가하기 위한 인터페이스이다.

2) view와 controller 사이에서 데이터를 전송한다. (위의 예시에서 Controller에서 View로 데이터를 보냈음을 확인할 수 있었습니다.)

라고 할 수 있습니다.

 

잘 사용하면 유저 경험을 더욱 높혀줄 수 있을 것 같습니다. ㅎㅎ 재미있는 기능도 넣어볼 수 있을 것 같구요!

 

추가적인 내용이 있으면 학습해서 내용을 추가해보겠습니다.

감사합니다. :)

 

 


참고자료

 

https://www.tutorialandexample.com/spring-model-interface

 

Spring Model Interface

Model Interface Model is an interface that defines a holder for model attributes. It is also used to transfer data between various parts of the Spring MVC application. The Model interface is available in the org.springframework.ui package. The Model interf

www.tutorialandexample.com

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/ui/Model.html

 

Model (Spring Framework 5.3.22 API)

Add the supplied attribute to this Map using a generated name. Note: Empty Collections are not added to the model when using this method because we cannot correctly determine the true convention name. View code should check for null rather than for empty c

docs.spring.io

 

[템플릿 프로세서란?]

https://en.wikipedia.org/wiki/Template_processor

 

Template processor - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Software designed to combine templates with a data model to produce result documents A diagram illustrating all of the basic elements and processing flow of a template engine. A templa

en.wikipedia.org

 

[Mustache]

https://velog.io/@roo333/Mustache-1

 

Mustache - (1)

템플릿 엔진이란 무엇일까? 일반적으로 웹 개발에 있어 템플릿 엔진이란 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 이야기한다. JSP,Freemarker / 리액트,뷰 등이 이

velog.io

 

[Model을 파라미터로?]

https://okky.kr/article/666338

 

OKKY | 스프링 MVC 컨트롤러의 Model 인터페이스에 대해서 질문드립니다.

스프링 컨트롤러에서 메소드에 Model 인자를 설정을 해주면 스프링이 알아서 Model에 대한 객체를 넣어준다고 알고 있는데,이때 알고보니 Model이 원래는 클래스가 아니라 인터페이스더군요.인터페

okky.kr

 

[SpringMVC: MVC 각각의 역할에 대해서]

https://www.javatpoint.com/spring-mvc-tutorial#:~:text=A%20Spring%20MVC%20is%20a,Inversion%20of%20Control%2C%20Dependency%20Injection.

 

반응형

'Java Spring > MVC' 카테고리의 다른 글

@RequestParam 애노테이션  (0) 2022.09.12
@Nullable 사용 시 warning 발생 없애기  (0) 2022.09.09
@Controller와 @RestController의 차이점  (3) 2022.08.06
em.flush() vs tx.commit()  (1) 2022.07.23
Spring Rest Docs 만들기  (1) 2022.07.19