
Spring Framework 애플리케이션은 유지 보수와 확정성을 위해 여러 계층으로 나뉘어 설계합니다.
계층은 크게 Presentation Layer, Business Layer, Data Access Layer로 3개(3-Tier Architecture)로 나눌 수 있습니다.

그림을 한 줄로 요약하자면 사용자가 요청을 보내을 때, Controller -> Service -> Repository -> DB로 흘러가고, 결과는 다시 반대 방향으로 되돌아온다로 정리할 수 있습니다.
표현 계층은 사용자 요청을 가장 먼저 받는 입구입니다. 사용자가 보낸 요청을 확인해서, 적절한 서비스(Service)에게 처리를 맡깁니다.
구체적으로 설명해보자면,
@Controller 어노테이션을 사용하여 작성된 Controller 클래스가 Presentation Layer에 속합니다.
Business Layer는 핵심 업무를 처리하는 계층입니다. 요청에 맞게 필요한 작업을 설계하고 지시하죠. 처리하는 과정에서 필요한 데이터가 있다면 Data Access Layer에 요청을 보냅니다.
Service 인터페이스와 @Service 어노테이션을 사용하여 작성된 Service 구현 클래스가 해당 계층에 속합니다.
Data Access Layer는 실제 데이터베이스와 연결되는 계층입니다. 예전에는 DAO 클래스를 따로 만들었지만, 지금은 JPA의 @Repository 어노테이션을 주로 이용하고 사용하고 있습니다.
DAO 인터페이스와 @Repository 어노테이션을 사용하여 작성된 DAO 구현 클래스가 해당 계층에 속합니다.
DB의 테이블과 매칭될 클래스를 작성하는 계층입니다.
Domain 로직만을 가지고 있어야하며 Presentation Logic을 가지고 있어서는 안됩니다. (사용자 요청 받기 등)
@Entity 어노테이션을 이용하여 작성된 클래스가 해당 계층에 속합니다.