MVC(Model View Controller) ?

Prologue

학부 시절부터 MVC, MVC 수도 없이 들어왔지만, 똑 부러지게 이해하기 쉽게 설명해주는 사람은 많지 않았다. 그저 “모델 뷰 컨트롤러… 그거야..” 라고 답변이 있을 뿐이어서 프로그래밍 공부를 하는 필자도 와닿지 않는 개념이었다. MVC가 무엇인지, 내 경험과 인터넷 끄적끄적 구글링을 통해 얻은 결론을 한 번 정리해보고자 한다.

CodeIgniter의 MVC구조

php 프레임워크 CodeIgniter 를 예시로 들어보겠다. 위 그림은 코드이그나이터의 MVC 구조이다. 모델, 뷰, 컨트롤러 외에도 여러가지가 있지만 일단 세 가지의 구조라도 잘 이해하고 넘어가자. 그것만 알아도 나머지는 부수적인 것에 지나지 않으니까 말이다. 어디까지나 내가 이해한 방식이니 혹여 다른 생각을 가지고 있는 다른 누리꾼이 코멘트를 남겨주신다면, 이 또한 재밌는 토론이 될 것 같다. :)

모델(Model) : 뒤에서 묵묵히 데이터를 처리한다.

모델은 실제로 우리가 눈으로 보기 힘든 요소이다. 아니, 안보인다고 해도 무방하겠다. 주로 데이터베이스에 접근하여 데이터를 읽고(R), 쓰고(C), 수정하고(U), 삭제하는(D) 역할이다. 다른 로직을 쓰는 것은 모델에게 사치다. 사용자가 브라우저를 통해 데이터와 관련된 어떤 동작(주로 클릭)을 하면 컨트롤러를 통해 모델이 호출되고, 모델은 그저 데이터를 처리하고 컨트롤러로 전달해주는 역할을 수행한다. 사용자는 모델이 실제로 무엇을 하는지 정확히 알 수 없다. 이러한 MVC구조를 모른다면 ‘눌렀으니까 그냥 나오는거군!’ 하고 느낄 수 있지만, 모델 입장에서 섭섭하겠지만 어쩌나… 보이지 않는 것을… 하지만 제 역할을 해야만 어플리케이션이 정상적으로 작동할 것이다.

뷰(View) : 가상의 결과를 현실화하다. 사용자의 눈을 즐겁게 하라.

주로 백엔드 개발을 하는 나에게 를 만드는 프론트엔드 개발자는 해리 포터 못지 않은 마법사다. 화면을 구성하는 언어로 실제로 구현해야 할 것을 뾰로롱~ 하고 만들어내는 듯한 뷰 역시 MVC의 핵심 멤버이다. 모델과 컨트롤러가 제 역할을 수행하고 응답을 뷰에 넘겨주었다면, 뷰는 예쁘게 그리는 것이 관건이다. 사용자는 대부분 어플리케이션(웹, 모바일)에서의 만족도를 뷰에서 느끼기 때문에, 사용자 경험(UX)에 관한 부분을 특히 신경써야 한다. 학부 시절 김교수님은 뷰를 굉장히 중요하게 여기셨다. 눈이 즐거운 어플리케이션은 기능이 조금 부족할 지라도, 사용자로 하여금 만족감을 느끼게 만들 수 있다는 것이다. 과거에는 기능만 잘 돌아가면 된다! 라는 것이 주였지만, 지금은 보여지는 것 또한 기능과 거의 동등하게 여겨질 정도로 뷰도 잘 만들어져야 한다.

컨트롤러(Controller) : 어플리케이션의 핵심, 요청과 응답의 중심지

축구로 치면 중원 미드필더라고 보면 되겠다. 치열한 공싸움이 일어나는 필드처럼 웹서버에서 수많은 요청과 응답을 주고 받는다. 모델과 뷰의 중간다리 역할을 하며 어플리케이션이 잘 작동되도록 요청과 응답을 받고 던지고… 제일 바쁜놈이라고 볼 수 있다. 코드이그나이터에서는 헬퍼, 라이브러리 등의 부가적인 요소들이 있어서 컨트롤러는 더욱 바빠진다. 부가 요소를 호출하고, 모델에게는 ‘데이터 처리 좀 부탁해!’ 라고 요청하며, 모델이 제 역할을 했다면 그 결과를 뷰에게 ‘자 여기 응답 결과야!’ 라며 전달한다. 가장 바쁜 시간에는 연예인 못지 않은 스케쥴이다.

결국 중요한 것은

MVC에서 가장 중요한 요소? 그건 말할 수 없다. 세 가지 요소가 적절히 조화를 이루어야 좋은 어플리케이션이 될 수 있다. 어떻게 보면 개발자들에게 MVC는 부담되겠지만, 잘만 만든다면 제일 인정받는 사람이 될 수도 있다. MVC를 적용한 프레임워크는 현재 개발자들이 주로 사용한다. 우리나라에서는 특히 자바 기반의 스프링(Spring)이 가장 인기 있는 프레임워크일 정도이니…(사실 개발자들이 좋아하는진 모르겠다..)
필자의 글을 읽고 조금이나마 MVC에 대한 개념이 아리송 하거나 몰랐던 분들에게 도움이 되었으면 좋겠다. :)