[Spring] 정적 컨텐츠

노유성·2023년 7월 7일
0
post-thumbnail

Controller란?

정적 컨텐츠를 제공하기 전에 spring에서 controller가 무엇인지에 대해서 알아보자.

MVC 패턴

MVC (Model-View-Controller) 패턴은 소프트웨어 개발에서 사용되는 소프트웨어 디자인 패턴입니다. 이 패턴은 애플리케이션을 세 가지 주요 컴포넌트로 분리하여 구성합니다: Model, View, Controller.
Model: 데이터와 비즈니스 로직을 담당하는 부분입니다. 데이터의 구조와 유효성을 정의하고, 데이터의 생성, 조회, 수정, 삭제(CRUD) 작업을 처리합니다. Model은 데이터의 변경을 통지할 수 있으며, 관련된 비즈니스 로직을 수행합니다.
View: 사용자 인터페이스(UI)를 담당하는 부분입니다. 사용자에게 데이터를 시각적으로 표현하고, 사용자의 입력을 받을 수 있습니다. View는 Model의 데이터를 표시하는 역할을 합니다. 데이터의 변화를 감지하고 반영할 수 있습니다.
Controller: Model과 View 사이의 상호 작용을 조정하는 부분입니다. 사용자의 입력을 받아들이고, 그에 따라 Model을 업데이트하거나 View를 변경합니다. Controller는 사용자와의 상호작용을 처리하고 비즈니스 로직을 호출하여 Model을 업데이트하며, 변경된 데이터를 View에 전달합니다.
-chatGPT


MVC패턴이란, 쉽게 말해서 기능을 분리하는 것이다.
사용자에게 화면을 보여주는 View, 사용자의 요청을 받아서 요청을 model에게 전달하는 중간자의 역할인 controller, 마지막으로 요청에 따른 응답을 생성하고 전달하는 model 총 3가지로 기능을 분리하는 것을 MVC 패턴이라고 한다.

Controller

그럼 다시, controller란 무엇일까?
예를 들자면, 사용자가 /home 이라는 앤드포인트로 우리의 도메인에 접속했다고 가정하자. 해당 경우에 서버의 입장에서는 여러 종류의 데이터를 보내줄 수 있다. 혹은 적절하지 못한 접근에 대해서는 요청을 거부할 수도 있다.

이러한 모든 경우의 수에서 model에게 '~~한 요청이 왓는데 ~~한 상태이니까 너는 ~~해줘' 하고 상황을 통제하고 다음 action을 정하는 것이 controller인 것이다.

정적 컨텐츠

Spring이 데이터를 제공하는 데에는 3가지 방식이 있다. 그 중 하나가 정적 컨텐츠이다.

에제를 보면서 이해를 해보자.

Controller.java

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data","hello");
        return "hello";
    }
}

먼저 컨트롤러의 기능을 하기 위해서 class에 Controller라는 annotation을 적용한다.

그 다음 Model 객체를 인자로 받아서 key로 data, value로 hello로 하여 데이터르 model에 더한 다음, "hello"를 return 한다.

hello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" ></p>
</body>
</html>

thymeleaf 라이브러리를 사용하는 html 파일이다. model에게서 key값이 data인 데이터를 받아서 화면에 보여준다.

위와 같이 작성을 하면은 사용자가 /hello 라는 앤드포인트로 접근했을 때, GetMappinng()에 작성되어있던 값과 일치하는 method가 실행되고 logic에 따라서 결과가 사용자에게 반환된다.

그림 상으로 보면, was가 요청을 container에게 보내고 container 중에서 요청에 대한 로직을 갖고 있는 container에게 전달된다. 그러면 컨테이너는 값을 model에 전달하고 viewResolver에게 전달하면 viewResolver가 템플릿 엔진으 통해서 html파일을 사용자에게 전달하는 것이다.

profile
풀스택개발자가되고싶습니다:)

0개의 댓글