본문 바로가기

기술들/Today I Learned

MVC 패턴

프로젝트 하루 전, 조금 쉴까도 생각해봤지만 그래도 조금이라도 더 공부하는 것이 프로젝트할 때 도움이 될 것 같아서, 서버 개발할 때 많이 사용하는 MVC 패턴에 대해 정리할까 한다. 

 

MVC패턴이란?

Model-View-Controller로 가독성면이나 유지보수면에서 수월하도록 기능을 나눈 디자인 패턴을 의미한다. 한 파일안에 모든 기능을 쓰면, 잘 정리했다고 하더라도 가독성이 좋지 않고, 유지보수하기가 쉽지 않다. 한 파일에 유저의 요청을 받고 그 요청을 DB와 상호작용해서 응답까지 하는 코드가 모두 들어가 있다면, 그 코드를 직접 작성한 당사자야 알아볼 수 있겠지만 제 3자가 보는 경우 바로 GG를 치지 않을까.. 난 그럴것이다.

 

MVC 패턴을 사용함으로써 하나의 코드베이스에서 모든 기능을 구현하는 것보다, 일종의 정돈되고 의도된 코드를 기능별로 나눠서 작성하면, 코드 가독성이나 코드 관리, 퀄리티등 모든 면에서 좋아질 것이다. 내가 생각하기에 이 MVC패턴은 Node.js가 제공하는 모듈화 기능을 좀 더 의도적으로 잘 활용한 것이라고 생각한다. 

 

각각의 역할

View : 유저가 보는 화면을 보여주는 역할을 한다.  User가 발생시킨 이벤트나 액션을 controller에게 전달/요청하고, 그에 대한 응답을 받아서 다시 화면에 표시한다. Model 또는 DB와 직접적으로 연결되는 일은 거의 없다고 보면 된다. 

 

Controller : View와 Model 사이에 다리 역할을 한다. View에게서 어떤 요청을 받으면 Controller는 그 요청을 자체적으로 처리할 수 있으면 직접 처리하고 바로 View에게 그에 맞는 데이터를 응답 보낼 수 있다. 직접 처리를 못한다면 Model에게 그 요청을 넘기고 Model이 처리 후 데이터를 리턴하면, 그것을 받은 Controller는  View가 알아들을 수 있게 가공해서 View에게 응답한다.

 

Model : Model은 Controller에게서 전달받은 요청에 해당하는 데이터를 Controller에게 전달하는 역할을 한다. 만약 Model이 직접 데이터를 관리하는 역할을 한다면, 자체적으로 데이터를 응답하겠지만 그렇지 않다면 DB와 통신하여, DB로부터 데이터를 받는다.  

 

내가 생각하는 Flow

위를 바탕으로 MVC 패턴의 flow를 정리해보자면, 

브라우저, 즉 유저가 요청을 보내면 Router에서 분기 처리를 통해 각 요청에 해당하는 Controller로 요청을 분배하고, 각 요청을 처리하는 Controller는 DB에서 꺼내올 데이터가 있으면 DB와 상호작용을 하는 Model파일에 요청 데이터를 넘긴다. Model파일에서는 ORM이나 Low query를 통해 DB에서 데이터를 꺼내와서 Controller에 넘기고, 데이터를 받는 Controller는 View 또는 Browser에 응답한다. 여기서 View 또는 Browser로 응답을 보낸다고 했는데 이 부분이 아직 이해가 안가는 부분이다. browser와 View가 왜 따로 나눠져 있는지, 저 둘의 차이점이 무엇인지 너무 궁금하다. 지금 계속 자료를 찾아보고 있는데, 명확하게 나온 부분이 없다. 

 

 

위처럼 정리는 해봤지만, 실제 개발할 때 어떤 부분이 Model역할을 하는지, View역할을 하는지 명확하지 않다. 자료를 찾아봐도 이에 대한 명확한 예시는 구글링으로 아직 못 찾았다. 내가 생각하기에 각 기능에 맞게 명확하게 스택들이 정해져 있다기 보다 유연하게 정해질 수 있는 것이기 때문에, 예시에 대한 자료가 잘 없는건가 싶다. 

 

 

 

'기술들 > Today I Learned' 카테고리의 다른 글

Session  (0) 2020.12.16
Cookie  (0) 2020.12.07
Node.js architecture 정리  (0) 2020.12.01
CORS 정책 정리  (0) 2020.11.23
HTTP Header 정리 (HTTP/1.1 기준)  (0) 2020.11.22