소프트웨어 개발을 위한 기본적인 틀과 구조를 제공하는 도구, 개발자가 반복적으로 해야 하는 작업을 줄이고, 핵심 비즈니스 로직에 집중할 수 있게 해준다.
특별한 제약이나 규칙에 종속되지 않는 자바 객체를 의미.
제어의 역전이라고 하며, 객체의 생성과 생명주기를 개발자가 아닌 프레임워크가 관리.
관점 지향 프로그래밍으로, 공통 관심사를 분리하여 모듈화하는 프로그래밍 패러다임.
graph LR;
classDef default fontSize:14px;
client(["Client"]):::client --"1. Request"--> DispatcherServlet
DispatcherServlet --"2."--> HandlerMapping["Handler\\nMapping"]
DispatcherServlet --"3."--> HandlerAdapter["Handler\\nAdapter"]
HandlerAdapter --"4."--> Controller["Controller"]
Controller --> Service["Service\\n(Business Logic)"]
Service --> Repository["Repository\\n(Data Access)"]
Repository --> DB[("Database")]
DB --> Repository
Repository --> Service
Service --> Controller
Controller --"5. viewname"--> HandlerAdapter
DispatcherServlet --"6."--> ViewResolver["View\\nResolver"]
ViewResolver --"7."--> View["View"]
View --"8. Response"--> client
style HandlerMapping fill:#666666,color:#ffffff,width:120px,height:60px
style HandlerAdapter fill:#666666,color:#ffffff,width:120px,height:60px
style DispatcherServlet fill:#666666,color:#ffffff,width:150px,height:60px
style ViewResolver fill:#666666,color:#ffffff,width:120px,height:60px
style Controller fill:#666666,color:#ffffff,width:120px,height:60px
style View fill:#666666,color:#ffffff,width:120px,height:60px
style Service fill:#666666,color:#ffffff,width:120px,height:60px
style Repository fill:#666666,color:#ffffff,width:120px,height:60px
style DB fill:#666666,color:#ffffff,width:100px,height:60px
style client fill:#666666,color:#ffffff,width:100px,height:60px
Handler Mapping
Handler Adapter
View Resolver