스프링 프레임워크란, Java를 사용한 프레임워크이다.
간단히 스프링(Spring) 이라고도 하며, 동적인 웹 사이트를 개발하기 위해 여러가지 서비스를 제공한다.
스프링의 3대 특징을 나타낸 삼각형이다.
스프링은 POJO를 기반으로 AOP, PSA, Ioc/DI 특징을 가진다.
말 그대로 평범한 자바 오브젝트이다.
이전 EJB(Enterprise JavaBeans)는 확장 가능한 재사용이 가능한 로직을 개발하기 위해 사용 되었었는데 EJB는 한가지 기능을 위해 불필요한 복잡한 로직이 과도하게 들어가는 단점이 있었습니다.
따라서 다시 조명을 받은게 POJO이다.
POJO는 getter/setter를 가진 단순 자바 오브젝트를 정의한다.
이러한 단순 오브젝트는 의존성이 없고 추후 테스트 및 유지보수가 편리한 유연성의 장점을 가진다.
관심사의 분리라는 중요한 개념이다.
프로그램을 아래 두 가지 관점에서 바라보겠다는 뜻이다.
관심사를 분리하여 무분별하게 중복되는 코드를 한 곳에 모아 중복 코드를 제거할 수 있고 공통기능을 한 곳에 보관함으로써 공통 기능 하나의 수정으로 모든 핵심기능들의 공통기능을 수정할 수 있어 효율적인 유지보수가 가능하며 재활용성이 극대화된다.
이전에는 코드 관리는 오로지 개발자의 일이었다.
객체의 생성부터 소멸까지의 라이프사이클 제어권은 개발자가 갖고있었다.
즉, 모든 작업을 사용자가 제어하는 구조였다.
그런데 개발자가 프레임워크 API를 사용하면서 설정파일을 통해서 객체의 라이프사이클, 클래스 등을 프레임워크가 직접 제어하게 되었다.
즉, 개발자가 직접 제어하는 부분을 프레임워크가 대신 제어하게 되었다.
이걸 제어의 역전이라고 한다.
의존성 주입이란 객체가 서로 의존하는 관계가 되게 의존성을 주입하는 것이다.
A클래스에서 B클래스에 있는 기능을 사용하는것
여기서 B클래스가 의존하는 객체가된다.
쉽게 설명하자면 의존하는 객체를 직접 생성(new)하지 않고, 스프링 컨테이너에서 의존하는 객체를 전달(주입) 받는 것이다.
여기서 스프링 컨테이너가 객체의 라이프사이클을 관리하는 역할을 하며, 스프링 컨테이너가 관리하는 객체들을 빈(Bean)이라고 한다.
스프링 라이브러리는 POJO를 쓰기 위해서 PSA 형태로 추상화 되어있다.
POJO를 사용하면서 다른 기능을 쓰기 위해서 중간 역할을 해주는것이 필요한데 그게 어노테이션 (annotation)이다.