MVC 패턴 (Model-View-Controller pattern)

Model-View-Controller의 약자로서 개발을 할 때

3가지 형태로 역할을 나누어 개발하는 방법론이다

 

Model

어플리케이션이 무엇을 할 것인지 정의하는 부분이다

DB와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룬다

 

View

사용자에게 시각적으로 보여주는 부분이다

 

Controller

Model이 데이터를 어떻게 처리할지 알려주는 역할을 한다

클라이언트가 보낸 데이터가 있으면 Model을 호출하기 전에

가공을 한 다음에 Model을 호출한다

그 다음 모델이 업무 수행을 완료하면 그 결과를 가지고

View에게 전달하는 역할을 한다

 

MVC 패턴을 왜 사용할까

사람도 업무 분담을 하면 각자 맡은일만 집중하면 되니까 일의 능률이 오른다

동일한 이유로 역할을 분리하여 어플리케이션을 만들면

어플리케이션의 확장성, 유연성이 증가하고 중복코딩이라는 문제가 사라진다

 

Controller 란

앞에서도 잠시 봤지만 Controller는 사용자의 요청을 받아서

어떤 처리를 할 지 결정을 Service에 넘겨준다

그런 다음 Service에서 실질적으로 처리한 내용을 View에 넘겨준다

 

Controller를 사용하는 이유

대규모 서비스에서 여러 좋류의 서비스가 있을때

Controller라는 중간 제어자를 만들어서 각각의 서비스를

각각의 역할에 따라 설계를 해서 개발 비용이나 유지보수 비용이 줄기 때문에

 

@Controller (Spring MVC Contorller)

Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용한다

@ResponseBody 어노테이션과 같이 사용하면 RestController와 같은 기능을 수행한다

 

@RestController (Spring Restful Controller)

Controller에서 @ResponseBody 어노테이션이 붙은 기능을 가진다

JSON / XML 형태로 객체 데이터 반환을 목적으로 한다

 

Service 란

보통 Service에서 비즈니스 로직을 수행한다고 하는데

Service가 알맞은 정보를 가공하는 과정을 뜻한다

 

Service가 비즈니스 로직을 수행하고 데이터베이스에 접근하는

DAO를 이용해서 결과값을 받아오기도 한다

 

과정을 보자면

1) 클라이언트가 Requset를 보낸다

2) Request URL에 알맞은 Controller가 수신을 받는다

3) Controller가 클라이언트 요청을 처리하기 위해 Service를 호출한다

4) Service에서 알맞은 정보를 가공해서 Controller에게 값을 넘겨준다

5) Controller는 그 값을 클라이언트에게 전달한다

 

DAO 란

작은 프로젝트에서는 Service와 DAO의 차이가 거의 없다

DB에 접근해서 SQL문을 실행할 수 있는 객체다

 

Repository 란

Entity에 의해 생성된 DB에 접근하는 메서드 들을 사용하기 위한 인터페이스이다

@Entity라는 어노테이션으로 데이터베이스 구조를 만들었다면

이것을 CRUD 할 것을 정의해주는 계층이다

 

쉽게말해 DB연결, 해체, 자원을 관리하고 CRUD 작업을 처리하는 곳이다

 

 

전체 과정

Client <ㅡ dto ㅡ> Controller(web) ㅡ Service ㅡ Repository(JPA) <ㅡ domain(Entity)

ㅡ> DB