
MVC패턴은 애플리케이션을 Model, View, Controller의 세가지 역할로 나누어 설계하는 구조 이다.
스프링에서 가장 기본이 되는 구조로 웹 애플리케이션을 개발할 때 유지보수성과 확장성을 높이기 위해 사용하는 중요한 아키텍처라고 할 수 있다.
즉, 사용자(Client)가 API를 기반으로 요청을 처리하고 반환하는 전체적인 동작 방식을 스프링 웹 MVC 또는 스프링 MVC라고 한다.
지금부터 MVC 디자인 패턴에 대해 알아보고자 한다.
데이터와 비즈니스 로직을 담당하는 부분으로
DB와 연결되어 데이터를 저장하거나 불러오는 역할을 담당한다.
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
private String email;
}
사용자에게 보여지는 화면(UI)를 담당한다
HTML,JSP,JSON등으로 표현하며, Model의 데이터를 기반으로 화면을 구성합니다.
<!-- Thymeleaf 예시 -->
<p>회원 이름: <span th:text="${member.name}"></span></p>
사용자의 요청을 받아 처리하고, 적절한 응답을 반환한다.
Model과 View 사이를 연결하며
주로 사용자의 입력을 받고 비즈니스 로직 호출 후 결과를 전달한다(Mapping)
@Controller
public class MemberController {
@GetMapping("/members/new")
public String createForm(Model model) {
model.addAttribute("memberForm", new MemberForm());
return "members/createMemberForm";
}
}
[사용자 브라우저]
|
| 요청 (예: /members/new)
↓
[Controller]
|
| 비즈니스 로직 호출
↓
[Model]
|
| 처리된 데이터 전달
↓
[View]
|
| HTML 생성
↓
[사용자에게 응답]
스프링으로 백엔드를 구현하다 보면 이보다 더 복잡한 흐름도 있지만,
이 기본 구조는 대부분의 웹 애플리케이션에서 유지된다.
핵심 데이터 및 비즈니스 로직을 담당
구성 요소:
즉, 회원 데이터를 다루는 모든 코드, 저장, 검증 로직을 모델이라고 할 수 있다.
사용자에게 보여지는 화면(UI)을 담당
구성 요소:
즉, 사용자가 실제로 보는 웹페이지를 뷰라고 할 수 있다.
사용자 요청을 받고 처리 결과를 View에 전달
구성 요소:
즉, 요청을 받고 모델을 호출하고, 결과를 뷰로 넘겨주는 연결 역할을 담당한다고 할 수 있다.
MVC가 각각의 기능이 명확하게 나눠지므로 유지보수성과 가독성이 향상된다.
-> 수정할 때 해당 역할만 수정하면 되므로!
개발 분업에서 유리하다.
-> MVC로 나누어서 개발을 할 수 있기에 여러 개발자가 역할을 분담해서 진행할 수 있다.
코드의 재사용성 향상
-> View만 바꿔서 같은 Model 데이터를 다양한 방식으로 출력이 가능하다
유연한 확장성
-> 새로운 기능 추가 시 구조 변경 없이 Controller만 추가하면 된다.
복잡성
-> 기능이 많아지고 많은 URL요청이 한 컨트롤러에 몰릴 경우, 코드가 복잡해진다.
흐름을 따라가기 어려움
-> 작은 규모의 프로젝트에서도 많은 흐름이 존재하므로 이해하기 어려울 수 있다.