MVC


### Model + View + Controller
### MVC의 분리 개발이 핵심
**사용자 인터페이스와 비지니스 로직을 분리하여 개발 하는 것**
- Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
- View : 사용자에서 보여지는 UI 부분입니다.
- Controller : 사용자의 입력(Action)을 받고 처리하는 부분입니다.
> ![](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F33539fff-63c2-4ed9-9293-341a227ea690%2FUntitled.png?table=block&id=d837a97a-406b-4bee-b5e0-35977fcc73e6&cache=v2)


-  화면에 보여줄 view 에 대한 작업
- DB에서 조회 혹은 DB에 저장할 내용을 중간에 가공, 처리하는 비즈니스로직
- DB에 연결하는 DAO 작업
 JSP에서 다 하던걸 패턴화 시켜 분리하여 개발하는것인데 각각의 역할에 따라 파일들을 분리해서 작업하는 것


[Model1](https://texonom.com/model1-dbcaa44366f24cc382f39cb4030b4fa4)


[Model2](https://texonom.com/model2-3d895ed9ba8b414eb1bf7c82e27c14c4)



1. 사용자의 Action들은 Controller에 들어오게 됩니다.
2. Controller는 사용자의 Action를 확인하고, Model을 업데이트합니다.
3. Controller는 Model을 나타내줄 View를 선택합니다.
4. View는 Model을 이용하여 화면을 나타냅니다.

service 는 인터페이스로 생성하고 serviceImple이라는 구현객체를 생성해서 사용하고있던것


### MVC에서 View가 업데이트 되는 방법
- View가 Model을 이용하여 직접 업데이트 하는 방법
- Model에서 View에게 Notify 하여 업데이트 하는 방법
- View가 Polling으로 주기적으로 Model의 변경을 감지하여 업데이트 하는 방법.

MVC 패턴의 핵심은 View는 자신이 요청할 Controller만 알고있으면 되고, Controller는 화면에서 넘어오는 매개변수들을 이용해 Service 객체를 호출하는 역할을 한다
Service 에 request나 response와 같은 객체를 매개변수로 받아선 안된다. 그걸 사용해야하는 작업은 컨트롤러에서 해야한다
모듈화를 통해 어디서든 재사용이 가능한 클래스파일

비즈니스 로직을 처리하는 모델은 요청사항에 따라 언제든 변할수있는 부분이었고 변화에 대응하기위해 확장을 염두하여 인터페이스로 구성했던것
개발은 transaction script 형식으로 진행하다보니 관례는 관례대로 남고 애초에 그렇게 하고자했던 이유는 사라져버리게 된것

프로젝트 규모가 커질수록 모델과 뷰가 급격히 늘어나 대규모 어플리케이션 개발에 적합하지 않았다 그래서 페이스북에서 [Flux Design Pattern](https://texonom.com/flux-design-pattern-42ec4f6afba6435e92241eb8fd4847a0) 

### compare
> [[디자인패턴] MVC, MVP, MVVM 비교](https://beomy.tistory.com/43)

### service
> [MVC 구조에서 service와 serviceImpl](https://multifrontgarden.tistory.com/97)





