Java & Spring Boot

실전, MVC 패턴!

둘기덕 2022. 10. 1. 19:50
반응형

Spring Boot를 사용하면 대부분 사람들이 가장 먼저 배우는 MVC 패턴! 가장 기초적인 패턴이라 인터뷰 질문에 많이 나오기도 합니다. 오늘은 그 MVC 패턴에 대해서 알아보도록 하겠습니다.

MVC 패턴의 구조

https://dlsdn73.tistory.com/591

동작 방식은 간단합니다. 쉽게 설명하기 위해 학생이 과제 게시판을 보고 싶다고 가정하겠습니다.

 

1. 학생이 컨트롤러에게 과제 게시판 조회를 요청한다.

2. 컨트롤러모델에게 과제 게시판 데이터들을 달라고 요청한다.

3. 모델은 가져온 데이터들을 컨트롤러에게 전달해 준다.

4. 컨트롤러는 가져온 데이터들로 를 만들어서 사용자에게 UI로 전달해준다. 

 

여기서 나오는 컨트롤러, 모델, 가 바로 MVC의 Model, View, Controller 입니다. 예시에서 파악할 수 있다시피, 모델은 데이터와 관련된 일을 하는 곳입니다. 컨트롤러는 모델과 뷰의 중계자 역할을 하고, 는 사용자에게 보여지는 부분을 담당하는 곳입니다. 

 

사실 이 이론은 MVC 패턴을 한번이라도 공부, 혹은 인터뷰 준비를 위해 훑어만 봤어도 이해를 하기에는 쉽습니다. 그러나 가장 어려운 것은 바로 실전...! 이론 상으로는 완벽하게 알고 있다고 하더라도 실무에서는 의외로 MVC의 원칙을 잘 지키지 못하는 경우가 허다합니다. 

 

이번에는 실전에서 MVC 패턴을 어떻게 하면 잘 지킬 수 있을지에 대해 알아보겠습니다.

실전의 MVC 

1. Model은 Controller와 View에 의존하지 않아야 한다.

Model 내부에는 Controller와 View에 관련된 코드가 있으면 안됩니다. 컨트롤러나 뷰에서 사용하는 메서드나 변수들을 import해서 사용하면 안된다는 소리입니다. 되도록이면 모델은 컨트롤러, 뷰와 분리되어서 깔끔하게 유지시켜야 합니다.

2. View는 Model에만 의존해야 하고, Controller 에는 의존하면 안 된다.

뷰에는 모델에 관련된 코드는 있어도 무관하지만, 컨트롤러에 관련된 코드는 있으면 안됩니다. 예를 들어 Student라는 모델을 뷰에서 get함수로 출력하는 student.getName(), student.getAge() 같은 코드들은 있어도 무관합니다.

3. Controller는 Model과 View에 의존해도 된다. 

사실 첫 번째, 두 번재, 세 번째 원칙은 비슷한 면이 있습니다. 간단하게 요약하자면 컨트롤러가 가장 약체고(...), 중간이 뷰, 가장 최강이 모델이라고 생각하면 될 듯 합니다. 최강은 누구에게도 의존을 하면 안되니까요(?)

4. View가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보여주어야 하는 데이터에 한정된다. 

 

쉽게 풀어쓰자면, 사용자마다 동일한 데이터는 굳이 Model로부터 받을 필요가 없다는 뜻입니다.

예를 들어서 어떤 대학교 이름이 "기덕대학교" 라고 가정을 해봅시다. 그렇다면 해당 학교의 모든 게시판의 학교 이름은 "기덕대학교"로 static하게 통일이 될 수 있습니다. 굳이 student.getUniversityName() 하지 않아도 됩니다. 

 

오늘은 MVC 패턴에 대해서 짧게 알아보았습니다. 이렇게 비교적 실전의 이론을 알아도, 막상 본격적으로 적용하기가 쉽지만은 않습니다. 그러나 계속 다듬으면서 나아가다 보면 MVC 패턴을 더 좋게 활용할 수 있을 듯 싶습니다. 

반응형