Notice
Recent Posts
Recent Comments
Link
쯔이's Dev
mvc구조 본문
반응형
소프트웨어 디자인 패턴 중 하나.
애플리케이션을 세 가지 역할(Model, View, Controller)로 분리하여 유지보수성과 확장성을 높이는 구조
1. MVC의 개념
MVC는 다음 세 가지 주요 구성 요소로 이루어져 있다.
(1) Model (모델)
- 역할 :
- 애플리케이션의 데이터와 비즈니스 로직을 담당.
- 데이터를 처리하고, 데이터베이스와의 상호작용을 수행.
- 상태 변경 및 로직을 포함하며, 뷰(화면)와 독립적으로 동작.
- 예 :
- DAO(Data Access Object) 클래스 (DB 작업)
- Service 클래스 (비즈니스 로직 처리)
- DTO / VO (데이터 객체)
(2) View (뷰)
- 역할 :
- 사용자에게 정보를 보여주는 UI(User Interface) 담당.
- 사용자의 입력을 받아 컨트롤러에 전달.
- 모델에서 받은 데이터를 사용자 친화적으로 렌더링.
- 예 :
- HTML, JSP, React(프론트엔드)
- 콘솔 출력, 웹 페이지, 모바일 화면
(3) Controller (컨트롤러)
- 역할 :
- 사용자 입력을 받아 처리하고, 모델과 뷰를 연결하는 역할.
- 뷰에서 전달받은 데이터를 모델로 넘기고, 모델에서 데이터를 가져와 뷰로 전달.
- 흐름을 제어하는 역할을 수행.
- 예 :
- Servlet (Java Web)
- Spring의 @Controller 클래스
- Express.js의 라우터
2. MVC의 흐름 (데이터 처리 과정)
- 사용자(클라이언트)가 요청을 보냄 (예: 웹사이트에서 버튼 클릭).
- 컨트롤러(Controller)가 사용자의 요청을 받아서 처리.
- 모델(Model)에서 데이터를 조회하거나 업데이트함.
- 컨트롤러(Controller)는 모델에서 가져온 데이터를 뷰(View)에 전달.
- 뷰(View)가 사용자에게 데이터를 보여줌.
3. MVC 패턴의 장점
- 유지보수 용이성
- 역할이 분리되어 수정 시 영향 범위가 작음.
- 재사용성 증가
- 비즈니스 로직과 UI를 분리하여 코드 재사용 가능.
- 협업 용이
- 백엔드 개발자와 프론트엔드 개발자가 독립적으로 작업 가능.
- 가독성 및 확장성 향상
- 새로운 기능을 추가할 때 기존 코드에 미치는 영향을 최소화.
4. MVC 패턴의 단점
- 복잡한 프로젝트에서 코드가 많아질 수 있음.
- 처음 설정 시 많은 작업이 필요함.
- 모든 애플리케이션에 적합하지 않음.
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public String getUser(@PathVariable int id, Model model) {
User user = userService.getUserById(id);
model.addAttribute("user", user);
return "userView"; // View (userView.jsp)
}
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUserById(int id) {
return userRepository.findById(id).orElse(null);
}
}
<h1>사용자 정보</h1>
<p>이름: ${user.name}</p>
<p>이메일: ${user.email}</p>
5. MVC 패턴의 변형 (확장 패턴)
- MVVM (Model-View-ViewModel):
- 프론트엔드 프레임워크(React, Vue, Angular)에서 주로 사용.
- 데이터 바인딩과 상태 관리를 강화한 패턴.
- MVP (Model-View-Presenter):
- 프레젠터가 컨트롤러 역할을 대신하며, 뷰와의 의존성을 더 낮춤.
6. MVC 패턴의 적용 사례
- 웹 애플리케이션:
- Java의 Spring MVC, ASP.NET MVC, Ruby on Rails 등.
- 데스크톱 애플리케이션:
- Java Swing (JFrame, JPanel), C# WinForms 등.
- 모바일 애플리케이션:
- Android의 MVC 아키텍처.
728x90
반응형