Spring Framewrok
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로 사용되고 있다.
<aside>
💡 **POJO(Plain Old Java Object) → 순수한 자바 오브젝트
- 특정 규약에 종속되지 않음
- 특정 환경에 종속되지 않음**
</aside>

POJO 객체들을 스프링으로 던져주면 설정들이 스프링을 관리해줌
- Configuration Metadata 즉, 기본 사전 설정을 기반으로 돌아감
- 설정은 xml, java, 어노테이션 방식(자바와 어노테이션 방식은 비슷)
스프링의 특징
- DI(Dependancy Injection / 의존성 주입)
- 설정 파일이나 어노테이션을 통해 객체간 의존 관계를 설정하여 개발자가 직접 의존 관계를 생성할 필요가 없음
- Spring AOP(관점 지향 프로그래밍)
- Database의 트랜잭션처리나 로깅처리와 같이 여러 모듈에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리하여 관리
- oop에서 aspect를 추가한 느낌
- aspect는 필터와 같은 개념으로 공통적으로 사용하는 기능을 빼낸 것, 필터와 비슷한 개념
- PSA
- MVC 디자인 패턴에서 Controller, Service, DAO 에서 직접적으로 연결하는 것이 아닌 인터페이스로 연결
- 예를 들어, Controller와 Service를 직접적으로 연결하는 것 보다 사이에 인터페이스를 구현하여 Controller는 Service의 부모격 인터페이스에 연결

<aside>
💡 Core Container
Spring의 근간이 되는 IoC(또는 DI) 기능을 지원하는 영역을 담당하고 있다.
BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원함.
</aside>