기존에 개발이 어느정도 되어있던 학과 개발팀에 참여하게 되어 기존 프로젝트 구조 및 코드를 이해하는데 시간이 필요했다. 이 과정에서 내가 이제껏 해왔던 프로젝트의 구조와 다르다는 것을 알았고, Layered Architecture와 더 나아가 도메인 서비스/애플리케이션 서비스에 대해 더 공부해보려 한다. 개발을 하며 관습은 있더라도 정해진 정답은 없다고 생각한다. 하지만 아는만큼 보인다고 이런 지식들을 꾸준히 쌓아나가다 보면 개발자로서 바라보는 시야가 넓어지지 않을까 싶다.
Layered Architecture
Layered Architecture는 소프트웨어 시스템을 구조화하는 방법 중 하나로, 시스템을 여러 계층으로 나누어 각 계층이 특정 역할을 담당하도록 하는 아키텍처 패턴이다.
1. Presentation Layer
- 사용자 인터페이스, 사용자가 시스템과 상호작용하는 부분
- ex) 웹 애플리케이션의 경우 HTML, CSS, JavaScript 등
2. Application Layer
- 비즈니스 로직 처리
- 애플리케이션의 기능을 구현하고, 사용자의 요청을 처리해 적절한 데이터를 반환하거나 데이터를 관리함.
- ex) 사용자 인증, 데이터 유효성 검사, 트랜잭션 관리 등
3. Domain Layer
- 도메인 모델과 함께 핵심 비즈니스 로직을 초함함
- 엔터프라이즈 애플리케이션에서 중요한 규칙과 정책을 정의하고, 비즈니스 객체를 관리함
- ex) 고객 관리, 주문 처리, 상품 관리 등
4. Infrastructure Layer
- 데이터베이스나 파일 시스템과 같은 영구 저장소와의 상호작용을 담당함
- 데이터베이스와의 연결, 데이터의 CRUD 등의 작업을 수행함
- ex) SQL 쿼리 등
Layered Architecture의 장점
- 모듈화 : 각 계층이 독립적으로 개발되고, 테스트 될 수 있어 모듈화가 용이함
- 유지보수성 : 특정 기능을 변경하거나 확장할 때, 다른 계층에 미치는 영향을 최소화할 수 있음
- 재사용성 : 동일한 비즈니스 로직이나 데이터 접근 코드를 여러 애플리케이션에서 재사용할 수 있음
- 가독성 : 시스템의 구조가 명확히 나누어져 있어 코드의 가독성이 높아짐
Layered Architecture의 단점
- 성능 저하 : 계층 간의 호출이 많아질 경우 성능이 저하될 수 있음
- 복잡성 증가 : 계층이 많아질수록 시스템의 복잡성이 증가할 수 있음
- 의존성 문제 : 잘못된 설계로 인해 계층 간의 의존성이 강해지면 유지보수가 어려워질 수 있음
도메인 서비스
도메인 서비스는 도메인 로직을 담당하며, Entity와 Value Object에 자연스럽게 들어맞지 않는 도메인의 핵심 연산을 포함한다. 이는 비즈니스 결정을 내리는데 관여한다. 도메인 서비스는 상태를 갖지 않는다.
즉, 도메인 서비스는 실제 비즈니스 로직을 구현하는데 사용된다.
애플리케이션 서비스
애플리케이션 서비스는 사용자가 사용하는 행위이다. 도메인 로직을 포함하지 않고, 주로 도메인 모델을 이용하여 외부 시스템과의 상호작용을 조정한다. 하지만 백엔드 개발자 입장에서는 그 서비스를 제공하기 위해 도메인 서비스와 외부 서비스의 조합으로 사용자에게 서비스를 제공한다. 또는 외부 서비스가 아닌 다른 도메인 서비스에게 위임하여 비즈니스 요구사항을 만족시킨다.
즉, 애플리케이션 서비스는 사용자의 요청을 처리한다.
아래 블로그를 참고하였습니다.
애플리케이션 서비스와 도메인 서비스
도메인과 관련 없는 다른 코드를 통해 널리 확산될 경우 도메인에 관련된 코드를 확인하고 추론하는게 어렵다.그래서 데이터베이스 코드, API DTO 코드 섞여있게 되면 자동화 테스트가 어려워진
velog.io
https://enterprisecraftsmanship.com/posts/domain-vs-application-services/
Domain services vs Application services
In this post, we’ll take a look at domain services: what differs them from application services and when it is preferable to use one in addition to an application service.
enterprisecraftsmanship.com