(구) 자료/면접을 위하여

[2] MVC 패턴이란?

뜐뜐뜐 2017. 12. 8. 17:09

* 저의 면접을 대비해서 여러 사이트를 참고하여 제가 이해하기 쉽게 정리한 것입니다.

* 혹시라도 문제가 된다면 비공개조치 하겠습니다.

* 레퍼런스는 항상 표기 하겠습니다.




1. MVC 패턴이 무엇입니까?

- MVC는 Model View Controller의 약자로, 어플리케이션을 세 가지 역할로 구분하여 개발하는 방법론입니다!


2. 어떻게 동작하는데요?

<출처 : 생활코딩>



1) User가 Controller를 조작합니다.

2) Controller는 Model을 Manipulate(조종)하여 데이터를 갖고옵니다.

3) 가져온 데이터를 바탕으로, View를 갱신합니다.

4) 갱신된 View를 사용자가 볼 수 있게 됩니다.

+ 사실, Controller가 View 또한 Manipulate 한다고 하네요!


3. 음... 조금더 자세하게 알려주면 안될까요?

M, V, C를 나눠서 설명해볼게요!

<출처 : [큰돌]님 블로그>



     1) Model

- Controller가 호출할 때(Controller에 의해 Manipulated될 때), 요청에 맞는 역할을 수행하는 역할을 담당합니다.


- 응용 프로그램에서, 데이터를 처리하는 기능을 한다고 볼 수 있습니다!


- 어플리케이션의 정보, 데이터를 나타냅니다. 딱 한 줄로 표현!


- 비지니스 로직(Business Logic)을 구현하는 영역이라고 하네요!


- 비지니스 로직이 뭔지 몰라서... 찾아보니까 예시를 들어주시더라구요..? 이해하기 쉽게 정리해보겠습니다.




비즈니스 로직이란?


- 어떤 페이지에 회원 가입을 하려고 합니다.


- 사실 일반인들에게 회원 가입은 프로그래머가 만들어준대로 따라가기만 하면 참 쉽죠!


- 하지만 개발자에게는 고통이라고 하네요...쩝


- 아이디 중복 찾기, 본인 인증, 비밀번호 재검사 등... DB를 이용해서 처리하는 부분인데 꽤 귀찮다고 하네요...


- 여기서, 아이디 중복 찾기를 위한 코딩의 일련 과정들비즈니스 로직(Business Logic)이라고 한답니다!


- 그 예로, 아이디의 중복 찾기의 비즈니스 로직은 다음과 같습니다.(출처 : Mommoo님 블로그)


1) 유저가 작성한 아이디 값 저장


2) 기존의 DB로 연결


3) DB에서 유저가 작성한 아이디 값이 있는지 Select


4) 기존 아이디와 겹치는지 안겹치는지의 여부를 데이터화 하여 저장


5) DB 연결 끊음


6) View영역에게 가공된 데이터 전달


개발자는 이 로직을 잘 구상해야 코드 관리도 쉬워지고, 생산성과 품질들을 향상시킬 수 있다고 합니다!




- Model은 다음과 같은 규칙을 갖고 있다고 합니다.

1) 사용자가 편집하려는 모든 데이터를 갖고 있어야 합니다.


2) View나 Controller에 대해 어떤 정보도 알고 있으면 안됩니다!!!

ㄴ 이게 왜그런가 했는데 조작의 주체인 Controller 외에는 알 필요가 없단 소리인것 같습니다.


3) 변동이 생기면, 변동사항을 통지할 방법을 구현해야 합니다.

ㄴ 변경된 사항을 누군가에게 꼭 알려줘야 반응을 하죠!

ㄴ 기존 데이터가 변했으면, 조작의 주체인 Controller는 알고 있어야겠죠??

ㄴ 이걸 구현해야 한다는 의미입니다.


2) View

- Controller가 받은 Model의 결과 값을 갖고 사용자에게 출력할 화면을 만드는 일을 합니다.


- 보통 UI(User Interface)의 요소라고도 합니다. 입, 출력을 담당한다고 생각하면 돼요!


- View도 규칙이 있습니다.


1) Model, Controller가 갖고 있는 정보는 알 필요가 없죠~? (그냥 Controller가 하라는 대로만 움직이면 됩니다)


2) 마찬가지로, 변경사항을 통지할 방법을 구현해놓아야 합니다. 이 하 생 략!


3) Controller

- Data(Model)와 사용자 인터페이스(UI, View)를 잇는 다리역할을 합니다.


- 즉, 사용자가 데이터를 수정하거나, 데이터를 클릭하는 등의 Event가 발생하면, 이 Event를 처리하는 역할을 하는 것이죠.


- 특징이 있는데 이번에는 좀 다릅니다.


1) Model이나 View에 대해서 알고 있어야 합니다.

ㄴ 둘다 Controller가 제어해야 하기 때문에 당연한 사실이죠!


2) Model과 View의 변경 사항을 모니터링 해야합니다.

ㄴ 아까 위에서 Model과 View는 자신의 변동 사항을 통보할 방법을 구현해야 한다고 했죠?

ㄴ 변경사항을 Controller가 알아야 대처할 수 있기 때문이죠!



이 설명은 [snippet]님 블로그를 참고하여 정리하여, 사족을 조금 붙였습니다 ㅎㅎ




4. 아~ 어떻게 동작하는지 대충 알겠어요! 근데 이거 왜 쓰는데요??

- 항상 프로젝트를 해보시면 아시겠지만, 분업화가 정말로 중요합니다.


- 물론 분업화를 하면 일의 효율이 늘겠지만, 전체의 흐름을 잡아주는 사람이 없으면 배가 산으로 가겠죠(끔찍)


- 또, 전체 흐름이 안잡히면 서로의 영역을 침범하게 되어, 프로젝트가 개판이됩니다. (그럼 망하는거죠!)


- 위에 뭐라고 했죠? 프로젝트를 총괄하는 총괄자(Controller)가 있어야 한다고 했구요


- 일의 분업화(Model데이터를 처리하는데, 이를 처리하는 비즈니스 로직을 구현, ViewController가 시키는대로 Model의 입, 출력을 담당)


- 이 모든 것이 순조롭게 흘러간다면


1) 총괄해주는 누군가가 진행 사항을 다 알고 있으니까 서로 했던 일을 또 하는 삽질을 덜 하게되어 일의 효율이 증가!


2) 그렇게 일의 효율이 증가하면, 애플리케이션의 확장성과 유연성이 증가(시간적, 금전적인 비용을 최소화 할 수 있다는 의미)


  이러한 장점들을 갖고 있기 때문에 MVC를 쓴다고 합니다 ㅎㅎ


5. Overview

<출처 : [_Jbee]님 블로그>


제가 아직 웹이나 DB쪽을 아예 몰라서 개념적으로만 확인하고, 코드적인 부분은 이후에 배우고나서 다시 포스팅 하겠습니다.

(코드가 이해가 안돼요ㅠ)