-

[스프링 부트 Step5] - MVC와 템플릿 엔진 본문

백엔드 기술 정리/스프링 부트

[스프링 부트 Step5] - MVC와 템플릿 엔진

흣차 2021. 12. 18. 02:43
728x90
반응형

MVC라는건 Model - Controller - View의 줄임말이라고 지난 포스팅에서 설명했었습니다.

과거에는 Controller와 View라는 것이 따로 분리되어 있지 않았습니다.

View에 모든걸 다 넣어서 개발을 했었습니다.

하지만 요즘은 MVC로 많이 개발하고 있는 추세입니다.

왜냐하면 View는 개발할 때 화면을 그리는데 모든 역량을 집중해야하는데 Model, Controller는 비즈니스 로직이나 내부적인걸 처리하는데 집중해야합니다.

그래서 View를 MVC라고 쪼개게 됩니다.

그러니까, 갈수록 코드의 수는 많아지고 View하나에 DB로직이나 컨트롤러가 막 섞여있으면 유지보수하기 상당히 까다로울 것입니다. 

그것이 현재에 와서 이렇게 쪼개지게 되었고 View는 화면에 관련된 일만, 비즈니스 로직과 서버 뒷단에 관련된 것은 Controller와 Model에 담아서 넘기는 패턴을 많이 사용합니다.

자 그럼 이번엔 Controller에 무엇을 만들어 볼 것이냐면, 

이렇게 구현을 해보겠습니다.

지난번의 Controller 밑에다 써주시면 되는데요.

위의 GetMapping과 메서드는 같아야 합니다.

그리고 파라미터를 만들것입니다. 

이 파라미터는 외부에서 들어오기 때문에 @RequestParam이라고 적어주시고 괄호 안에 "name"이라고 만들겠습니다.

이 파라미터는 String 타입의 name이라는 변수로 가져올 것이고 Model에 담으면 View에서 렌더링할 때 쓸 수 있습니다.

이 model에는 addAttribute해서 파라미터로 넘겨온 name을 가져옵니다.

왼쪽에 있는 name이 key가 되고, 오른쪽의 name이 value가 됩니다.

이렇게하고 return을 hello-template라고 했으니 hello-template이라는 html을 한 번 만들어 보겠습니다.

위 사진처럼 만드셨나요?

그리고 그 내부에

<!doctype html>
<html xmlns:th = "http://www.thymeleaf.org">
<body>
<p th:text="hello  + ${name}"> hi~</p>
</body>
</html>

이 내용을 복붙해서 써주세요.

그리고 한 번 서버로 켜서 볼게요.

주소를 이렇게 치고 들어가시면

아마 이런 창을 직면하게 될 것입니다.

400에러네요. 

왜 에러가 나면 일단 로그를 봐야합니다.

인텔리제이의 제일 밑단을 보시면 아마 에러가

이렇게 뜰 것입니다.

음 읽어보니까... requestParameter의 name이 없다고 하네요?

그럼 어떻게 하시냐면, 윈도우 기준으로 ctrl + p를 메서드에 대고 누르시면 메서드에 필요한 파라미터를 알 수 있습니다.

그래서 ctrl + p를 눌러보니까 이런게 필요하다고 하네요???

여기서 default라고 뜨는 것은 꼭 필요하다는 것을 의미합니다.

보시면 boolean 타입의 required()가 true일 경우 무조건 넣어야 하고 false일 경우 안넣어도 된다는 것을 의미합니다.

그러므로 이것을 제대로 구현하기 위해서는 이 name값에 어떤 값을 주입해야 합니다.

근데 우리는 아직 그것을 구현하지 않았기 때문에 데이터를 주입하려면 주소창에다 넣어야 합니다.

어떻게 하는지 보시겠습니다.

평소에 인터넷을 자주하시는 분들은 왜 주소창에 굳이 ?를 쓰는지. 혹은 로그인 해서 웹페이지에 들어갔을 때 내 아이디가 ?뒤에 나오는 것을 보신 분들은 왜 이게 주소창에 뜨는지 이제야 아시겠죠?

여러분이 쓰시던 웹페이지는 GetMapping방식으로 requestParam에 여러분의 ID값이 담겨서 GetMapping에 의해 model로 담기고 전달되었기 때문입니다. 

실제로 어떻게 출력되었는지 살펴볼까요?

이렇게 나오네요!

정리를 해보겠습니다.

name에 어떤 값을 주입시킴으로 인해서 이 name의 key,value값은 model에 담깁니다.

이것이 template에 넘어가면 hello-template.html의 ${name}의 값으로 치환이 됩니다.

그림으로 보시겠습니다.

웹 브라우저에서 localhost:8080의 hello-mvc로 넘기면 내장 톰캣 서버를 먼저 거칩니다.

톰캣 서버는 들어온 hello-mvc를 스프링에 던집니다.

스프링은 Mapping이 되어있는 메서드를 return방식으로 호출을 하고 model에는 key는 name이고 value는 spring(예)로 담아서 viewResolver에 줍니다.

이 때 뷰리졸버가 return받은 html과 똑같은 html을 찾아서 변환을 한 후 HTML을 웹브라우저에 띄웁니다.

이해가셨나요?

감사합니다.

728x90
반응형
Comments