MVC와 템플릿 엔진

숭맹이·2025년 4월 24일
0

김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 정리

✅ MVC 패턴이란?

MVC(Model-View-Controller)는 소프트웨어 설계의 관심사 분리(Separation of Concerns)를 위한 대표적인 아키텍처입니다. 웹 개발에서 이 패턴은 특히 유지보수와 확장성을 확보하는 데 강력한 장점을 제공합니다.

🔹 구성 요소

  • Model: 애플리케이션의 데이터 및 비즈니스 로직 담당 (ex. DB 연동, 서비스 로직)
  • View: 사용자에게 보여지는 UI (HTML, Thymeleaf 등)
  • Controller: 클라이언트 요청을 받고, 적절한 모델을 선택 및 처리 후 뷰로 전달

과거에는 JSP 안에 비즈니스 로직, 화면 처리, DB 연동이 한 파일에 몰려있는 Model 1 방식이 많았지만, 이는 유지보수 지옥을 불러왔습니다. 현대적 방식인 MVC는 이를 구조적으로 분리합니다.


✅ Spring MVC 예제 코드

간단한 Hello 예제를 통해 MVC 구조를 설명하겠습니다.

📌 Controller

@Controller
public class HelloController {

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template"; // templates/hello-template.html 뷰 반환
    }
}

📌 View (hello-template.html)

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

📌 실행 예시

http://localhost:8080/hello-mvc?name=spring

➡️ 브라우저 출력: hello spring


✅ 템플릿 엔진 - Thymeleaf

Thymeleaf는 HTML을 그대로 작성하면서, 서버 사이드에서 동적으로 데이터를 바인딩할 수 있는 템플릿 엔진입니다.

장점

  • 정적 HTML로도 열람 가능 → 퍼블리셔 협업 용이
  • 스프링 부트와 자연스럽게 통합
  • 뷰 레이어 로직 최소화 가능

템플릿 파일은 resources/templates 경로에 .html 파일로 작성하며, ${} 문법으로 모델 값을 치환합니다.


✅ 전체 흐름 요약 (텍스트 기반 순서도)

  1. 사용자가 URL 접속: /hello-mvc?name=spring
  2. 내장 톰캣이 요청을 받고 Spring DispatcherServlet으로 전달
  3. HelloController.helloMvc() 메서드 매핑
  4. name 파라미터를 Model에 담고 "hello-template" 리턴
  5. ViewResolver가 템플릿 파일 hello-template.html을 탐색
  6. Thymeleaf가 모델 값을 바인딩하여 HTML 렌더링
  7. 최종 HTML을 브라우저에 반환

✅ 실전 개발에서의 적용 포인트

  • Controller는 얇게 유지: 최대한 비즈니스 로직은 Service 레이어로 위임
  • Model은 DTO로 깔끔하게 구성: 불필요한 객체 넘기지 않기
  • View는 순수 화면 전용: 로직 없이 화면 구성만 책임지도록
profile
👨🏻‍💻 Backend Developer

0개의 댓글