MVC (Model - View - Controller)
사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴
- 모델 : 데이터와 비즈니스 로직 관리
- 뷰 : 레이아웃과 화면을 처리
- 컨트롤러 : 모델과 뷰로 명령을 전달
위 사진처럼 사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 화면에 비추는 View를 제어하여 사용자에게 전달한다.
모델
- 앱이 포함해야할 데이터가 무엇인지 정의
- 데이터 상태 변경 시 뷰에게 알리며, 다른 로직이 필요한 경우 컨트롤러에게도 알린다.
모델에서 가져야할 규칙
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
- 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
- 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
뷰
- 엡의 데이터를 보여주는 방식 정의
뷰에서 가져야할 규칙
- 모델이 가지고 있는 정보를 따로 저장해선 안된다.
- 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 한다.
- 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야만 한다.
컨트롤러
- 앱의 사용자로부터의 입력에 대한 응답으로 모델 및 뷰를 업데이트하는 로직 포함
컨트롤러에서 가져야할 규칙
- 모델이나 뷰에 대해서 알고 있어야 한다.
- 모델이나 뷰의 변경을 모니터링 해야 한다.
MVC 패턴을 사용하는 이유`
서로 분리되어 각자의 역할에 집중할 수 있게 개발하여 애플리케이션이 만들어 진다면
유지보수성, 애플리케이션의 확장성, 유연성이 증가하고 중복코딩이라는 문제점 또한 사라지게 되는 것
Spring FrameWork VS Spring Boot
그저 막연하게 Spring을 이용해서 서버에 웹 페이지를 띄워보고 싶었다. 그러던중 Spring FrameWork와 Spring Boot로 나뉘는 것을 알게되었고 현 프로젝트는 Spring Boot를 선택하였지만 둘의 차이를 정리해두고 넘어가려고 한다.
Spring FrameWork
자바 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크로 간단히 스프링 이라고도 불린다.
순수 자바 객체만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 기업용 애플리케시연을 개발하기 위한 목적으로 개발된 프레임워크 이다.
스프링의 대표적인 특징
- 제어 역전
- 스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공
- 객체의 생성과 관계 설정을 스프링에 위임할 수 있음
- 스프링 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성 주입
- 의존성 주입
- 의존성 주입을 통해 객체 간의 관계를 설정
- 애플리케이션의 결합도를 낮추고 유연성과 테스트 용이성 향상
- AOP지원(관점 지향 프로그래밍)
- 애플리케이션의 핵심 비지니스 로직과 부가적인 기능을 분리하여 모듈화
- 웹 개발 지원
- 스프링 MVC는 유연하고 확장 가능한 웹 애플리케이션을 개발할 수 있는 MVC 아키텍처 지원
스프링의 문제점
스프링은 설정이 복잡해서 기업에서 스프링을 도입, 개발, 운영할 때 다음과 같은 몇 가지 어려움 겪을 수 있음
- 설정의 복잡성
- 개발자들이 애플리케이션 컨텍스트 설정, 빈 정의, 다양한 컴포넌트 구성 등을 위해 많은 설정 코드를 작성
- 높은 초기 학습 난이도
- 다양한 개념과 기능을 이해하고 사용하기 위해 시간과 노력이 필요
- 의존성 관리 문제
- 전통적인 스프링 프레임워크에서는 여러 의존성과 그들의 버전을 관리하는 것이 복잡
- 스프링 레거시에서는 의존성 주입(Dependency Injection)을 구현하기 위해 XML 설정 파일에 많은 수의 빈(Bean)을 등록
- 별도 WAS 서버 구성의 번거로움
- 스프링을 웹상에서 사용하기 위해서는 별도의 Web Application Server(WAS)를 설치하고, 설정
Spring Boot
스프링의 문제점을 해결해 주기 위해 개발된 스프링의 프레임워크
스프링 부트의 대표적인 특징
- 간결한 설정
- 스프링 부트는 번거로운 XML 설정이 필요 없으며, 최소한의 설정으로 Spring을 사용가능
- 설정으로 인한 불편사항을 해소하여 개발자는 애플리케이션 개발에 집중.
- 내장 서버
- 스프링 부트는 내장된 서버(내장 Tomcat, Jetty, Undertow)를 제공하여 별도의 서버 설정 없이 애플리케이션 실행
- 배포를 위해 War 파일을 생성해서 Tomcat에 배포할 필요 없으며, JAR 파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션 실행 가능
- 의존성 관리 간소화
- 이미 테스트된 여러 라이브러리들의 묶음 패키지를 제공
- Maven/Gradel 설정 시 버전 관리가 간편
- 개발자는 버전 충돌이나 복잡한 의존성 설정에 대해 걱정하지 않고 필요한 의존성을 쉽게 지정
- 운영 편의성
- 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공
스프링 부트는 스프링(Spring Legacy)의 장점은 그대로 계승하면서, 기존의 문제가 되는 부분을 보완하여 기업용 애플리케이션의 개발 생산성 및 서비스 운영, 성능을 모두 해결해 줄 수 있음
이렇듯 스프링 부트는 개발자들의 개발 생산성을 높이고, 애플리케이션의 유연성, 확장성을 제공할 뿐만 아니라, 스프링 프레임 워크들과 강력하게 호환되고, 생태계와의 통합을 가능케함
'인실리코젠' 카테고리의 다른 글
[인실리코젠] WebCrawling - 2 (0) | 2024.01.22 |
---|---|
[인실리코젠] Spring : 용어 정리(기본) (0) | 2024.01.19 |
[인실리코젠] WebCrawling - 1 (0) | 2024.01.16 |
[인실리코젠] Maven에 대하여 (0) | 2024.01.12 |
[인실리코젠] Apache POI 라이브러리를 이용한 Exel 데이터 읽기 2 (0) | 2024.01.12 |