What is MVC?
MVC는 뭘까요?… 사실 저는 이미 직접 구현도 해본 상태이고, 이걸 이용해서 로그인, 게시판 도 구현을 해봤습니다.
그럼에도 잘 이해가 안가는 부분이(Controller 구현방식…) 존재해서 글로 한번 정리해보고자 합니다!
M : Model. V : View. C: Controller
단순히 직역만 해도 대략 알 수 있는 의미입니다.
- Model : 데이터와 비지니스 로직을 관리합니다.
- View : 클라이언트가 보는 레이아웃, 화면을 처리합니다.
- Controller : 클라이언트가 보낸 요청에 맞게 Model, View를 실행시킵니다.
생각보다 간단하죠?….
순서를 대략 정리해보자면,
웹브라우저 → Controller → Model, View → 웹브라우저
좀더 자세한 설명은 그림으로!….
인거죠? 사용자가 요청한 데이터에 따라서 비지니스 로직 혹은 데이터가 필요할 수 있으니 Model로 갔다가 View로 갈 수 있는것이고,
단순히 화면만(뷰) 보여주는거라면 바로 해당 View로 이동하겠죠?
그러면 여기서 말하는
Model : DAO, DTO, VO ,,,,,,
View : JSP(HTML, CSS, Javascript)
Controller : Servlet
이겠죠. 저는 자바 웹개발을 준비하기에 여기서 JSP가 나온겁니다!
위 사진과 같은 로직이 될겁니다 !
From. MDN
자 그러면 Model, View, Controller의 역할에 대해 자세하게 하나하나 나눠서 정의해보도록 하겠습니다!
Model
모델은 애플리케이션의 정보, 데이터를 나타냅니다.
위에서 말했듯이 데이터를 저장하고 보내주고 및 그 데이터들을 가지고 특정 로직을 구현해서 처리하는것을 담당하는게 바로 모델입니다!
ex. VO, DAO, DTO
이러한 모델에는 몇가지 규칙이 있다고 합니다.
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 한다.
- 뷰나 컨트롤러에 대해서 어떠한 정보도 알지 말아야 한다.
- 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다.
View
뷰는 클라이언트가 보는 화면, 즉 프론트측 언어들을 모아둔 컨테이너입니다. 사용자가 보는 화면을 뜻하고, 필요한 데이터를 모델로 부터 얻어옵니다
뷰의 규칙?
- 모델이 가지고 있는 정보를 따로 저장해서는 안됩니다.
- 모델이나 컨트롤러의 구성요소에 대해서 몰라야합니다. (수정, 삭제 같은 접근이 아예 불가능해야함)
- 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다.
Controller
컨트롤러는 사용자가 접근한 URL주소에 따라 사용자의 요청사항을 파악합니다.
그후에 요청에 맞는 데이터를 Model에게 요청을하고, 그 데이터를 View에 반영하여 사용자에게 보내줍니다.
컨트롤러의 규칙
- 모델이나 뷰에 대해서 알고 있어야 합니다.
- 모델이나 뷰의 변경사항을 모니터링 해야 합니다.
MVC의 패턴에 대해서 대략 알았으니 왜 이걸 쓰는지 알아야겠죠?…
제일 큰 이유는 ⇒ 비지니스 로직과 UI로직을 분리하여 유지보수를 독립적으로 수행이 가능합니다.
무슨 말이냐고요?…. 저희가 모델1 패턴을 사용했을때는 JSP파일에 프론트와 백엔드 두개의 영역의 코드를 모두 한꺼번에 썼습니다.
이렇게 되면 분업(프론트 영역, 백엔드 영역) 을 하게됬을때 많은 어려움이 발생하게 되고, 유지보수 측면에서 풀스택 개발자가 아니라면 한번에 모든것을 알아보기는 더더욱 힘들겠죠?…
다만 모델2 패턴은 MVC의 구조를 가지고 있기에 로직을 처리하는 Model, 사용자에게 보여주는 화면을 구성하는 View영역이 완전 별개로 존재하게 되어
애플리케이션을 확장하고, 유지보수 하는 측면에 있어서 매우 편합니다. 또한 중복 코딩의 문제점 또한 없어지게 되는거죠!!
한계점…
Controller에 의해서 하나의 View에 Model은 여러 개를 연결할 수 있게됩니다…그러면 서로 의존성을 띄우게 되죠?
즉 한마디로, 컨트롤러에 다수의 모델과 뷰가 복잡하게 연결되있는 상황이 발생할 수 있다는겁니다!!
(로직이 의도치 않게 복잡해지는거죠…ㅠ)
'Spring & Spring Boot' 카테고리의 다른 글
Spring bean(빈이란?) (0) | 2023.01.16 |
---|---|
IOC (Inversion Of Control) 제어의 역전 .feat “Container” (0) | 2023.01.16 |
Spring Framework 파일업로드 하기 (2) | 2023.01.16 |
DI (Dependency Injection) 의존성 주입 (0) | 2023.01.16 |
Spring Interceptor 핸들러 가로채기 🙂 (4) | 2023.01.16 |