디자인 패턴
- 디자인 패턴은 건축으로치면 공법에 해당하는 것으로 소프트웨어의 개발 방법을 공식화 한 것
- 구현자들 간의 커뮤니케이션의 효율성을 높이는 기법
- MVC는 디자인 패턴 중 하나
MVC
Model View Controller의 약자로 하나의 애플리케이션을 세가지의 역할로 구분한 개발 방법론
사용자가 Controller를 조작하면 Controller는 Model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달
모델은 컨트롤러에 컨트롤러는 뷰에 뷰는 다시 유저에 유저는 다시 컨트롤러를 향해서
Model
- 데이터 담당 (주로 데이터베이스 의미) / 데이터 처리
- 데이터를 다루는 로직을 모델에 모아둬서 데이터와 뷰를 격리 시키는 것
- 사용자의 질의(query)에 대해 상태 정보를 제공하거나 상태를 수정
- 뷰나 컨트롤러에 대해서 어떤 정보도 알면 안됨
- 코드 관리의 편의성을 높일 수 있음
- 향후 데이터베이스 교체가 용이
View
- 화면상에 출력되는 내용을 의미 (사용자가 보는 페이지)
- UI와 관련된 코드
- 클라이언트 측 기술인 html/css/javascript들을 모아둔 컨테이너
Controller
- Model과 View를 중간에서 제어
- 사용자가 접근 한 URL에 따라 사용자의 요청사항을 파악
- 요청에 맞는 데이터를 Model에 의뢰 / 데이터를 View에 반영해서 사용자에게 알려줌
- 모델이나 뷰에 대해서 알고 있어야 함
MVC 패턴 장점
- 하나의 역할만 담당 및 처리하므로 효율적이게 됨
- 유지보수성, 애플리케이션의 확장성, 유연성() 증가
- 중복코딩이라는 문제점 또한 사라짐
유연성: 클라이언트의 새로운 요구사항에 대해 최소한의 비용으로 보다 유연하게 대처할 수 있는 것을 의미
Django의 경우
Django는 MTV(Model - Template - View) 패턴을 가짐
이는 MVC 패턴과 거의 유사함
장고에서의 Template이 MVC의 View이며
장고의 View는 MVC패턴에서 Controller와 유사함
Service layer
구조
- 서비스가 없는 구조 : M <--> C <--> V
- 서비스가 있는 구조 : M <--> S <--> C <--> V
View는 Service와 관계 없이 자신이 요청할 Controller만 알고있으면 됨
Service vs Controller
Controller
- 처리해야 할 데이터를 브라우저에게서 받음 (Request, Session 등)
- 담당할 service를 선택하여 호출(적절한 서비스를 호출하는 역할)
- 처리한 데이터를 뷰로 연결
Service (Model)
- 데이터를 받아 비즈니스 로직을 처리 (글을 쓰거나, 글을 읽거나, 글을 지우거나 하는 모든 것들)
- Service 에 request나 response와 같은 객체를 매개변수로 받아선 안됨 (그걸 사용해야하는 작업은 컨트롤러에서)
- DB의 활용이 필요한 경우 해당 처리를 하는 DAO를 호출
DAO : Data Access Object (Database의 data에 접근을 위한 객체)
MVC 패턴에서 Service의 역할
- 서비스는 자신을 어떤 컨트롤러가 호출하든 상관없음
- 필요한 매개변수만 주면 자신의 비즈니스 로직을 처리
- 모듈화를 통해 어디서든 재사용이 가능한 파일
Service는 비즈니스 로직의 재사용성을 높이기 위해서 만들어졌다.
예를들어 Web으로 만들어져 있던 기능을 App으로도 만들어야하는 상황이 발생했다고 하자.
Service로 비즈니스 로직을 나누지 않고 Controller로 모든 것을 처리하게 되면 같은 로직인데도
재사용이 어려울 것이다.(Controller는 View와 연결되어있기 때문)
이와 같이 변화에 대응하기 쉽게 만들고 확장성을 높게 만들기 위해서 Service를 사용한다.
View가 변경되더라도 Service가 재사용이 될 수 있어야하므로 Service는 view에 종속적인 코드가 없어야한다.
다만 한 메서드에서 모든 역할을 다 하는 코딩에서는 서비스를 굳이 사용할 필요는 없다.
비즈니스 로직 : 비즈니스 로직이란 업무에 필요한 데이터 처리를 수행하는 응용프로그램의 일부를 말한다. 이것은 데이터 입력, 수정, 조회 및 보고서 처리 등을 수행하는 루틴, 좀더 엄밀히 말하면 보이는 것의 그 뒤에서 일어나는 각종 처리를 의미한다.
ref
MVC : 큰돌의 터전
Service : 우리집 앞마당
Service : daehoney