Spring Boot를 이용해 Web에 대해 공부를 하던 중 MVC Pattern을 통해 로직을 구현해보았고
이를 이용하는 과정에서 간단한 동작 원리는 이해했지만 어떠한 이점과 단점이 있는지? 등에 대한 정확한 이해가 필요했다.
MVC Pattern에 대한 학습에 앞서 MVC Pattern의 넓은 범주에 속하는 Software Architecture Pattern에 대해
알아야 했다. (MVC Pattern은 software architecture pattern의 한 종류이다.)
1. Software Architecture Pattern?
" 아키텍처 패턴(architectural pattern)은 주어진 문맥 안에서 소프트웨어 아키텍처의 공통적인 발생 문제에 대한
일반적인, 재사용 가능한 해결책을 의미한다. 아키텍처 패턴은 소프트웨어 디자인 패턴과 비슷하지만 더 넓은 범위에
속한다. 아키텍처 패턴은 소프트웨어 공학의 다양한 문제를 해결하는데, 예를 들어 컴퓨터 하드웨어 성능 제한, 비즈니스
위험의 최소화와 고가용성을 들 수 있다. 일부 아키텍처 패턴은 소프트웨어 프레임워크 안에 구현되어 있다. "
1) 10가지의 Software Architecture Pattern
- 계층화 패턴 (Layered pattern)
- 클라이언트-서버 패턴 (Client-server pattern)
- 마스터-슬레이브 패턴 (Master-slave pattern)
- 파이프-필터 패턴 (Pipe-filter pattern)
- 브로커 패턴 (Broker pattern)
- 피어 투 피어 패턴 (Peer-to-peer pattern)
- 이벤트-버스 패턴 (Event-bus pattern)
- MVC 패턴 (Model-view-controller pattern)
- 블랙보드 패턴 (Blackboard- pattern)
- 인터프리터 패턴 (Interpreter pattern)
이 중 MVC Pattern을 간단히 설명하자면 MVC는 그대로 Model, View, Controller 세 가지의 주요 논리적 구성 요소로 분리하는 아키텍처 패턴이다. 이러한 각 구성 요소는 응용 프로그램의 특정 개발 측면을 처리하도록 구축된다.
(아래 사진을 통해 동작 원리를 이해하자)
2. MVC Pattern
1) Model
Model 구성 요소는 사용자가 작업하는 모든 데이터 관련 논리에 해당한다. 이는 View와 Controller 구성 요소 간에 전송되는 데이터 또는 기타 비즈니스 로직 관련 데이터를 나타낼 수 있다. 예를 들어 Customer 개체는 데이터베이스에서 고객 정보를 검색하고 이를 조작하고 데이터를 다시 데이터베이스로 업데이트하거나 데이터를 렌더링 하는 데 사용한다.
2) View
View 컴포넌트는 애플리케이션의 모든 UI 로직에 사용된다.
예를 들어 고객 보기에는 최종 사용자가 상호 작용하는 텍스트 상자, 드롭다운 등과 같은 모든 UI 구성 요소가 포함된다.
3) Controller
Controller는 모든 비즈니스 로직과 들어오는 요청을 처리하고, 모델 구성 요소를 사용하여 데이터를 조작하고, 최종 출력을 렌더링 하기 위해 뷰와 상호 작용하기 위해 모델과 뷰 구성 요소 사이의 인터페이스 역할을 한다. 예를 들어 고객 컨트롤러는 고객 보기의 모든 상호 작용 및 입력을 처리하고 고객 모델을 사용하여 데이터베이스를 업데이트한다.
MVC Pattern의 장/단점?
MVC Pattern을 사용하면 위와 같은 3가지 구성 요소를 통해 비교적 간단한 패턴으로 구조 파악과 확장을 쉽게 할 수 있다.
또한 패턴을 성공적으로 사용하면 사용자 인터페이스(Front-End)로부터 비즈니스 로직(Back-end)을 분리하여 애플리케이션의
시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.
하지만 이러한 장점만 있는 것은 아니다. 뷰와 모델의 의존성이 높기 때문에 완벽한 분리가 어려워지고
애플리케이션이 커질수록 컨트롤러의 코드량이 커져 유지보수하기가 힘들다는 점이 있다.
Reference
https://www.tutorialspoint.com/mvc_framework/mvc_framework_introduction.htm
https://junhyunny.github.io/information/design-pattern/mvc-pattern/
https://ko.wikipedia.org/wiki/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98_%ED%8C%A8%ED%84%B4
https://mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/#8-%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-%ED%8C%A8%ED%84%B4-model-view-controller-pattern
'study > spring boot' 카테고리의 다른 글
[spring boot] 싱글톤 컨테이너(singleton container)의 기능 (0) | 2023.02.12 |
---|---|
[spring boot] Port was already in use 오류 해결 방법 (0) | 2023.01.05 |
[spring boot] WebMvcCofigurer - 정적 리소스(static resource) 설정 (0) | 2022.10.04 |
[spring boot] - lombok이란? (0) | 2022.05.16 |
[spring boot] Gradle 활용한 빌드(build) 방법 (0) | 2022.01.21 |
댓글