Spring 웹 계층이란?
Web Layer(or Presentation Layer)
- 흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역
- 이외에도 필터(@Fitter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice)등 외부 요청과 응답에 대한 전반적인 영역을 이야기함
- 즉, 브라우저상의 웹 클라이언트의 요청 및 응답을 처리
Service Layer(or Business Layer)
- @Service에 사용되는 서비스 영역
- 일반적으로 Controller(Web Layer)와 Dao(Repository Layer)의 중간 영역에서 사용되어 두 계층이 직접적으로 통신하지 않게 함
- @Transactional이 사용되어야 하는 영역이기도 함
Repository Layer(or Data Access Layer)
- Database와 같이 데이터 저장소에 접근하는 영역
- Dao(Data Access Object)영역
- 즉, 데이터를 CRUD하는 계층으로 ORM을 주로 사용
DTOs
- DTO(Data Transfer Object)는 계층 간에 데이터 교환을 위한 객체를 이야기하며 Dtos는 이들의 영역
- 예를 들어 뷰 템플릿 엔진에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등
Domain Model
- 도메인이라고 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화시킨 것을 도메인 모델이라고 함
- 이를테면 택시 앱이라고 하면 배차, 탑승, 요금 등이 모두 도메인이 될 수 있음
- @Entity를 사용해봤다면 @Entity가 사용된 영역 역시 도메인 모델
- 다만, 무조건 데이터베이스의 테이블과 관계가 있어야만 하는 것은 아님
- 비지니스 로직 처리 담당
spring MVC
출처 : https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html
DAO(Data Access Object)
- 실제 DB에 접근해 데이터를 조회하거나 조작하는 기능을 담당하는 객체
- Service 계층과 DB를 연결하는 고리 역할을 함
DTO(Data Transfer Object)
- 각 계층간 데이터를 이동(Transfer)하기 위한 객체
- DTO는 로직을 갖고 있지 않는 순수한 데이터 객체임
- 일반적으로 getter/setter 메서드만을 가짐
Controller
- Client의 요청을 DTO의 형태로 받아 Service의 기능을 호출, 적절한 응답을 DTO 형태로 반환하는 역할
- 즉, 요청과 응답을 관리하는 계층
Service
- DTO를 통해 받은 데이터를 이용해 비지니스 로직 처리
- DAO(or Repository)를 통해 DB에 접근하여 데이터를 관리하는 역할
Entity class
- Domain이라고 부름(JPA 사용할 때 사용)
- 실제 DB테이블과 매칭될 클래스
- Entity 클래스 또는 가장 core한 클래스라고 부름
- Domain 로직만을 가지고있어야 하며 Presentation Logic을 가지고 있어서는 안됨
참고
스프링 부트와 AWS로 혼자 구현하는 웹 서비스
https://devlog-wjdrbs96.tistory.com/209