TIL | Project Architecture - MVC Pattern

Wook·2021년 12월 24일
0

TIL | Backend

목록 보기
15/19

📲 모듈화가 필요한 이유


모듈화 : 역할에 따라 코드를 분리하는 행위

한 파일에 모든 코드를 다 넣어도 노드 서버는 문제 없이 동작합니다. 간단한 규모의 어플리케이션이라면 굳이 모듈화가 필요 없지만, 우리는 실제 서비스에서 사용할 수 있는 어플리케이션을 구현하는 것이 목표 입니다. 즉, 혼자서 개발하는 것은 극히 드뭅니다.

결국, 좋은 코드(협업 가능한 코드)를 작성하는 것이 좋은 개발자의 역할 입니다. 그렇다면 좋은 코드, 협업 가능한 코드는 무엇 일까요?

시대에 따라 좋은 코드를 나누는 기준이 달라졌습니다.

크게 다섯가지의 카테고리로 분류할 수 있습니다.

출처: 깔끔한 파이썬 탄탄한 백엔드 - 송은우 저

  • 확장성(extensibility)

    확장성을 고려하지 않은 코드는 시스템의 규모가 커질수록 문제가 생길 확률이 높다.

  • 재사용성(reusability)

    반복되는 로직을 함수로 분리하는 코드상의 재사용성 뿐만 아니라, 우리가 설계한 구조가 재사용 되어야 한다.

  • 유지-보수 가능성(maintability)

    여러 로직이 뒤엉켜 있는 코드는 유지 보수가 안된다.

  • 가독성(readability)

    어려운 로직 일수록 더 가독성이 높아야 한다. 어려운 로직을 쉽고 간단하게 구현하는 것이 좋은 코드다.
    프로젝트의 구조 또한 한 눈에 그려져야 한다.

  • 테스트 가능성(testability)

    테스트를 하기 쉬운 코드는 모듈화가 잘 되어 있고, 한 가지 역할만 하는 함수 단위의 코드를 의미한다.
    프로젝트의 구조도 추상화가 잘 되어있고, 역할이 잘 나뉘어 있는 구조가 테스트하기 쉬운 구조다.


MVC Pattern

코드의 구조에 대한 대표적인 설계 방법이 아래 다이아그램에서 볼 수 있는 MVC 패턴 입니다.
각각의 레이어는 Model, View, Controller 를 의미합니다.


View

SPA(Single Page Application)Mobile App 의 빠른 성장으로 FrontEnd 개발자의 역할이 커지면서 서비스를 위한 소프트웨어는 FrontEnd 와 BackEnd 로 나뉘게 되었습니다.
본래 MVC는 서버 사이드에서 한번에 다뤄지던 구조 입니다. 예시로, Django 의 템플릿 기능이나 Express 에도 ejs 를 사용하면 View 를 구현할 수 있습니다.

View는 쉽게 말해서 클라이언트(유저)와 상호작용이 일어나는 것을 의미 합니다. 즉, 화면에 보여주기 위한 역할을 하는 것입니다.
User Interface(유저 인터페이스)가 바로 View 레이어에 있는 코드로 핸들링 됩니다. React, Angular, Vue 같은 라이브러리 또는 프레임워크로 개발하는 앱을 생각하시면 됩니다. 모바일 iOS, 안드로이드 앱도 View 를 담당한다고 할 수 있습니다.
(프론트엔드와 백엔드를 모두 포함하는 하나의 서비스 관점에서 보았을 때)

MVC 패턴은 FrontEnd 에서 프로젝트를 관리 할 때에도 사용될 수 있는 레이어링 패턴 입니다.


Controller

View 레이어에서 유저의 동작이 닿는 곳은 대부분 데이터의 변화가 필요합니다. 예를 들어서 내가 담은 장바구니를 보고싶을 때 장바구니 버튼을 클릭하게 되고, 이 때 HTTP 요청이 백엔드 서버로 보내집니다. 이 요청을 받아서 처리하는 곳이 컨트롤러 입니다. View(유저 인터페이스 레이어)Model(데이터를 담당하는 레이어)을 잇는 다리 역할을 하는 부분입니다. 유저의 요청을 처리해서 응답하는 부분이라고 할 수 있죠. Controller 는 Model 과 소통하게 됩니다.


Model

서비스에 필요한 모든 데이터는 모델에서 정의됩니다. 오로지 Model 레이어에 정의된 데이터베이스 schema(모델 또는 테이블)를 통해서만 데이터베이스에 접근해서 CRUD 로직을 처리할 수 있습니다.
Prisma 를 사용해서 데이터베이스 모델을 정의하고 데이터베이스와 소통을 하는 것이죠. 현재필자의 프로젝트 상황에선 Prisma(schema 와 client API 코드를 아우르는 의미에서)가 Model 레이어를 담당한다고 할 수 있습니다. (현재 필자가 배우고 있는 프로젝트 단계에서)


MVC Pattern의 장점

  • 염려의 분리 (Seperation of Concerns)
    유저 인터페이스와 관련된 부분은 모두 View 에 의해서 관리되고,
    모든 데이터와 관련된 로직은 Model 에 의해서 관리되며
    오로지 Controller 에 의해서 Model 에 접근할 수 있게 됩니다.
    즉, 각각의 레이어가 하는 역할이 명확 합니다.
  • 동시적인 개발 (Simultaneous Development)
    세개의 레이어로 역할이 나뉘어져 있기 때문에 동시다발적인 개발이 가능합니다. 역할분담에 용이하며 협업이 가능한 프로젝트를 구성할 수 있습니다.

  • 수정의 용이함 (Ease of Modification)
    다른 레이어에 영향을 주지 않고 문제가 있는 로직을 찾아서 문제를 해결할 수 있습니다.

  • 테스트-주도 개발(Test Driven Development)
    각각의 레이어, 그리고 그 레이어 속에 속한 각각의 모듈을 테스트 하기 좋습니다.


profile
지속적으로 성장하고 발전하는 진취적인 태도를 가진 개발자의 삶을 추구합니다.

0개의 댓글