애플리케이션의 역할을 모델(Model), 뷰(View), 컨트롤러(controller)로 나누어, 이들 사이 상호작용을 통제하는 아키텍처 패턴이다.
모델(Model) : 비즈니스 규칙을 표현,DATA, 정보들의 가공을 책임지는 컴포넌트를 말합니다.
뷰(View) : 프레젠테이션을 표현, 사용자에게 보여지는 부분, 즉 유저 인터페이스(User interface)를 의미합니다.
컨트롤러(Controller) : 위 두가지를 분리하기 위하여 양측 사이에 배치된 인터페이스, 모델(Model)과 뷰(View) 사이를 이어주는 브릿지(Bridge) 역할을 의미합니다.
Controller란?
앞에서의 MVC패턴 설명과 똑같이 Controller은 MVC에서 C에 해당 하며 주로 사용자의 요청을 처리 한 후 지정된 뷰에 모델 객체를 넘겨주는 역할을 합니다.
즉 사용자의 요청이 진입하는 지점이며 요청에 따라 어떤 처리를 할지 결정을 Service에 넘겨줍니다. 그후 Service에서 실질적으로 처리한 내용을 View에게 넘겨줍니다.
controller를 사용하는 이유는?
대규모 서비스중 A서비스, B서비스 등이 있다고 하겠습니다. 그러면 이 많은 종류의 서비스를 한 클래스에서 처리할 게 아니라 Controller라는 중간 제어자를 만들어서 A서비스에 대한것은 A-Controller가 맡고 B서비스는 B-Controller 이런식으로 역할에 따라 설계를 하고 코딩을 하면 개발비용이나 유지보수비용이 대폭 줄어들기 때문에 Controller를 사용합니다.
Service란?
Client가 Request를 보낸다.(Ajax, Axios, fetch등..)
Request URL에 알맞은 Controller가 수신 받는다. (@Controller , @RestController)Controller 는 넘어온 요청을 처리하기 위해 Service 를 호출한다.
Service는 알맞은 정보를 가공하여 Controller에게 데이터를 넘긴다.
Controller 는 Service 의 결과물을 Client 에게 전달해준다.Service가 알맞은 정보를 가공하는 과정을 '비즈니스 로직을 수행한다.' 라고 합니다.
Service가 비즈니스 로직을 수행하고 데이터베이스에 접근하는 DAO를 이용해서 결과값을 받아 옵니다.
Repository 란?
Entity에 의해 생성된 DB에 접근하는 메서드 들을 사용하기 위한 인터페이스입니다. @Entity라는 어노테이션으로 데이터베이스 구조를 만들었다면 여기에 CRUD를 해야겠죠?? 이것을 어떻게 할 것인지 정의해주는 계층이라고 생각하면 됩니다!
DAO란?
단순하게 페이지를 불러오고 DB정보를 한번에 불러오는 간단한 프로젝트의 경우 Service와 DAO는 차이가 거의 없을 수 있다고 합니다.
DAO는 쉽게 말해서 Mysql 서버에 접근하여 SQL문을 실행할 수 있는 객체입니다.