애플리케이션을 세 가지 계층으로 분리하여 만드는 설계 기법이다.
Presentation Layer, Business Layer(Service Layer), Data Access Layer(Repository Layer) 이렇게 세 가지 레이어로 구성되어있다.하나의 클래스가 많은 역할을 부담하지 않고, 책임을 분산하기 위해 사용한다.
각 계층은 명확한 역할 분담이 되어있다.
코드의 재사용성, 유지보수성, 확장성에 이롭다.
클라이언트의 요청을 받고 응답하는 역할을 담당한다.
API를 정의한다.클라이언트의 요청이 컨트롤러(Presentation Layer)로 들어가고, 컨트롤러는 요청에 대한 처리를 Business Layer(Service Layer)로 전달한다.
이 후 서비스 레이어에서 처리된 결과를 다시 클라이언트에게 응답한다.
@Controller, @RestController
이 후 받은 요청은 DTO에 담아 서비스레이어의 handleServiceProcess기능으로 전달하고, 처리된 값을 다시 DTO에 담아 받아온 뒤, return하여 클라이언트에 응답한다.
요청이 들어왔을 때 어떻게 처리할것인지에 관한 비지니스 로직을 수행한다.
예를 들어 클라이언트의 요청을 확인하고, 확인한 값에 조건을 적용하는 등의 로직을 담는다.
데이터베이스와 상호작용이 필요한 경우엔 Repository Layer에게 요청한다.
일반적으로 하나의 비지니스 로직은 하나의 트랜잭션으로 동작한다.
(트랜잭션이란 일련의 작업들을 하나로 묶어 처리하는 개념으로 이해하면 쉽다.)
사용하는 어노테이션 : @Service

이 후 컨트롤러에서 넘겨준 RequestDto의 값을 매개변수로 비즈니스 로직을 처리하여 레포지토리 레이어로 넘겨준다. 레포지토리 레이어에서 처리된 값을 담은 result변수를 다시 Response Dto에 담아서 컨트롤러로 반환한다.
데이터와 관련된 역할을 수행한다.
데이터베이스와 연동하여 데이터를 저장, 수정, 삭제 등의 로직을 담는다.
@Repository