공부 기록장
[Backend] MVC 패턴 본문
사용자 입장에서, 웹 브라우저와 인터넷만 있으면 인터넷에 접속해서 뭐든지 할 수 있다.
하지만 개발자의 입장에서는, 사이트를 사용하기 위해 프론트엔드와 백엔드를 처리해주어야 한다.
프론트엔드에 쓰이는 html, css, js 등은 웹 서버에서 처리해주고, DB를 사용하기 위해 사용하는 java는 어플리케이션 서버에서 처리해준다.
Web Application Architecture
JSP 를 이용하여 구성할 수 있는 웹 어플리케이션 아키텍트는 크게 model1과 model2로 나뉜다.
1) JSP 가 클라이언트의 요청에 대한 logic처리와 response page(view) 에 대한 처리를 모두 하는지,
2) response page(view) 에 대한 처리만 하는지가 가장 큰 차이점이다.
Model1 구조
model2은 view와 logic을 JSP 페이지 하나에서 처리하는 구조를 말한다.
이러한 모양을 가지고 있으며, JSP파일이 뷰와 컨트롤러 역할을 모두 담당한다.
장점
- 구조가 단순하며 직관적이기 때문에 배우기가 쉽고,
- 개발 시간이 비교적 짧기 때문에 개발 비용이 감소한다는 장점을 가지고 있다.
단점
- 출력을 위한 view 코드와 로직 처리를 위한 java 코드가 섞여있기 때문에 jsp 코드 자체가 복잡하다.
- jsp 코드에 백엔드와 프론트엔드가 혼재되기 때문에 분업이 힘들다.
- 프로젝트의 규모가 커지면 코드가 복잡해져 유지보수 하기가 나쁘다.
- 확장성(신기술의 도입, 프레임워크등)이 좋지 않다.
model2
model2는 MVC 패턴을 웹개발에 도입한 구조이다.
모든 처리를 JSP 페이지에서 하는 것이 아니라, client에 요청에 대한 처리는 servlet이, logic에 대한 처리는 java class가, client에게 출력하는 response page를 JSP가 담당하는 구조를 가지고 있다.
Model2의 구조
MVC 패턴에서
M은 model으로, 데이터를 처리하는 것을 맡고 있다.
- 흐름도 상에서 Entity 값 객체는 dto를 뜻한다. 우리가 알고 있는 자료형 같은 느낌으로, 주로 필요한 데이터를 저장 해 놓는 클래스를 맡는다.
- dao(data access object)는 DB와의 상호작용에만 관심을 갖고, 컨트롤러의 수많은 기능은 서비스에 맡기고 DB에서 넣고 빼는 것들만 처리한다.
- service는 dto를 받아서 처리해주는 곳으로, 수많은 로직들을 수행하는 곳이다. 우리가 알고 있는 회원가입, 게시글 조회 등의 서비스를 처리하는 곳이다.
V는 view로, 우리에게 보여지는 곳들을 처리하는 곳이다.
주로 jsp로 만들어져 있고, jsp가 html이랑 가까울 수록 잘 짜여진 코드라고 판단한다.
로직은 java단에서 실행하고 jstl등을 이용해 제어문이나 반복문 수행등만 사용해서 결과물을 출력한다.
C는 controller로, 중간에서 제어하는 역할을 한다.
A에서 들어온 요청을 B로 보내는 등, 파라미터를 받아서 결과를 싣고 포워드/리다이렉트 형태로 명령을 전달하는 역할을 한다.
장점
- 출력을 위한 view 코드와 로직 처리를 위한 java 코드가 분리 되었기 때문에 model1에 비해 코드가 복잡하지 않다.
- 화면단과 로직단이 분리 되었기에 분업이 용이하다.
- 기능에 따라 코드가 분리 되어 있어, 유지 보수가 편리하다.
- 프레임워크나 신기술 도입 등의 확장성이 뛰어나다.
단점
- 구조가 복잡해서 초기 진입이 어렵다
- 개발 시간의 증가로 개발 비용 많이 든다.
정리
두 모델 모두 장단점이 있다. 그래서 model1만 좋다든지, model2만 사용해야 한다든지 하는건 아니다.
상황에 따라 다르게 사용하는 것이 베스트다.
유지보수가 필요 없고 확장성이 필요없는 사이트는 개발이 쉽고 비용이 적게 드는 model1을 사용하면 된다.
예를 들면 프로토 타입을 만들거나, 영화 홍보 페이지를 만드는 등, 금방 쓰고 사용하지 않을 페이지들에 사용하면 좋다.
계속해서 써야하는 사이트이거나 프로젝트의 규모가 크다면 model2로 만드는 것이 좋다. 계속해서 쓰이는 페이지라면 결함이 발견될 것이고, 사이트의 규모가 점점 커질 텐데 초기 개발비용을 생각하더라도 장기적으로 model2로 만드는 것이 더 유리하기 때문이다.
'웹 > Backend' 카테고리의 다른 글
[SPRING] DI (의존성 주입) (0) | 2021.05.14 |
---|---|
[SPRING] 스프링이란? (2) (0) | 2021.05.14 |
[SPRING] 스프링이란? (1) (0) | 2021.04.27 |
JSP 정리 (0) | 2021.04.04 |
Servlet 정리 (0) | 2021.03.29 |