최근 스프링을 통한 웹개발에 대해 공부를 하면서 (스프링 부트와 AWS로 혼자 구현하는 웹 서비스) 웹을 구성하는 각 기능들을 어떤 layer에 넣어야하는 지에 대해 알아보았다.
우선, Spring의 웹 계층에 대해 살펴보면,

Web Layer
- 컨트롤러(**@Controller**)와 **JSP/Freemaker** 같은 뷰 템플릿이 들어있는 영역
- **@Filter, 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice**) 등 외부 요청과 응답에 대한 영역
Service Layer
- **@Service**에 사용되는 서비스 영역
- 일반적으로 Controller와 Dao의 중간 영역에서 사용
- **@Transactional**이 사용돼야 하는 영역
Repository Layer
- Database와 같이 데이터 저장소에 접근하는 영역
- Data Access Object영역
DTOs
- Data Transfer Object는 **계층 간에 데이터 교환을 위한 객체**를 이야기하며, DTOs는 이들의 영역
- 뷰 템플릿 엔진에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등이 해당
Domain Model
- 도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 또 공유할 수 있도록 단순화시킨 것을 도메인 모델.
- 택시앱이라고 하면 배차, 탑승, 요금 등이 모두 포함될 수 있다.
- **@Entity**가 사용된 영역 역시 도메인 모델