서론
원래 처음 소개했어야 하는데 토비의 스프링 도서를 늦게 완독한 관계로 6번째에서 소개한다.
스프링?
스프링의 정의는 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크이다. 따라서 스프링 프레임워크(Spring Framework)가 더 정확한 표현이다.!
스프링의 주요 특징
스프링의 주요 특징은 다음과 같다.
- 경량 컨테이너로서 자바 객체를 직접 관리, 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하여 스프링부터 필요한 객체를 얻어 올 수 있음
- 영속성과 관련된 다양한 서비스를 지원. IBATIS, Hibernate 등 이미 완성도가 놓은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공함
- 확장성이 높음. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 쉬움
POJO (Plain Old Java Object)
- 별도의 API를 사용하지 않는 setter, getter 메서드로 이루어진 단순한 자바 오브젝트
- 순수한 자바 오브젝트이기 때문에 환경과 기술에 종속되지 않음
- 필요에 따라 재활용이 가능해짐
IoC
- 개발자가 애플리케이션을 제어하는 것이 아닌 스프링 프레임워크가 애플리케이션을 제어한다는 의미
- 라이브러리 vs 프레임워크
- 라이브러리는 개발자가 작성한 코드가 직접 제어의 흐름을 담당하는 것
- 프레임워크는 개발자가 작성한 코드를 제어하고, 대신 실행하는 것
DI
- 계층이나 서비스들 간에 의존성이 존재할 경우 스프링 프레임워크가 서로를 알아서 연결해줌
- 위임 관계에 있는 계층이나 서비스를 스프링 프레임워크가 적절한 빈을 주입하여 관리 - 제어의 역전과 연관
AOP
- 로깅, 보안, 트랜잭션 등 공통적인 부분이 있는 경우 분리해서 관리하는 프로그래밍 기법
- 즉, 공통적인 부분을 매번 코드를 작성하거나 추가할 필요가 없으므로 관리, 유지보수 용이
PSA
- 다양한 서비스를 추상화를 통해 Low Level의 기술 구현 부분과 기술을 사용하는 인터페이스를 분리
- 덕분에 우리는 애플리케이션을 개발할 때 내부적인 기술을 구현할 필요 없이 쉽게 사용 가능
ex) @Controller, @RequestMapping => 실제로는 내부에서 Servlet을 통해 동작하고, 우리는 그저 URL과 매핑해주고, DI로 여러 서비스 및 리포지토리 등 비지니스 로직에만 집중할 수 있다!