728x90
MVC 패턴 개요
- MVC 패턴은 서블릿이나 JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것을 말한다.
- 사용자가 controller를 조작하면 controller는 model를 통해서 데이터를 가져온다.
- 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달한다.
- model → controller → view
- view → user → controller → model
🔍 MVC 패턴을 사용하는 이유
- 사용자가 보는 페이지, 데이터 처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤, 총 3가지로 구성되는 하나의 애플리케이션을 만들면 각각 맡은 바에만 집중할 수 있다.
- 하나의 역할들만 담당해서 처리를 효율적으로 만든다.
- 서로 분리되어 각자의 역할을 집중할 수 있게 애플리케이션을 만든다면, 유지보수, 애플리케이션의 확장성, 유연성이 증가되고, 중복코드 문제점이 사라진다.
- 변경의 라이프 사이클을 기준으로 역할을 분할하여 유지 보수를 쉽게 만든다.
🔍 Model
- 데이터를 가진 객체를 모델이라 지칭한다.
- 데이터는 내부에서 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다.
- Model은 HttpServletRequest 객체를 사용한다.
- HttpServletRequest의 인스턴스인 request는 내부에 데이터 저장소를 가지고 있는데, request.setAttribute() , request.getAttribute() 를 사용하면 데이터를 보관하고, 조회할 수 있다.
💡 Model 규칙
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
- 화면에 네모 박스안에 글자가 표현된다면, 네모 박스의 화면 위치 정보, 네모 박스의 크기 정보, 글자 내용, 글자의 위치, 글자의 포맷 정보 등을 가지고 있어야 한다.
- view나 controller에 대해서 어떤 정보도 알면 안된다.
- 데이터 변경이 일어 났을 때, 모델에서 화면UI(view)를 직접 조정해서 수정할 수 있도록 view를 참조하는 내부 속성값을 가지면 안된다.
- 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 한다.
- model의 속성 중 텍스트 정보가 변경되면, 이벤트를 발생시켜 누군가에게 전달해야하며 누군가 모델을 변경하도록 요청하는 이벤트를 보냈을 때 이를 수신할 수 있는 처리 방법을 구현해야 한다.
- 또한, model은 재사용이 가능해야 하기 때문에 다른 인터페이스에서 변하지 않아야 한다.
🔍 View
- 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다.
- input 텍스트, 체크박스 항복 등과 같이 사용자 인터페이스 요소를 나타낸다.
- 즉, 데이터 및 객체의 입력, 화면을 보여주는 출력을 담당한다.
💡 View 규칙
- 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
- 화면에 글자를 표시하기 위해, 모델 정보를 전달 받게 되는데 그 정보를 유지하기 위해서 임의로 뷰 내부에 저장하면 안된다는 말이다.
- 단순히 네모 박스를 그리라는 명령을 받으면 화면에 표시하기만 하고 그 화면을 그릴 때 필요한 정보들을 저장하지 않는다.
- model이나 controller 같은 다른 구성 요소를 모른다.
- model과 같이 자기 자신을 제외하면 다른 요소를 참조하거나 어떻게 동작하는지 알면 안된다.
- 그냥 뷰는 데이터를 받으면, 화면에 표시해주는 역할만 가져야 한다.
- 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야 한다.
- model과 같이 변경이 일어났을 때 누군가에게 변경을 알려줘야하는 방법을 구현해야 한다.
- view는 사용자가 화면에 표시된 내용을 변경하게 되면 이를 model에게 전달해서 model을 변경해야 한다.
- 그 작업을 하기 위해 변경 통지를 구현해야 한다.
🔍 Controller
- model과 view를 연결해주는 역할을 한다.
- 주로 비즈니스 로직(문제를 해결하기 위한 과정)이 컨트롤러에 구현되어 있다.
💡 Controller 규칙
- model이나 view에 대해서 알고 있어야 한다.
- 모델이나 뷰는 서로의 존재를 모르고, 변경을 외부로 알리고, 수신하는 방법만 가지고 있다.
- 하지만 컨트롤러는 모델과 뷰를 중재하기 위해서 모델과 뷰에 대한 정보를 알고 있어야 한다.
- 즉, model이나 view에서 변경이 일어 났을 때, 이를 controller에게 알리고, controller는 어떻게 처리할지 결정해 다시 다른 구성 요소에게 변경을 알려주는 중재가 역할을 한다.
- 모델이나 뷰의 변경을 모니터링 해야 한다.
- 모델이나 뷰의 변경을 통지 받으면, 이를 해석해서 각각의 구성 요소에게 통지를 해야 한다.
👀 참고 자료
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
https://bsnippet.tistory.com/13
https://m.blog.naver.com/jhc9639/220967034588
728x90
'[ Spring ] > SpringMVC 1편' 카테고리의 다른 글
[Spring] MVC 프레임 워크 만들기 (0) | 2022.02.20 |
---|---|
[Spring] Servlet과 JSP로 MVC 패턴 구현하기 (0) | 2022.02.18 |
[Spring] JSP로 회원 관리 웹 애플리케이션 만들기 (0) | 2022.02.18 |
[Spring] 서블릿으로 회원 관리 웹 애플리케이션 만들기 (0) | 2022.02.17 |
[Spring] HttpServletResponse / 응답 데이터 전달하는 방법 (0) | 2022.02.15 |