본문 바로가기

WEB/Spring

Spring MVC 패턴 [TIL]

이번에 MVC패턴 세미나를 준비하면서 진짜 머리가 터지는줄 알았다. MVC패턴에 대해서 얼추 알고는 있었지만 정확하게 정의를 내려본적은 없었는데, 남에게 알려주기위해서는 제대로 된 정의를 알고 말씀을 드려야하니까... 어떤부분에서 헷갈려했고, 결국 내가 내린 결론이 무엇인지 적어놓으려고한다!


1. 처음에 알고있던 개념

  • MVC 패턴은 Model, View, Controller로 역할을 나누어서 코드를 구성하는 일종의 어플리케이션 패턴
  • Model은 실제 로직이 돌아가는 부분을 뜻한다. 전반적인 데이터 처리 로직이 있는 부분. spring의 service가 이 model로 치환이 된다고 생각함
  • View는 화면을 구성하는 부분. 처리된 작업을 화면에 띄우는 역할을 한다.
  • Controller는 이런 Model과 View를 연결해주는 연결다리이다. 딱 그 spring으로 개발할때 내가 만드는 controller 클래스 그게 곧 MVC패턴에서 이야기하는 controller의 전부라고 생각했음

2. 내가 혼돈이 왔던 부분

  • 그냥 기본 Model, View, Controller로만 단순하게 구성된 MVC패턴 그래프의 경우 그런식으로 대강 이해가 됐는데,
  • spring mvc 실제구조를 보니까 자꾸 model에 데이터를 담아서보낸다고하고, 실제 로직은 service와 repository에서 한다는식으로 적혀있었다. 근데 분명 아까 model이 곧 service라고 이야기하는 글을 봤었다.
  • 분명 model에서 실제 로직들도 돌아간다고 적힌 블로그글들을 수십개 봤는데, model은 그냥 데이터를 담는 틀처럼 설명하는 블로그도 간간히 보이는것...!!!
  • 심지어 spring mvc는 model이 service, dao, dto로 세분화됐다고 얘기하는 블로그들도 보였다.

 

  • 뭐가 맞는건지 너무 헷갈렸고, 그래서 처음에는 기본 MVC모델은 저렇고, spring MVC만 독특하게 model을 저런식으로 부르나 싶었다.
  • 물론 이 mvc 패턴의 중요한 점은 view와 같은 프론트단부분과 실제 로직을 구분했다는데에 의의가 있다고는 들었지만, 도대체 model이 무엇인지...너무 궁금했다.

3. 내가 정의내린 뜻

  • 블로그마다 의견이 이렇게 분분한건 또 처음봤었다.
  • 아무래도 블로그 게시자들중에는 이제 막 배우는 사람들이 공부차로 적어놓은글들도 많을텐데, 그거를 구분해내기는 어렵다고 생각이 들었다.
  • 그래서 김영한님의 spring 수업에서 mvc를 언급하는 부분을 찾아서 몇번씩 돌려봤다.
  • 근데 거기서 웹MVC(spring mvc말고 흔히 MVC하면 보여주는 model, view, controller로만 구성된 그 패턴 그래프)에서 controller가 비즈니스 로직을 실행하고 그 결과를 model에 담아 view에 전달하는 구조라고 설명하셨다.
  • 유레카!!!!! 아무래도 배민에서 일하시는 이분의 말씀이 맞겠지 싶었다. 

결론적으로, 

  1. Model - 데이터를 다루고, 담는 역할. Controller가 비즈니스 로직을 수행하고난 결과를 model에 담아 view에게 전달한다.
  2. View - 웹서비스의 레이아웃을 구현하는 역할. Controller부터 전달받은 model 속 데이터를 통해 화면을 구성.
  3. Controller - 뷰와 실제 비즈니스 로직을 이어주는 중간다리. model을 이용하여 둘 사이 정보를 교환해준다. 

이런식으로 정의를 내리게 되었다!!

 


 

*추가적으로 MVC패턴은 model1과 model2 버전이 있는데, model1같은 경우에는 view와 controller가 하나로 뭉뜽그려졌었다. 그래서 되게 난잡했는데, model2에서 view와 controller를 구분하면서 view는 딱 화면구성에만 집중하게되었다고한다. 여튼 요즘 얘기하는 mvc패턴은 모두 이 버전2라는거!

'WEB > Spring' 카테고리의 다른 글

스프링 핵심 원리 TIL - 객체지향과 SOLID  (0) 2022.04.09