🎮

MVC(Model, View, Controller)와 Service Layer

MVC Pattern은 소프트웨어 공학의 디자인 패턴의 일종이다. 다른 디자인 패턴들이 으레 그렇듯, 스파게티 코드를 방지하고 리팩토링을 쉽게하고 등등...의 이유로 등장한 것이겠지.

Model

먼저, 모델을 요약하면 개발하고자 하는 서비스, 인프라에 대한 Data Structure 그 자체라고 할 수 있겠다.
DB에 대응되고 해당 DB에 CRUD를 수행하는 부분이라고 할 수 있다.

View

UI/UX 에 대응되는 부분으로, 사용자가 제어하는 부분이다.
View에는 데이터가 저장되지 않고 Model에서 데이터를 받아서 View하기만 한다.

Controller

Model과 View를 연결하는 부분으로 서비스에 대한 메인 로직, 알고리즘에 해당하는 파트이다.
View에서 발생한 Event를 Processing해서 Model에 반영하거나 Model에서 정보를 불러오는 역할을 수행한다.
API 서버를 구성한다면 각 Router가 Controller에 해당한다.

Service Layer

MVC만으로도 구성할 수 있지만, 대부분의 경우는 Service Layer를 두어 Controller와의 책임을 분산한다.
Service Layer는 Controller와 Model사이에 위치하며, Controller로부터 전달되어온 데이터를 바탕으로 비즈니스 로직을 수행한다.
비즈니스 로직이란? 비즈니스 로직은 컴퓨터 프로그램에서 실세계의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분을 일컫는다.
Controller와 Service를 분리한다면, Controller는 View로부터 받은 Data를 바탕으로 어떤 Service를 호출할지 판단하고, Service로부터 전달되어온 Data를 View로 표시하는 역할을 수행한다.
Service Layer는 직접적으로 Request나 Response등을 수행하지 않으며, Controller에게 Data를 전달받거나 전달하는 역할만을 수행한다.
Service Layer를 굳이 분리하는 이유는, 재사용성을 높이기 위해서이다. Controller는 View에 종속적이기 때문에 어떤 형식의 View를 선택하느냐에 따라서 Controller가 수정될 수 있고, 그렇게 된다면 코드의 종속성이 떨어진다.