6.1 표현 영역과 응용 영역
- 표현 영역과 응용 영역은 사용자와 도메인 영역을 이어주는 역할을 한다.

6.2 응용 서비스의 역할
- 응용 서비스는 도메인 객체 간의 흐름을 제어한다.
- 보통 단순한 형태를 가진다.
- 응용 서비스에서 도메인 로직을 가지지 않도록 주의하자.
- 응용 서비스는 트랜잭션 처리도 담당한다.
6.3 응용 서비스의 구현
- 응용 서비스는 파사드와 같은 역할을 한다.
- 응용 서비스의 크기
- 하나에 다 때려박은 MemberService
- 코드 중복 (private method 방식)을 제거 하기 좋다
- 코드 라인이 너무 길어진다.
- 구분되는 기능별로 서비스 클래스를 구현
- 한 서비스에 2~3개의 메서드만을 가지게 한다.
- 클래스 개수는 많아지지만 코드 품질을 유지하는데 도움이 된다.
- Helper class 로 중복을 방지할 수 있다.
- 인터페이스가 필요한가?
- 구현 클래스가 여러개인 경우? 그런 경우는 정말 드물다.
- 테스트 용이성? mockito 같은 테스트 도구는 클래스에 대해서도 테스트 더블을 생성할 수 있게 도와준다.
- 결론 - 글쌔요?
- 계층별 매핑 객체
- 애그리거트의 객체를 그대로 반환하면 망한다.
- 인자를 넘기는 방식, 실행 결과를 반환하는 방식에 대해서 적절히 룰을 잡자.
- 표현 영역에 의존하지 말라
6.4 표현 영역
- 화면 제어
- 응용서비스와 사용자의 중간 처리
- 세션 관리
- 결론 - 컨트롤러는 로직을 가지면 안된다.
- 컨트롤러가 로직을 가질 수 있는 경우
- 예외 처리
- HTTP 헤더 등 응답 값 처리
6.5 값 검증
크게 유효성 검사와 비즈니스 로직 검사로 나뉜다.
구현 위치는 어디로?
- 표현 영역?
- 응용 서비스?
알아서 골라라
6.6 권한 검사
- 스프링 시큐리티에 대한 이해도가 높다면 voter 를 사용해서 앞단에서 처리
- 잘 모르면 그냥 응용 서비스에서 해라
6.7 조회 전용 기능과 응용 서비스
- cqrs 를 적용하여 read 서비스를 cud 계열의 서비스와 완벽히 구분했다면
조회 응용 서비스는 사실 필요 없다는 것을 알 수 있다.
- 도메인 로직이랄 것도 없으므로 표현 영역에서 바로 repository/dao 를 사용하는 것도 좋다.