개발새발

MVC 패턴 본문

우아한테크코스

MVC 패턴

무비인 2022. 2. 20. 19:10

프로젝트 패키지 구조 어떻게 설계 해야 할까?

프로젝트를 시작하면 제일 처음 드는 고민이 패키지를 어떻게 가져가야 하는가? 인 것 같다.

현재까지 패키지 구조의 장 단점을 명확하게 느낄 수 있는 계기가 없어 나만의 명확한 분류 기준은 없지만,

여러가지 패키지 구조를 직접 설계해보며 조금이나마 기준을 세워보고자 한다.

계층형 아키텍쳐

이번 프로젝트에서 사용했던 구조는 계층형이었다.

UI/ 비지니스 모델을 분리하라는 조건에 맞추기 위해서 관심사 별로 레이어를 나눠서 구현하는 것이 좋겠다고 판단했다.

웹 계층에서 대표적인 계층형 아키텍처는 MVC 이기 때문에 MVC 패턴을 적용시켰다.

MVC 패턴을 사용하면 Model과 View가 다른 컴포넌트들에 종속되지 않아 변경에 유리하다는 장점을 가질 수 있다.


MVC패턴이란?

어플리케이션을 세 가지 역할로 구분한 개발 방법론이다.

이 방법론을 사용하게 된다면, 각 컴포넌트간 의존성을 낮춰 재사용성을 높일 수 있다.

간단한 방법은 아래와 같다.

  • View 로 사용자에게 입력을 받고 Controller 에게 보내면,
  • 관련 Model 로직을 수행하고 Controller 에게 반환,
  • Controller 는 결과를 View 로 보내 출력한다.

더 자세한 내용을 살펴보자.

Model

  • 데이터로 무엇을 할 것인지 정의한다.
  • 실질적인 비지니스 로직이다.
  • Model은 다른 컴포넌트들에 대해 알지 못한다.
  • 자기 자신이 무엇을 수행하는지만 알고 있다.

View

  • 사용자에게 입, 출력을 담당한다.
  • Model 이 처리한 데이터를 가공하여 출력시킨다.
  • 사용자로부터 데이터를 받아온다.
  • 자기 자신이 무엇을 수행하는지만 알고 있다.

Controller

  • Model과 View 사이에 있는 컴포넌트이다.
  • 클라이언트의 요청을 받으면 해당 요청에 대한 실제 업무를 수행하는 Model을 호출한다.
  • Model이 업무 수행을 완료하면 그 결과를 가지고 화면을 생성하도록 View에 전달한다.

주의사항

이론만 보면 정확하게 지킬 수 있을 것 같지만, 실제로 구현하다보면

여기 저기 의존 관계를 맺게 된다. ㅠㅠㅠㅠ 그래서 아래와 같은 사항을 잘 지키고 있나?

고민하면서 구현하면 도움이 될 것 같아 정리했다.

  • Model은 독립적이어야 한다. Controller 와 View 에 의존적이면 안된다.
  • View에는 Model 관련된 코드만 있어야 한다.( 모든 사용자에게 일관되게 보여저야하는 부분은 view 에서, 다르게 보여져야하는 부분은 Model 에서 받아온다.)
  • Controller 는 Model과 View에 내용을 알고 있다.
  • View 가 데이터를 받을 때는 Controller 를 통해서 받는다.

느낀점

MVC 패턴을 사용하는 이유와 각 레이어의 책임을 명확하게 이해하고 구현을 진행하니, 

의존관계를 최소화하여 응집도를 높일 수 있었다. 

기존에 작성했던 코드에 꼬여있던 의존 관계를 찾아서 풀 수 있었고, 

조금이라도 재사용이 가능한 코드를 작성할 수 있게 된 것 같다. 

번외로 관련 자료를 찾아보니, 테코톡과, 테코블에 관련 자료가 많이 있었다. 

역시 우테코 ... 나도 나만의 명확한 분류 기준을 세울 수 있으면 너무 좋겠다 👍🏻

참고