🍃 Language/Java

[Spring] MVC패턴 + Spring에서 MVC 패턴

카프리썬_ 2020. 1. 16. 14:00
728x90
728x90

디자인패턴

디자인 패턴 프로그래밍 형식을 정하는 일종의 약속이다.

객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴.

 

싱글톤 패턴이란?

애플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고(static)

그 메모리의 인스턴스를 만들어 사용하는 패턴.

(인스턴스가 필요한 경우 똑같은 인스턴스를 여러 개 만드는 것이 아니라, 동일(기존) 인스턴스를 사용하게 하는 한다)

 

*장점

고정된 메모리 사용으로 new 인스턴스를 사용하기 때문에 메모리 낭비를 막음

ⓑ static(전역) 인스턴스이기 때문에 다른 클래스에서 데이터를 공유하기 쉬움

* 단점

너무 많은 사용은 다른 클래스들 간의 결합도가 높아져 수정, 테스트가 어려워질 수 있다.

 

MVC패턴이란?

Model,View, Controller의 약자

하나의 앱, 프로젝트를 구성할때 그 구성요소를 3가지 역할로 구분

사용자가 Controller로 조작하면,

Controller는 Model을 통해 데이터를 가져오고,

그 정보를 바탕으로 시각적인 표현을 View가 제어해서 

사용자에게 전달하는 방식

 

출처 : 생활코딩

1.Model

애플리케이션의 정보, '데이타', 데이타베이스,

처음의 정의하는 상수, 초기화값, 변수 등을 뜻합니다.

또한 이러한 DATA, 정보들의 가공을 책임지는 컴포넌트를 말합니다

ex) 웹에서 적용할때 db

 

2.Conroller

사용자가 접근한 url에 따라서 사용자의 요청사항을 파악한 후,

그 요청에 맞는 데이터를 모델에게 의뢰하고, 데이터를 view에게 반영하는 역할

ex) 웹에서 적용하면 js

 

3. View

클라이언트측 기술

ex) 웹에서 적용하면 html/css/javascript

 

MVC패턴을 사용하는 이유?

서로 분리되서 각자 역할에 집중할 수 있게끔 해서 유지보수,확장성, 유연성 증가 

 

Spring에서 MVC구조

기존의 MVC패턴를 적용한 스프링프레임워크의 MVC구조이다. 

똑같이 Model, View, Controller로 구분되긴 했지만, 스픙리프레임워크에서 model은 DAO,DTO,Service로 나뉜다. 

출처 : https://m.blog.naver.com/jysaa5/221751719334

그래서 MVC구조 기반의 데이터흐름을 보면 이렇다.

 

REST API에 의해서 URL을 호출받게 되면 -> Contoller가 요청사항을 파악한 뒤

-> 상속받고 있는 서비스가 비즈니스 로직을 수행한다 간다

-> 서비스는 해당 로직을 처리하기 위해 DAO에 메소드를 호출하고,

-> DAO는 DB에 접근해서 데이터를 조작한 뒤 쿼리결과를 다시 서비스에게 전달한다  

-> 다시 서비스는 View에게 데이터나 최종결과를 리턴하면서 최종사용자에게 보여지게 된다

출처 : https://m.blog.naver.com/jysaa5/221751719334

하나하나 각 기능을 살펴보면 이렇다.

 

1.Controller 

클라이언트에서 요청이 들어올때, 해당요청을 수행할 비즈니스 로직을 제어하는 객체.

스프링에서는 서비스 레이어를 만들어 요청사항을 세분화한다. 

*비즈니스로직 : 실제 구현을 위해 설계된 부분으로 데이터를 처리하는 코드라고 보면 된다.

 

2.Service

세분화된 비즈니스 로직을 처리하는 객체

Contoller가 요청을 받으면 적절한 서비스에 전달하고, 전달받은 서비스는 비즈니스 로직을 처리한다

DAO로 데이터베이스에 접근하고, DTO로 데이터를 전달받은 다음, 처리를 수행하고 반환한다

즉, DAO의 CRUD를 조합해서 사용하는

 

3.DAO(Data Access Object)

DB에 접근하는 객체.

DB를 사용해 데이터를 조회하거나 조작한다 (CRUD)

 

왜 사용해야하는가?

db에 접근할때 많은 커넥션이 생기는데, 이떄마다 새로 커넥션 맺고, 데이터를 가져오고 하면 스레드가 많이 생김.

그래서 전용객체를 미리 만들고 저장해둔다.

db 커넥션을 객체를 pool에 저장해두고, 커넥션 요청이 들어올떄마다 pool에서 객체를 빌려와서 사용하고 반환 

*DB Connection Pool과 같은 개념이다. 

 

[Mysql 아키텍쳐1] 커넥션풀/Mysql엔진/스토리지엔진

내부적으로 어떻게 작동는지 이해하기 출처 RealMysql 서적을 기반으로 이해한 내용 정리 1. 전체구조 1) 기본적으로 client-server구조 다수의 Client들이 하나의 DB 서버에 연결되는 구조 -> 클라이언트

pearlluck.tistory.com

4. DTO(Data Transfer) 또는 VO(Value Obejct)

각 계층간 데이터교환을 위한 자바객체.

이 객체는 데이터를 각 레이어간에 전달한다.

따로 로직을 가지고 있지 않고 객체의 속성과 getter, setter만 가지고 있다.

 

계층간에 데이터를 교환하기 위한 자바빈즈(Java Beans)를 의미한다.

데이터베이스에서 데이터를 얻어 Service나 Controller에게 보내서 매핑하기 위한 데이터객체.

 

 

MVC와 스프링프레임워크 MVC비교

728x90
반응형