PMDEXIT 프로젝트 용어사전

MVC 패턴

Model-View-Controller · MVC

모델·뷰·컨트롤러로 관심사를 분리하는 대표 아키텍처 패턴.

MVC 패턴이란 무엇인가

MVC(Model-View-Controller)는 애플리케이션을 모델·뷰·컨트롤러라는 세 가지 책임 영역으로 분리하는 대표적인 아키텍처 패턴이다. 데이터와 업무 규칙을 다루는 모델, 화면 표현을 담당하는 뷰, 둘 사이의 흐름을 조율하는 컨트롤러로 역할을 갈라 둠으로써 한 덩어리였던 코드의 관심사를 정돈한다.

이렇게 책임을 나누면 화면이 바뀌어도 업무 규칙은 영향을 받지 않고, 규칙이 바뀌어도 화면을 통째로 다시 손대지 않아도 된다. 관심사 분리는 곧 변경의 파급 범위를 줄이는 일이며, 유지보수성과 확장성의 토대가 된다.

데이터·상태업무 로직화면 표현상태 출력입력 처리흐름 조율MVC모델컨트롤러
세 구성요소의 책임 분리

세 구성요소의 역할

모델은 데이터 구조와 상태, 그리고 그 데이터를 다루는 핵심 업무 로직을 담는다. 뷰는 모델의 상태를 사용자에게 보여 주는 표현 계층으로, 같은 데이터를 여러 형태의 화면으로 나타낼 수 있다.

컨트롤러는 사용자의 입력을 받아 어떤 모델을 호출하고 어떤 뷰로 응답할지 결정하는 중재자 역할을 한다. 세 요소는 직접 뒤섞이지 않고 정해진 통로로만 상호작용하므로, 각 부분을 독립적으로 이해하고 교체할 수 있다.

분리가 주는 실무적 이점

MVC의 가장 큰 가치는 변경의 국소화에 있다. UI 디자인을 개편할 때 뷰만 손대면 되고, 정산 규칙이 바뀌면 모델만 수정하면 되므로 작업 분담이 명확해진다.

화면 담당과 로직 담당이 같은 파일을 두고 충돌할 일이 줄어 협업 효율도 올라간다. 또한 모델을 뷰에서 떼어 두면 화면 없이도 업무 로직을 단위 테스트할 수 있어, 품질 검증의 자동화가 수월해진다.

분리는 단순한 정리정돈이 아니라 변경 비용과 검증 비용을 동시에 낮추는 설계 전략이다.

구분핵심주의점
파생 패턴MVP·MVVM중재자 위치 차이
흔한 오해비대한 컨트롤러로직은 모델에
계층 관계계층형과 공존경계 혼동 주의
도입 기준변경 주기 분리소규모엔 과설계
파생 패턴과 도입 점검

계층형 아키텍처와의 관계

MVC는 흔히 계층형 아키텍처나 다른 디자인 패턴과 함께 거론되지만 그 층위가 다르다. 계층형 아키텍처가 시스템을 표현·업무·데이터 계층으로 가로로 쌓는 구조라면, MVC는 주로 표현 영역의 책임을 세 갈래로 나누는 패턴에 가깝다.

두 개념은 충돌하지 않으며 실제 프로젝트에서는 계층형 구조 안에 MVC가 자리 잡는 형태로 공존한다. 패턴의 적용 범위를 혼동하면 모델이 데이터 접근까지 떠안아 비대해지는 문제가 생기므로, 어느 층에 무엇을 둘지 경계를 분명히 잡는 것이 중요하다.

파생 패턴과 오해

MVC의 원리는 시간이 지나며 MVP, MVVM 같은 파생 패턴으로 발전했다. 모두 화면과 로직을 떼어 놓는다는 본질은 같지만, 중재자의 위치와 데이터 갱신 방식에서 차이를 둔다.

현장에서 흔한 오해는 컨트롤러에 업무 로직을 몰아넣어, 이른바 비대한 컨트롤러가 만들어지는 것이다. 이렇게 되면 분리의 이점이 사라지고 테스트와 재사용이 어려워진다.

컨트롤러는 흐름을 조율하는 얇은 역할에 머물고, 핵심 규칙은 모델에 두는 원칙을 지켜야 패턴이 의도대로 작동한다.

도입 시 점검 사항

MVC는 만능 해법이 아니라 책임 분리가 가치를 발휘하는 규모에서 빛난다. 화면이 단순하고 규칙이 거의 없는 소규모 기능까지 무리하게 세 갈래로 쪼개면 오히려 구조만 복잡해진다.

도입 여부를 판단할 때는 화면 변경과 로직 변경이 얼마나 자주, 서로 다른 주기로 일어나는지를 살펴야 한다. 변경 주기가 다른 영역일수록 분리의 효과가 크기 때문이다.

또한 팀이 각 요소의 경계 규칙을 공유하지 못하면 분리는 형식만 남고 실효는 사라지므로, 컨벤션 합의가 패턴 도입의 전제가 된다.

관련 용어