MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다
소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있다
이러한 "관심사 분리" 는 더나은 업무의 분리와 향상된 관리를 제공한다
모델은 포함해야할 데이터가 무엇인지를 정의한다
데이터의 상태가 변경되면 모델을 일반적으로 뷰에게 알리며(따라서 필요한대로 화면을 변경할 수 있습니다) 가끔 컨트롤러에게 알리기도 한다(업데이트된 뷰를 제거하기 위해 다른 로직이 필요한 경우)
뷰는 앱의 데이터를 보여주는 방식을 정의한다(JSP, HTML 등)
컨트롤러는 앱의 사용자로부터의 입력에 대한 응답으로 모델 및/또는 뷰를 업데이트하는 로직을 포함한다
MVC모델과 3계층구조가 비슷하다고 생각했는데 비슷하면서도 다른점이 보였다
내가 파악한 3계층 구조는 자기가 맡은 역할은 자기가 처리하기
이다
Presentation Layer
, Business Layer
, Data Access Layer
가 서로의 역할을 침범하지않고 로직을 처리하는것이다
Business Layer
가 직접 Database에 접근 하는 일이 없어야하고, Data Access Layer
가 직접 client에 응답을 해서는 안된다고 생각한다
3 Layer Architecture
가 선형이라면, MVC Model
은 삼각형 형태로 되어있지않다
뷰는 컨트롤러에 업데이트를 보내고 컨트롤러는 모델을 업데이트하며 뷰는 모델에서 직접 업데이트된다
출처 : stackoverflow
http://www.tonymarston.net/php-mysql/3-tier-architecture.html
물리적으로 구분할 수 없는 MVC 패턴은,
[view -> controller] 사용자의 요청을 view에서 받아 이를 controller에게 전달
[controller -> model] controller는 model단에 데이터 처리요청
[model -> view] 해당 결과를 바로 view로 보여줌
3tier와 MVC관계를 보면
Presentation Layer 에는 controller 와 view 가
Business Layer(Service Layer) 에는 Model이
Data Access Layer(Repository Layer)에는 DAO가 있다.
출처 : DW dev blog
면접관님이 MVC모델의 Model, View, Controller가 3 Layer Architecture 3부분의 어디에 해당될까요?
라는 질문의 대답은
View와 Controller는 Presentaion Layer
에 해당하고 Model은 Business Layer
에 해당하니까 우리 프로젝트 구조에 매칭시켜보면
View, Controller는 우리의 Controller
이고 Model은 Service
에 해당하는것이 아닐까 라고 자문자답 해보게된다