[10분 테코톡] 🐝범블비의 MVC Pattern
https://www.youtube.com/watch?v=es1ckjHOzTI
MVC 패턴
· Model -View-Controller의 약자
· 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴
MVC 패턴의 역사
1979년 탄생
· 데스크톱 어플리케이션
· 사람과 컴퓨터 간의 간극을 해결하기 위해 나옴
· 지금의 MVC 패턴과는 다름
1988년 Small-Talk80 논문 채택
· 모델과 뷰의 분리
· 최근 MVC 패턴과 유사
· 모델과 뷰가 결합이 되어있다.
JSP(HTML + JAVA) → 웹 서버에서 동적으로 웹 페이지를 생성
JSP Model 1

· 로직 + 출력 코드가 한 페이지에 삽입 → 쉬운 코딩 But, 어려운 유지보수
JSP Model 2

· MVC 패턴을 웹에 적용
· 비즈니스/출력 로직의 분리
· 유지보수가 용이
· 뷰, 로직에 대한 분업이 가능
· 하지만 여전히 모델과 뷰가 결합
Cocoa MVC(Apple MVC)
· 모델과 뷰의 완전한 분리
· 현재 개발자들에게 가장 친숙
MVC 흐름
1. 클라이언트는 필요한 기능을 컨트롤러에 요청2. 컨트롤러는 알맞은 모델에게 비즈니스 로직 수행을 맡김3. 알맞은 뷰 선택4. 결과 화면 출력
모델
· 데이터와 행동을 갖는 객체
· 비즈니스 로직 수행
- 상태 변화 처리
- 상태 정보 반환
뷰
· 데이터의 시각화
· 모델이 처리한 데이터를 받아서 사용 → 뷰 안에 데이터, 로직이 있으면 안된다.
컨트롤러
· 사용자의 요청을 해석하고 처리하고 결과를 반환
· 모델과 뷰를 느슨하게 연결
· 유일하게 다른 컴포넌트의 존재를 알고 있는 컴포넌트 → 데이터의 흐름을 제어
MVC 사용 이유
· 도메인의 재사용
· 확장성이 증가
· 중복 코딩 제거
· 각 요소들에 집중 → 분업 효과
5 - Layer

· Presentation Layer와 Control Layer는 위에서 설명
서비스 로직
· 클래스간의 관계 관리
· 상태 저장
· 트랜잭션
· Control - Persistance 계층을 연결
도메인 오브젝트
· 데이터와 행위를 갖는 객체
· 핵심 비즈니스 로직
· 주요 검증
· Persistance Layer에 맵핑
Persistance Layer
· 데이터의 처리(CRUD)
· DAO 패턴, ORM
도메인 모델 레이어
· 각 계층 사이에서 전달되는 객체
· DTO 패턴
· 대부분 도메인 모델을 DTO로 사용
유효성 검증
뷰
· 간단한 검증
- 비어있는 값
- 적절하지 않은 타입(정수 타입이 들어와야 하는데 소수가 들어온 경우 등)
컨트롤러
· 파라미터 존재 유무 검증
- @PathVariable
- @RequestBody
모델
· 데이터 검증
- @Valid
- 로직에 대한 검증
프론트를 100% 믿으면 안된다. 백엔드에서도 검증은 필수!
MVC의 대안
MVC - 컨트롤러와 뷰의 강한 결합
MVP - Presenter를 사용하여 뷰의 인터페이스와 결합
MVVM -View가 ViewModel을 구독하는 형식으로 더 느슨하게 결합할 수 있도록 함