Model : 데이터를 관리하는 역할
View : 화면을 담당 요소로, 모델이 가지고 있는 데이터를 저장하면 안된다!
Controller : 클라이언트의 요청에 따라 서버에서 이를 처리하는 역할
헤더와 푸터 부분은 모든 웹페이지에 중복되므로 layouts>header.mustache와 layouts>footer.mustache 레이아웃을 생성해서 사용한다.
resources>template>greetings.mustache
모델에 같은 attributeName으로 선언해도 서로 다른 컨트롤러에서는 각자의 attributeValue로 반응한다!
컨트롤러가 String을 반환하면 viewResolver가 템플릿엔진(Mustache)를 처리하여 Model 객체 정보를 바탕으로 HTML로 변환 후 응답한다.
컴포넌트 스캔을 통한 자동 등록
@Controller 애노테이션을 사용하면 해당 클래스가 스프링 컨테이너에 의해 관리되는 컴포넌트로 등록되며, 따로 AppConfig와 같은 Java Config 클래스를 작성하지 않아도 된다!