MVC 패턴?
Model, View, Controller 의 앞글자를 딴 디자인 패턴이다.
Model, 모델
- 데이터를 처리하는 영역 (데이터와 비즈니스 로직을 관리)
- 데이터베이스 연동을 위한 DAO (Data Access Object)와 데이터 구조를 표현하는 DO (Data Object)로 구성
View, 뷰
- 사용자에게 정보를 표시하는 역할
- 웹 사이트, 어플과 같은 사용자 인터페이스 (UI)를 의미
- 별도의 데이터를 보관하지 않음
Controller, 컨트롤러
- 모델과 뷰 사이에서 브릿지(bridge) 역할을 수행
- 사용자의 요청은 모두 컨트롤러를 통해 진행되어야 함
특 징
- 어플리케이션의 역할을 세 가지 주요 부분으로 나누어 설계함으로써 서로 간의 의존성이 낮아짐
- 독립적인 각 부분은 영향을 주지 않기 때문에, 유지 보수와 테스트하기 용이하고, 개발자 간 분업 및 협업이 원활해짐
단 점
- 간단한 프로젝트에 MVC 패턴을 도입하는 것은 오버헤드일 수 있다. 모델-뷰-컨트롤러로 분리하는 구조는 큰 프로젝트에 더 유용하며, 작은 프로젝트에서는 과도한 구조화일 수 있다
- 컨트롤러의 역할이 너무 커져 복잡해질 수 있다. "Massive-View-Controller" MVC 패턴을 구현할 때 발생하는 문제 중 하나를 가리키는 용어이다.
- 다수의 뷰와 모델들이 컨트롤러를 통해 연결되기 때문에 컨트롤러가 많은 책임을 가질 수 있다
- 코드 가독성이 떨어지기 때문에, 유지 보수와 확장을 어렵게 만든다
MVC 프로젝트의 폴더 구조
- src
- main
- java
- com/example/demo
- user
- controller # 컨트롤러
- service # 서비스
- impl
- model # 모델
- board
- controller
- service
- impl
- model
- DemoApplication.java # 스프링 부트 애플리케이션의 시작점
- user
- com/example/demo
- java
- resources
- mybtis
- mapper
- mybtis
- webapp
- WEB-INF
- views # 뷰 (User Interface)
- WEB-INF
- main
폴더 구조는 정해진 것은 없기 때문에, 다양하게 구조화할 수 있다
모델 부분에서는 vo / dto / repository 패키지로도 구성할 수 있지만, 나는 model 패키지로 구성하려 한다
그리고 MyBatis / JPA 를 사용하는지에 따라서도 다르게 구성되는 것 같다
참고 링크
'JAVA > Spring' 카테고리의 다른 글
[Springboot] MyBatis (feat. MySQL) (1) | 2023.09.11 |
---|---|
[Springboot] Lombok (0) | 2023.09.04 |
[Springboot] 스프링부트 시작하기 (0) | 2023.09.03 |