MVC패턴이란, Spring MVC란, Spring MVC 장점, Spring MVC
MVC 패턴이란
MVC 패턴이란 Model(모델), View(뷰), Controller(컨트롤러)의 앞글자를 따서 이름지어진 디자인 패턴입니다.
각 컴포넌트는 아래와 같은 역할을 갖고 있습니다.
모델(Model):
애플리케이션 데이터만을 포함하고, 데이터 조작하는 로직을 포함하지 않습니다.
뷰(View) :
모델(데이터)를 사용자에게 표시합니다.
컨트롤러 (Controller):
뷰와 모델 사이에 컨트롤러가 있습니다.
뷰(또는 다른 외부 소스)에 의해 변경요청된 이벤트들을 감지하고,
이러한 이벤트들에 대한 적절한 로직을 실행합니다.
세 가지 구성요소의 관계를 그림으로 표현하면 다음과 같이 표현할 수 있습니다.
시퀀스 다이어그램으로는 다음과 같이 표현할 수 있습니다.
먼저 조회의 경우를 살펴보겠습니다.
다음으로 데이터 수정(삭제,수정)시에 대한 시퀀스 다이어그램은 아래와 같습니다.
점선으로 표시한 부분은 일반적으로 USER가 데이터 변경되었다는점을 알게 하기 위해 로직을 구현하는게 보통의 case입니다만
Controller에서는 단순히 수정만 하고 끝내게 할 수도 있기 때문입니다.
사용자는 View를 통해서 상호작용 하며, Model 을 수정하거나 조회를 직접적으로 하는것은 Controller의 역할입니다.
MVC 패턴 예제 코드
MVC 패턴을 어떻게 구현하는지 예제 코드를 살펴보겠습니다.
아주 간단한예제를 가져와봤습니다.
실제 프로젝트에서는 많은 Model, Controller, View가 존재하게 될 것이며,
요구사항 변경시 수정에 유연하게 대응할 수 있을것입니다.
// Model 부분
class Person
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
//View 부분
class View
{
public void printDetails(Person person)
{
System.out.println("Name: " + person.name);
}
}
//Controller 부분
class Controller
{
private Person model;
private View view;
public StudentController(Person model, View view)
{
this.model = model;
this.view = view;
}
public void modifyName(String name){
view.setName(name);
}
public void updateView()
{
view.printStudentDetails(model);
}
}
class MVCPattern
{
public static void main(String[] args)
{
Person model = retriveStudentFromDatabase();
View view = new View();
Controller controller = new Controller(model, view);
controller.updateView();
controller.modifyName("test");
controller.updateView();
}
private static Person retriveFromDatabase()
{
Person person = new Person();
person.setName("Scott");
return person;
}
}
실행결과
Name: Scott
Name: test
MVC 패턴의 장점
MVC 패턴을 사용하는 이유와 장점은 아래와 같습니다.
1. 여러 개발자가 역할을 나눠서 모델, 컨트롤러, 뷰를 동시에 개발할 수 있습니다.
예를 들어 Java개발자가 모델과 컨트롤러를 개발하고, UI 개발자가 뷰부분을 담당하여 개발할 수 있습니다.
이를 통해 개발시간 단축과 역할분리가 가능합니다.
2. 중복코드를 없앨 수 있고, 확장성있고 유연한 코딩이 가능합니다.
예를 들어, Java 코드로 로직을 설계한것이 웹으로 배포할 내용과, 앱으로 배포할 내용이 있다면 View 부분만 바꿔서 코딩할 수 있습니다.
3. 각 컴포넌트별로 나눠져 있어 디버깅과 테스트가 용이 합니다.
MVC 패턴의 단점
여느 디자인패턴과 마찬가지로 MVC 패턴의 단점도 존재합니다. 어떤것들이 있는지 알아보겠습니다.
1. 규모가 커질수록 파일이 많아져 복잡해질 수 있습니다.
하나의 새로운 기능을 구현하려면 Model, View, Controller를 각각 따로 만들어서 너무 많은 파일이 생성될 수 있습니다.
(설계를 잘 할 수 있다면 하나의 컨트롤러가 여러 뷰를 의존하도록 하는 식으로 파일수를 줄일 수 있긴 합니다. )
2. 개발자 수가 적으면 오히려 유지보수 시간이 길어질 수 있습니다.
하나의 파일에서 모든 로직을 처리하도록 하도록 하면 해당 파일만 수정하면 되나,
MVC 패턴으로 개발을 하면 여러 파일을 왔다갔다 하면서 수정해야하기 때문에 유지보수 개발하는데 시간이 더 거릴ㄹ 수 있습니다.
총평
MVC 패턴을 활용한 대표적인 프레임워크로는 아래와 같은 프레임워크들이 있습니다.
Python : Django
Javascript : Angular, Vue.js, React
Java : Spring Framework
Ruby : Ruby on Rails
이 프레임워크들은 해당 언어에서 특정목적으로 사실상 표준으로 사용되고 있스니다.
MVC 패턴의 단점이 있더라도 장점이 워낙 강력하기 때문에 대부분의 프레임워크에서 채택이 되고,
사람들이 많이 사용한다고 생각합니다.
또한 MVC 패턴을 개발을 익혀온 사람도 많으며,
한국에서는 특히 MVC 패턴이 적용되어 잇는 전자정부 프레임워크를 많이 사용하기 때문에 유지보수를 하거나 팀을 구성한다면 해당 패턴을 사용하는게 굉장히 유리해집니다.
저 또한 혼자서라도 새로운 프로젝트를 개발한다고 할 때, 거의 대부분의 프로젝트는 MVC 패턴 기반으로 개발을 합니다.
MVC 패턴을 아직 적용해본 적이 없다면 소개해드린 프레임워크를 사용해보면서 익혀보시길 추천드립니다.
저도 기회가 된다면 해당 프레임워크 사용법에 대해 소개해보겠습니다.
#MVCPattern,#MVC,#model,#view,#controller,#엠브이씨,#모델,#뷰,#컨트롤러,#패턴,#디자인패턴,#designpattern,#pattern,#design
'개발용어' 카테고리의 다른 글
SOLID 원칙 - 의존성 역전 원칙, DIP (Dependency Inversion Principle) (0) | 2022.10.15 |
---|---|
CSRF란, CSRF 동작원리, CSRF 방어방법 (0) | 2022.08.03 |
code bad smell - 중첩 if문 (0) | 2022.06.27 |
FTP - passive 모드/ active 모드 차이점 (0) | 2022.05.23 |
SOLID 원칙 - 인터페이스 분리 원칙, ISP (Interface Segregation Principle) (0) | 2022.05.11 |
댓글