관심사의 분리(Seperation Of Concerns) 때문
계층을 나누지 않으면 작성한 코드에 뭔가 문제가 있어서 수정을 해야할 때, 전체를 수정해야하거나 어디를 수정해야할지 모를 수 있다.
Layer를 나누는 방식은 여러가지가 있지만, 일반적으론 Web Layer, Service Layer, Repository Layer로 구성한다.

Application의 최상위 Layer
Client의 요청(Request)을 받고, 응답(Response)을 주는 역할 (i.e. Controllers)
하위 Layer에서 발생한 예외들을 처리하여 적절한 응답(Response)을 줌 (i.e. Exception Handlers)
인증과 인가 처리를 담당 (i.e. Filters)
Web Layer 하위에 존재하는 Layer
트랜잭션(Transaction) 경계의 역할
Application Service와 Infrastructure Service로 나뉜다.
요청의 처리에 대한 주요 비즈니스 로직을 담당
최종적으로 응답을 WebLayer에 넘겨주는 역할
데이터 베이스, 이메일 서버 같은 외부 서비스와 통신하는 역할.
Application Service에서 Infrastructure Service를 사용
가장 하위에 존재하는 Layer
데이터베이스와 통신하는 역할 담당