TIL #19 MVC 디자인 패턴

HYEON JIN CHOI·2024년 5월 19일

1. 디자인 패턴이란

디자인 패턴은 소프트웨어 설계 문제를 해결하기 위한 일반적인 해결책이다. 즉, 소프트웨어 개발에서 반복적으로 나타나는 문제들을 해결하기 위한 재사용 가능한 설계 템플릿을 의미한다. 마치 건축에서 사용되는 청사진처럼, 디자인 패턴은 소프트웨어를 설계할 때 유용한 지침이 된다. 디자인 패턴을 사용하면 코드의 재사용성을 높이고 유지보수를 쉽게 할 수 있다.

2. MVC 기본개념 (M, V, C)

MVCModel-View-Controller 의 약자로, 소프트웨어의 구성 요소를 세 가지로 분리하는 디자인 패턴이다. 각 구성 요소의 역할을 살펴보자.

출처 : EDUCBA

  • Model (모델)
    데이터와 비즈니스 로직을 담당한다. 예를 들어, 쇼핑몰 애플리케이션에서 상품 정보, 사용자 정보 등을 관리한다. 모델은 서랍 속에 정리된 파일과 같아서, 필요한 정보를 서랍에서 꺼내와 사용할 수 있다.

  • View (뷰)
    사용자에게 보여지는 화면을 담당한다. 모델의 데이터를 기반으로 사용자 인터페이스(UI)를 구성한다. 예를 들어, 웹 페이지에서 상품 목록을 보여주는 HTML이나 UI 요소들이 이에 해당한다. 뷰는 쇼윈도에 진열된 상품처럼 사용자가 볼 수 있는 형태로 데이터를 제공한다.

  • Controller (컨트롤러)
    사용자의 입력을 받아 모델과 뷰를 업데이트하는 역할을 한다. 예를 들어, 사용자가 상품을 장바구니에 추가하면 컨트롤러가 이 요청을 받아 모델에 반영하고, 뷰를 업데이트한다. 컨트롤러는 점원이 고객의 요청을 처리하여 상품을 찾아 보여주는 역할과 같다.

Spring MVC란?

Spring MVC는 자바 기반의 웹 애플리케이션 프레임워크인 Spring에서 제공하는 MVC 아키텍처를 구현한 모듈이다. Spring MVC는 모델, 뷰, 컨트롤러를 명확하게 분리하여 웹 애플리케이션을 개발할 수 있도록 도와준다.

  • Model
    Spring MVC의 모델은 데이터를 보유하며, Model 객체를 사용하여 데이터를 뷰에 전달한다.

  • View
    뷰는 사용자에게 데이터를 보여주는 역할을 하며, 주로 JSP, Thymeleaf 등의 템플릿 엔진을 사용하여 구현된다.

  • Controller
    Spring MVC에서 컨트롤러는 @Controller 애노테이션을 사용하여 정의된다. 사용자 요청을 받아들이고 적절한 모델과 뷰를 결정한다.

예를 들어, 사용자가 웹 페이지에서 "상품 목록 보기" 버튼을 클릭하면, 해당 요청은 컨트롤러로 전달되고, 컨트롤러는 모델에서 상품 목록을 가져와 뷰에 전달한다. 뷰는 이 데이터를 사용하여 사용자에게 상품 목록을 보여준다.

3. MVC 패턴의 장점

MVC 패턴은 여러 가지 장점을 제공한다.

  • 분리된 관심사(Separation of Concerns)
    모델, 뷰, 컨트롤러가 각각의 역할에 집중할 수 있어 코드의 가독성과 유지보수성이 높아진다.

  • 재사용성(Reusability)
    모델과 뷰를 독립적으로 재사용할 수 있다. 예를 들어, 같은 모델을 다양한 뷰에서 사용할 수 있다.

  • 유연성(Flexibility)
    새로운 뷰나 컨트롤러를 쉽게 추가할 수 있어 확장성이 뛰어나다. 예를 들어, 기존 웹 애플리케이션에 모바일 뷰를 추가할 때 기존 모델을 그대로 사용할 수 있다.

  • 테스트 용이성(Testability)
    각 구성 요소가 독립적이기 때문에 단위 테스트를 쉽게 작성할 수 있다.

비유하자면, MVC 패턴은 잘 조직된 팀과 같다. 각 팀원이 자신의 역할을 명확히 알고 있으면 팀 전체의 효율성이 높아지듯이, MVC 패턴도 각 구성 요소가 명확하게 분리되어 있어 애플리케이션의 효율성을 높여준다.

4. 회고

MVC 디자인 패턴을 공부하면서 가장 크게 느낀 점은 각 구성 요소의 역할과 책임을 명확히 이해하는 것이 중요하다는 것이다. 모델, 뷰, 컨트롤러의 역할을 명확히 구분함으로써 애플리케이션의 유지보수성과 확장성을 크게 높일 수 있다는 것을 배웠다. 이를 통해 소프트웨어 설계의 기본 원칙인 분리된 관심사의 중요성을 다시 한 번 깨닫게 되었다.

0개의 댓글