MVC(Model-View-Controller) 패턴은 웹 어플리케이션을 개발할 때 사용하는 디자인 패턴 중 하나다.
웹 애플리케이션을 모델, 뷰, 컨트롤러로 비즈니스 로직을 나누어 개발하는 방식인데, 이 MVC 패턴은 Model1과 Model2 아키텍처로 나뉜다.
■ 모델
일반적으로 모델은 Service 클래스와 DAO 클래스로 구성한다. DAO는 데이터베이스 연동을 담당하는 클래스이며, Service 클래스는 DAO를 이용하여 실질적으로 비즈니스 로직을 처리하는 클래스다.
■ 뷰
사용자가 보는 화면 정보에 해당하는 것을 뷰라고 한다.
■ 컨트롤러
컨트롤러는 JSP에 포함된 자바코드 중에서 사용자 입력 정보 추출, DB 연동 처리, 화면 이동의 기능을 수행하는 코드들을 컨트롤러라고 한다.
MVC 모델1

뷰와 컨트롤러의 로직을 jsp로 한 번에 처리하는 구조로, client로부터 요청이 들어오면 JSP는 DAO, beans, Service 등의 클래스를 이용하여 작업을 처리하고 결과를 브라우저에 표현하는 방식이다.
장점
- 구조가 단순하여 직관적이다.
- 개발시간이 비교적 짧아 개발비용이 감소한다.
단점
- view 코드와 로직처리를 위한 java 코드가 섞여있어 JSP 코드 자체가 복잡하다.
- JSP 코드에 Back-End와 Front-End가 혼재되어있어 분업이 힘들다.
- 프로젝트 규모가 커지면 코드가 복잡해져 유지보수가 어렵다.
- 확장성이 나쁘다.
이러한 단점을 개선하기 위해 등장한 아키텍처가 MVC 모델2 이다.
MVC 모델2

MVC 모델2 아키텍처는 JSP 파일에 작성했던 자바 코드 중에서 컨트롤러에 해당하는 코드(사용자 입력 정보 추출, DB 연동 처리, 화면 이동)를 컨트롤러로 이동시킨다.
JSP는 사용자에게 화면을 출력하는 디자인적인 요소만 남게 되는 것이다.
MVC Model2 요소에 대한 기능과 개발 주체
| 요소 | 기능 | 구현 | 개발 주체 |
| 모델 | DB 연동이 포함된 비즈니스 로직 처리 | DAO | 자바 개발자 |
| 뷰 | 화면 | JSP | 디자이너 |
| 컨트롤러 | 모델과 뷰의 연계 | 서블릿 | 자바 개발자 또는 프레임워크 |
모델과 뷰는 기존의 역할에서 크게 벗어나지 않기 때문에 컨트롤러의 기능만 구현을 하면 된다.
컨트롤러는 서블릿 클래스로 구현하는데, 하나의 서블릿으로 컨트롤러를 구현하지는 않고 다른 여러 클래스와 상호작용하면서 동작한다.
컨트롤러는 대부분 직접 개발하기보단 스프링이나 전자정부 프레임워크를 이용한다.
장점
- view 코드와 로직처리 코드가 분리되어있어 JSP는 Model1에 비해 복잡하지 않다.
- Back-End와 Front-End가 분리되어 분업이 용이하다.
- 기능에 따라 코드가 분리되었기 때문에 유지보수가 쉬워졌다.
- 확장성이 뛰어나다.
단점
- 구조가 복잡하여 초기진입이 어렵다.
- 개발시간의 증가로 개발 비용이 증가한다.
ERP 시스템을 구축할 때 JSP 기반의 MVC 모델1 아키텍처, 스프링부트 기반의 MVC모델2 아키텍처 두 가지 방법을 사용하여 구현한 적 있는데 개발의 속도 자체는 전자가 더 빨랐던 것 같다. 개발해야할 페이지를 직관적으로 만들면 됐기 때문이다.
하지만 프로젝트의 규모가 커질수록 기술의 고도화, 성능, 협업 등을 염두에 두었을 때 MVC모델2가 더 효과적이라고 느껴졌다. 비즈니스 로직을 분리하여 단위적으로 개발 및 테스트를 할 수 있었고 코드의 재사용과 가독성이 더 뛰어났기 때문이다.
'WEB' 카테고리의 다른 글
| [Error] Exception java.lang.ExceptionInInitializerError: Cannot access defaults field of Properties [in thread "Worker-48: Building workspace"] (0) | 2024.02.27 |
|---|---|
| [WEB] 부트스트랩-bootstrap (0) | 2024.02.19 |
| [WEB]쿠키와 세션 (Cookie And Session) (0) | 2024.02.16 |
| [WEB]Redirect와 Forward의 차이 (0) | 2024.02.15 |
| 이클립스 톰캣 resource '/server' does not exist 에러 해결 방법 (0) | 2024.02.15 |