2025. 4. 9. 10:00ㆍJAVA언어/Spring
Model-View-Controller(MVC) 패턴은 애플리케이션의 구조를 세 가지 주요 부분으로 나누어 개발하는 소프트웨어 디자인 패턴
구조적 분리를 통해 유지보수성과 확장성을 높임.
각각의 구성요소는 명확한 역할을 가지고 있으며, 서로 독립적으로 동작하도록 설계.
spring이 웹 애플리케이션을 개발하는데 있어 MVC패턴을 가장 효율적으로 지원
1. Model
모델은 애플리케이션의 데이터와 비즈니스 로직 담당
사용자로부터 받은 데이터를 처리하거나 데이터베이스와 상호작용을 통해 데이터를 조회하고 수정하는 작업
모델은 사용자의 요청에 따라 상태 변경 및 데이터 제공
(ex : 사용자 정보, 상품 목록 등과 같은 애플리케이션의 데이터를 포함하는 객체들이 모델)
역할: 애플리케이션의 상태를 나타내는 데이터와 그 데이터를 처리하는 비즈니스 로직 포함
구성 요소: POJO(Plain Old Java Object)로 정의된 도메인 객체들, 데이터베이스 엔티티, 서비스 클래스 등이 모델에 해당.
예시: User 객체 - 사용자의 정보를 담고 있는 클래스
ProductServic: 제품 목록을 가져오는 서비스 클래스
2. View
뷰는 사용자에게 정보를 표시하는 역할
모델에서 제공한 데이터를 화면에 렌더링하여 사용자에게 보여주는 부분
뷰는 데이터를 표현하는 데만 집중하고, 데이터의 처리나 상태 변경은 하지 않는다. 일반적으로 HTML, JSP, Thymeleaf 등의 템플릿 엔진을 사용하여 화면을 구성
역할: 사용자에게 보여지는 화면을 담당, 모델에서 제공한 데이터를 시각적으로 표현
구성 요소: HTML, JSP, Thyeleaf, FreeMarker 등의 템플릿 파일
예시: userProfile.html - 사용자의 프로필 정보를 표시하는 웹 페이지
productList.jsp - 제품 목록을 표시하는 페이지
3. Controller
컨트롤러는 사용자의 입력을 처리하고 그에 맞는 모델을 선택하여 뷰에 전달하는 역할
즉, 사용자가 요청한 URL에 대해 어떤 작업을 할지 결정하고 그 작업의 실행하는 책임을 진다. 컨트롤러는 비즈니스 로직을 직접 처리하지 않고 필요한 모델 객체를 호출하여 모델을 업데이트하거나 데이터를 가져온다. 이후 모델 데이터를 뷰에 전달하여 화면 렌더링을 한다.
역할: 사용자의 요청을 받아 처리하고, 모델을 선택하여 뷰에 전달한다. 애플리케이션 흐름을 제어
구성 요소: 요청을 처리하는 메서드를 갖춘 서블릿이나 클래스(주로 @Controller 어노테이션이 붙은 클래스)
예시: userController - 사용자의 요청을 받아 사용자 정보 페이지를 생성
productController - 제품 목록을 가져와서 해당 정보를 뷰에 전달
MVC 패턴의 흐름
1.사용자 요청: 사용자가 웹 페이지에서 버튼을 클릭하거나 URL을 입력하여 서버에 요청을 보냄
2. 컨트롤러의 요청 처리: 컨트롤러는 요청을 받고 이를 처리할 로직 실행. 이때 비즈니스 로직은 모델을 통해 수행되며, 데이터베이스 접근이나 외부 API 호출 등이 포함
3. 모델의 데이터 처리: 모델은 비즈니스 로직을 수행하고, 필요한 데이터를 처리하여 컨트롤러에 반환. 예를 들어 데이터베이스에서 정보를 조회하거나 계산을 수행
4. 뷰에 데이터 전달: 컨트롤러는 모델에서 받은 데이터를 적절한 뷰에 전달. 뷰는 이 데이터를 화면에 표시하는 역할 수행
5. 결과 반환: 최종적으로 뷰는 사용자가 볼 수 있는 HTML 페이지를 생성하여 브라우저에 반환
MVC 패턴의 장점
- 분리된 관심사: 애플리케이션을 세 부분으로 나누어 각 부분이 독립적으로 개발되고 관리되기 때문에 코드의 유지보수와 확장성이 높아진다. 비즈니스 로직과 사용자 인터페이스가 분리되어 개발자와 디자이너가 독립적으로 작업할 수 있다.
- 유지보수성: 각 부분이 독립적으로 동작하므로 한 부분에 대한 변경이 다른 부분에 영향을 미치지 않습니다. 뷰를 변경해도 모델이나 컨트롤러는 영향을 받지 않습니다.
- 테스트 용이성: 비즈니스 로직은 모델에 담겨 있기 때문에 독립적으로 유닛 테스트를 작성할 수 있습니다. 또한 컨트롤러와 뷰와 분리로 인해 테스트가 더 용이합니다.
Spring MVC에서의 MVC 구현
DispatcherSerlvet을 통해 MVC 패턴을 실현
사용자가 HTTP 요청을 보내면, DispatcherServlet이 이를 처리하고, 적절한 컨트롤러로 전달하여 모델을 사용하여 데이터를 처리합니다. 그 후 처리된 데이터를 뷰에 전달하여 최종적으로 사용자에게 응답을 반환합니다. 그 후 처리된 데이터를 뷰에 전달하여 최종적으로 사용자에게 응답을 반환합니다. 이 구조는 Spring Framework에서 매우 중요한 부분이며, 웹 애플리케이션 개발의 핵심이 됩니다.
예시 코드
// Controller (UserController)
@Controller
public class UserController {
@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long userId, Model model) {
User user = userService.findUserById(userId); // 모델에서 데이터 가져오기
model.addAttribute("user", user); // 모델 데이터를 뷰에 전달
return "userProfile"; // "userProfile" 뷰를 반환
}
}
<!-- View (userProfile.html) -->
<!DOCTYPE html>
<html>
<head>
<title>User Profile</title>
</head>
<body>
<h1>User Profile</h1>
<p>Name: ${user.name}</p>
<p>Email: ${user.email}</p>
</body>
</html>
이 예시에서 UserController는 사용자의 정보를 가져오고 이를 userProfile.html 뷰에 전달하여 사용자에게 보여줍니다. userProfile.html은 단순히 모델 데이터를 화면에 표시하는 역할
'JAVA언어 > Spring' 카테고리의 다른 글
Spring Web (0) | 2025.04.09 |
---|---|
spring 어노테이션 (0) | 2024.06.26 |
Configuration (0) | 2024.06.24 |
스프링 빈 (@Autowired / ApplicationContext) (0) | 2024.06.23 |