응용 서비스와 표현 영역

2023. 8. 12. 16:13스터디/DDD 스터디

728x90

# 표현 영역과 응용 영역

- 응용 영역과 표현 영역이 사용자와 도메인을 연결해주는 매개체 역할을 함

- 표현 영역은 응용 서비스가 요구하는 형식으로 사용자 요청을 변환.

- 응용 서비스를 실행한 뒤에 표현 영역은 실행 결과를 사용자에게 알맞은 형식(HTML/JSON)으로 응답

 

# 응용 서비스의 역할

 

- 응용 서비스는 사용자가 요청한 기능을 실행

- 사용자 요청을 처리하기 위해 리포지터리에서 도메인 객체를 가져와 사용

- 도메인 영역과 표현 영역을 연결해주는 창구

- 응용 서비스가 복잡하다면 응용 서비스에서 도메인 로직 일부를 구현하고 있을 가능성이 높음

- 응용 서비스는 트랜젝션 처리도 담당

 

도메인 로직을 응용서비스로 분산시 문제점

1. 코드 응집성이 떨어짐

2. 여러 응용 서비스에서 동일한 도메인 로직을 구현할 가능성이 높아짐

 

# 응용 서비스의 구현

 

## 응용 서비스 구현 방식

1. 한 응용 서비스 클래스에 회원 도메인의 모든 기능 구현

- 장 : 동일 로직에 대한 코드 중복 제거 가능

- 단 : 한 서비스 클래스 크기가 커짐

 

2. 구분되는 기능별로 응용 서비스 클래스를 따로 구현하기

- 기능 별로 2~3개의 기능 구현

- 장 : 코드 품질을 일정 수준으로 유지 가능. 각 클래스 별 필요한 의존 객체만 포함

- 단 : 클래스 개수가 많아짐

Helper 클래스를 통해 중복 로직 관리 

 

응용 서비스의 인터페이스와 클래스

구현 클래스가 여러개인 경우 인터페이스가 필요함.

허나, 응용 서비스는 런타임에 교체하는 경우가 거의 없고, 응용 서비스의 구현 클래스가 두 개인 경우도 드물다.

 

# 표현 영역

- 사용자가 시스템을 사용할 수 있는 흐름(화면)을 제공/제어

- 사용자의 요청을 알맞은 응용 서비스에 전달하고 결과를 사용자에게 제공

- 사용자 세션 관리

 

# 값 검증

값 검증은 표현 영역, 응용 서비스 영역 두 곳에서 모두 수행할 수 있음.

원칙적으로는 응용 서비스에서 처리 : 파라미퍼로 전달받은 값에 대한 검사

표현 영역 : 필수 값, 값 형식, 범위 등 검증

응용 서비스 : 데이터 존재 유무 등 논리적 오류 검증

 

# 권한 검사

표현 영역에서 권한 검사 수행 : 서블릿 필터 등을 통해 인증된 사용자인지 아닌지 검사

응용 서비스에서 권한 검사 수행 : AOP등을 활용

개별 도메인 객체 단위 검사 수행 : 내부에서 직접 권한 검사 로직 수행

 

# 조회 전용 기능과 응용 서비스

단순 조회 호출은 직접 Repository를 호출할 수 있음.

이 경우는 굳이 서비스를 만들 필요가 없을 수도

 

- 궁금한 점 : Read Only임에도 불구하고 트랜젝션을 적용해야하는가

728x90

'스터디 > DDD 스터디' 카테고리의 다른 글

애그리거트 트랜잭션 관리  (0) 2023.08.26
도메인 서비스  (0) 2023.08.18
스프링 데이터 JPA를 이용한 조회 기능  (0) 2023.08.05
리포지터리와 모델 구현  (0) 2023.07.28
애그리거트  (0) 2023.07.19