스프링 웹 계층에 대한 설명
Web Layer
- 흔히 사용하는 컨트롤러와, JSP / Freemarker 등의 뷰 템플릿 영역이다.
- 필터, 인터셉터, 컨트롤러, 어드바이스(@ControllerAdvice) 등 외부 요청과 응답에 대한 전반적인 영역을 의미한다.
Service Layer
- @Service에 사용되는 서비스 영역이다.
- 일반적으로 Controller와 Dao의 중간 영역에서 사용된다.
- @Transactional이 사용되어야 하는 영역이기도 하다.
Repository Layer
- Database와 같이 데이터 저장소에 접근하는 영역이다.
- DAO(Data Access Object) 영역으로 이해해도 좋다.
Dtos
- Dto(Data Transfer Object)는 계층 간에 데이터 교환을 위한 객체를 이야기하며, Dtos는 이들의 영역을 의미한다.
- 뷰 템플릿 엔진에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등이 이들을 이야기한다.
Domain Model
- 도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화시킨 것을 도메인 모델이라고 한다.
- 만약 택시 앱이라고 하면 배차, 탑승, 요금 등이 모두 도메인이 될 수 있다.
- @Entity가 사용된 영역 역시 도메인 모델이라고 이해해도 좋다.
- 하지만, 무조건 데이터베이스의 테이블과 관계가 있어야만 하는것은 아니다.
- VO처럼 값 객체들도 이 영역에 해당하기 때문이다.
+ 추가
Web, Service, Repository, Dto, Domain 이 5가지 레이어에서 비지니스 처리를 담당해야 할 곳은 어디인가?
답 : Domain
기존에 도메인이 아닌, 서비스로 처리하던 방식을 트랜잭션 스크립트라 한다.
이 경우, 모든 로직이 서비스 클래스 내부에서 처리되는데, 이렇게 되면 서비스 계층이 무의미하며, 객체란 단순히 데이터 덩어리 역할만 하게된다.
반면, 도메인 모델에서 처리할 경우 서비스 메소드는 트랜잭션과 도메인 간의 순서만 보장한다.