[Spring] Controller, Service, Repository
Spring 에서 프로젝트를 시작할 때, Conroller, Service, Repository를 항상 분리한다.
그러나, 왜 이 3가지로 분리하는지 확실하게 모르는듯 하여 이 글을 작성함.
MVC 패턴이란?

MVC 패턴은 사용자 인터페이스로부터 비즈니스 로직을 분리하여, View-Controller-Model 3가지로 분류하는 패턴이다.
등장배경
: 예전에 스프링에서는 JSP 방식을 사용했다. 이는 Controller 영역에 View 영역을 같이 구현하는 방식이며, 사용자의 요청을 JSP가 전부 처리하는 방식이다.
-> Controller 로직에 View 로직이 함께 존재하니까 JSP 파일에 대한 비중이 너무 커졌고, 유지 보수 및 확장이 어려웠다.
MVC 패턴은 화면에 보여주는 View 영역과 실제로 사용자의 역할을 처리하는 Business 로직을 분리함으로써 각 파일의 책임을 분산시켜 변경과 확장에 용이한 코드 설계가 가능하게 했다는 점이다.
1. Controller
주로 사용자의 요청을 받아 Service Layer 에 처리를 위임하고 이에 대한 결과를 View를 통해 반환하는 역할
- 사용자에게 UI나 클라이언트에게 Response를 보내는 역할을 하는 모든 클래스를 포함
- 클라이언트로부터 request를 받고 response하는 모든 API를 담
Controller는 Model과 View에 대해 알고 있다. 그러나 Model과 View는 서로의 존재를 모른다.
MVC 패턴에서 가장 중요한 점은 Model과 View는 서로의 존재를 몰라야 한다는 점이다. 결국, Controller를 통해 비즈니스 로직과 View 모델 사이의 징검다리 역할을 잘 수행하도록 하는 것이 MVC 패턴을 구현하는 데 있어 핵심이다.
2. Service
주로 서비스의 비즈니스 로직을 정의하는 Layer 역할을 담당한다.
- 애플리케이션의 비즈니스 로직을 포함하며 사용자의 요청을 이행하기 위해 도메인 객체들이 협력하여 요청을 수행하도록 조정할 책임이 있다.
- Service는 Controller와 도메인 사이에 추상화 계층을 제공한다.
- Controller가 요청된 작업을 수행하기 위해 호출할 수 있는 메소드 집합을 제공함.
3. Repository
주로 외부와의 통신(DB, 메세징 시스템)을 담당한다.
특히 JPA를 활용하는 경우, JpaRepository를 extends 하는 Repository 클래스를 만들면, 기본적인 CRUD 를 제공해준다.
결론
- Controller : 사용자의 기능 요청에 따라 Controller에 있는 해당 Request Url을 타고 -> 해당 메서드가 호출 -> 리턴 값을 실행한다.
- Service : Service 는 Controller로 부터 요청된 작업을 수행하기 위한 메소드 집합
- Repository : Entity(테이블)에 의해 생성된 DB에 접근하는 메소드를 사용하기 위한 인터페이스