MVC란
- Design pattern 중에 하나
- 작업 영역을 기준으로 Model, View, Controller 3가지 영역으로 나눠 개발하는 패턴
- 각자 역할에 충실하며 중복 코딩을 사라지는 것을 목적으로 한다
- 운용하는 서비스(App)의 규모가 크지 않은 경우 Serivce, Data access method 분리 없이 가져가는 경우도 존재
MVC 구성
Model
- DB와 연동해 데이터 다루는 작업
- app에서 서비스하는 business logic(biz라고도 불림), 사용되어지는 데이터를 담당
View
- Client와 직접적인 소통
- 사용자에게 보여질 결과 화면을 만들어내는데 사용하는 자원 의미
- presentation logic 담당
- jsp and HTML
- jsp(java server page) : java를 이용한 서버 사이드 스크립트 언어
- 스크립트 언어 :
- 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어
- HTML 문서 안에 직접 프로그래밍 언어를 삽입하여 사용하는 것
- 기계어로 컴파일 되지 않고 별도의 번역기가 소스를 분석하여 동작하게 하는 언어
- 데이터베이스 처리 작업을 수행하기 위해 주로 사용
- 종류 - 어디서 해석되는지로 나눔
- 서버용(서버에서 해석) - ASP, JSP, PHP, python
- 클라이언트용(클라이언트에서 해석) - java script
- view를 interface라고도 부른다
- client는 view만 보며 소통하기 때문
- client와 server의 소통 또한 view로 이루어짐
Controller
- Data 처리 방법에 대한 논의, 중간 제어자 역할
- client의 요청을 어떻게 처리할지에 대해 결정 후 Service에 전달
- 실질적인 작업은 Service에서 진행
- 중간 제어자 역할을 통해 서비스의 유지 보수성 증가 시킨다
- 사용자의 요청을 받아 적합한 model 영역의 biz를 호출하고 view를 선택해 적절한 결과 보여줌
- 결과 View에 전달
- 방법
@Controller
@RestController
- JSON,XML 형태로 객체 데이터 변환 목적
@Controller + @ResponseBody
- Request, Response는 모두 Controller에서 사용하는 작업
- Service의 경우는 request, response 몰르는 상태에서 특정 비즈니스 로직을 운영
Service
- Controller로 부터 받은 요청에 일치하는 작업을 Data access(DAO, Repository)에 요청하는 메서드
- DAO, Repository에 Data 요청
- DAO, Repository는 DB에 직접 접근
Dao
- Data Access 프로세스 운영
- DB를 이용하여 데이터를 검색, 추가, 수정, 삭제 로직을 전담하는 객체(model)
- JDBC api와 sql 문장으로 구현
- 데이터베이스 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용
- 사용자는 interface를 DAO에 던지고 이 interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환
Service <=> Data Access
- 유사하다 볼 수 있지만 Service의 경우는 비즈니스 로직(프로그램 운영관련 알고리즘), Data Access(DAO, Repository)는 말 그대로 DB 접근 로직 운영
Data Access 관련
- DAO, Repository, Mapper 등
- DB에 직접적으로 접근하는 객체로 sql query와 관련이 깊다
Controller <-> Service 유지 보수와 관련해
- Controller와 Service가 분리되어 있지 않은 경우에 Controller가 Client에 따라 여러 개로 분리되며 Client1, Client2가 모두 A작업을 한다했을 때 Controller(Client1) -> A, Controller(Client2) -> A처럼 동일한 메서드가 중복되는 현상 발생
- 분리되어 있다면 Controller는 중복되는 현상 막을 수 있다
MVC Logic 과정
- VIEW => CONTROLLER(호출 역할) => SERVICE(Logic의 대한 트랜잭션 처리) => DAO(DB와 직접적인 소통) => SERVICE => CONTROLLER => VIEW => CLIENT
ref