본문 바로가기
Architecture

[Architecture] Service Layer의 역할

by doodoom 2023. 4. 18.

0. 이 글을 쓰게된 이유

지금까지 계층형 아키텍처를 사용하면서 자연스럽게 service 계층을 사용했다. 하지만 service 계층의 담당하는 역할이 뭔지, 굳이 있어야하는지, 다른 도메인 로직과 무슨 차이로 나눠지는지 생각해본적이 없었다. 다른 사람들의 생각을 알아보고, 나의 생각을 적립하기 위해 이 글을 쓰게되었다.

1. Service Layer?

마틴 파울러는 Service Layer의 역할을 다음과 같이 정의한다.

A Service Layer defines an application's boundary [Cockburn PloP] and its set of available operations from the perspective of interfacing client layers. It encapsulates the application's business logic, controlling transactions and coor-dinating responses in the implementation of its operations.

Service Layer는 어플리케이션의 하나의 작업 단위(집합)를 정의하고 도메인의 각 동작을 조율하는 역할을 한다. 즉, 비지니스 로직의 단위를 생성하여 캡슐화하는 역할을 한다.
하나의 동작 단위를 정의하는 역할을 하다보니 트랜잭션 단위가 되기에 좋다. 하나의 작업은 하나의 트랜잭션에서 처리되게 유리한 경우가 많기 때문이다.


layered architecture에서 service layer는 business layer에 속한다. 하지만 service layer가 business layer는 동등하다고 볼 수 없다. business Layer는 도메인 로직이 있고 거기에 service layer가 있을 수도 없을 수도 있다.

최초에는 아마 service layer 없이 domain 객체끼리 협력해서 비지니스 로직을 처리했을 것이다. 그렇게 되면 다른 계층에서 접근할 때 일관되게 접근할 수 없고 캡슐화가 잘 이루어지지 않았을 것이다. 자연스럽게 도메인 로직을 캡슐화하려는 수요가 생겼을 것이고, 작업들을 하나의 단위로 정의하는 객체가 생성되었을 것이다. 그 객체를 service로 부르기로 하지 않았을까 조심스레 추측한다.

2. 정리

service layer는 business layer를 캡슐화하기 위해 생긴 객체라고 생각한다. 여러가지 비즈니스 로직을 모아서 조율하는 하나의 단위를 만드는 역할을 하는 것이다.

'Architecture' 카테고리의 다른 글

[Spring] Layered-Architecture(계층형 아키텍처)  (6) 2023.04.14