[Node.js] MVC 패턴

zioo·2022년 5월 12일
0

Node.js

목록 보기
2/2

Model, View, Controller. 줄여서 MVC.

MVC도 절대적인 규범은 아니며, 결국 어떤 목적을 달성하기 위한 수단이다.


MVC가 등장한 이유

GUI를 가진 소프트웨어를 객체 지향적으로 잘 구조화하기 위해서.

GUI를 사용하는 애플리케이션을 객체 지향적으로 추상화하려고 하니까, 객체들이 맡고 있는 '역할'을 나눠주는 게 중요하다고 판단됨

그래서 객체들이 맡고 있는 '역할'을 기준으로 나누어 주었다.

  • 애플리케이션 데이터를 저장/가공하는 역할을 Model.

  • 화면에 데이터를 표시하고, 사용자와의 인터랙션을 담당하는 부분을 View.

  • 둘을 연결하는 역할을 Controller.

MVC의 본질: 관심사의 분리

MVC의 본질적인 목표가 무엇일까?

Model과 View를 분리하는 것'이다.

이것을 '관심사의 분리(Separation of Concerns)'라고 한다.

묶어놓은 코드(모듈)들의 역할을 나누고, 각자 맡은 부분만 신경쓰는 것이 기본 원리다.

그래야만 서로가 서로에게 영향을 받지 않고, 코드의 중복을 줄일 수 있다.

결합도가 낮아지고 중복이 줄어들면 변경을 하기가 쉬워진다.

refactoring을 하기 쉬운 코드가 좋은 코드가 될 확률이 높다.

객체지향이나, MVC 패턴이나, (나중에 다뤄볼) SOLID 원칙 등이 결국은 다 코드를 바꾸기 쉽고, 읽기 쉽게 만들기 위한 노하우일 뿐이다.


가로 관심사, 세로 관심사

다음과 같이 ToyProject의 Layer을 구성해 보았다.
이것은 세로 관심사를 사용한 것이다.

가로 관심사로 나누었다면 폴더에
ㄴuser
ㄴpost
ㄴcomment
등이 있었을 것이다.

그렇다면 가로 관심사 세로 관심사에 따른 장단점이 무엇이고 어떤 점을 고려해야할까 ?

가로 관심사

문제

  • user, post 둘 다 이용해서 서비스를 구현할 때 layer를 어디에 넣어야 하는지 애매할 수 있다.

장점

  • 특정 서비스만 따로 운영할 수 있어 편리하다.

세로 관심사

문제

  • user 서비스끼리만 분리해서 운영하고 싶은 경우 의존성 관리가 어려울 수 있다.

장점

  • 기능별로 Layer가 나눠져 있어서 유지 보수시 확장에 용이하다.

Q. 세로 관심사를 선택한 이유

  • 확장성이 좋다.
  • 기능별로 Layer가 나누어져 있어서 각 Layer를 역할에 따라 관리 하기 쉽다고 판단했다.

Q. 가로 관심사 추후 확장 대응 방안

  • 의존적인 코드들을 따로 관리할 수 있는 Layer를 만들어 따로 관리한다.
  • 인프라 단에서 Layer를 미리 나눠두어서 어떤 Layer에 들어가도 영향을 받지 않도록 한다.

Tip

인프라단 서버 내에서 이미 Layer를 나눠줬다면 code Layer 단에서는 보다 자유롭게 이용이 가능하다

0개의 댓글