염려의 분리 (Seperation of Concerns)
- 유저 인터페이스와 관련된 부분은 모두 View 에 의해서 관리되고, 모든 데이터와 관련된 로직은 Model 에 의해서 관리되며 오로지 Controller 에 의해서 Model 에 접근할 수 있게 됩니다. 각각의 레이어가 하는 역할이 명확 합니다.
동시적인 개발 (Simultaneous Development)
- 세개의 레이어로 역할이 나뉘어져 있기 때문에 동시다발적인 개발이 가능합니다. 역할분담에 용이하며 협업이 가능한 프로젝트를 구성할 수 있습니다.
수정의 용이함 (Ease of Modification)
- 다른 레이어에 영향을 주지 않고 문제가 있는 로직을 찾아서 문제를 해결할 수 있습니다.
테스트-주도 개발(Test Driven Development)
- 각각의 레이어, 그리고 그 레이어 속에 속한 각각의 모듈을 테스트 하기 좋습니다.
Route, Controller, Service, Model 각각의 레이어가 하나의 폴더이자 역할을 의미 합니다.
Route - url, endpoint 함수가 실행될수있는 길
Controller - req, res 제어하는곳
Service - 요청이 유효하다 데이터베이스에 접근하는 로직
즉 다음과 같은 상황에서 유연하게 대처할 수 있다는 의미 입니다.
때때로, 서비스를 구현하다가 RDBMS(관계형 데이터 베이스) → NoSQL(ex. mongoDB) 로 이전하는 경우가 있는데, Route와 Controller 의 로직은 전혀 바뀌지 않은채로 데이터를 다루는 Service 와 Model 의 로직만 변경 해 주면 됩니다.
아래의 코드는 지난 시간에 살펴보았던 User API 로직을 위에서 설명한
Route → Controller → Service → Model 레이어로 나누었을 때의 코드 입니다.