Spring Framework 정리
■ 개념
- 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
- 전자정부 표준프레임워크의 기반 기술
■ 특징
1. 제어 역전(IoC; Inversion of Control)
- 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용
(모든 작업을 사용자가 제어하는 구조)
- 반대로 제어 역전은 외부 라이브러리 코드가 개발자의 코드를 호출
- 즉, 제어권이 프레임워크에 있어서 필요에 따라 스프링 프레임워크가 사용자의 코드를 호출
> A객체가 new 생성자를 이용해서 A객체 내에 B객체를 생성했을 경우 A객체는 B객체와 의존 관계를 가진다.
* 의존성 주입(DI; Dependency Injection): 객체 간 의존 관계를 코드 내에서 정의하는 대신, 외부에서 의존성을 주입하는 것
- 의존성: 클라이언트에게 무슨 서비스를 사용할 것인지 알림
- 주입: 의존성(서비스)을 사용하려는 객체(클라이언트)로 전달하는 것
- A객체가 B객체를 사용(의존)하고자 할 때 외부(IoC Container*)에서 생성된 B객체를 매개변수 형태로 전달 받아 사용
- *컨테이너(객체를 담는 공간)는 객체의 생명주기를 관리, 생성된 인스턴스에게 추가적인 기능을 제공
- Spring Framework도 객체의 생성과 의존성을 관리는 컨테이너가 있는데 그것이 IoC Container(=Spring Container)
- 의존성 주입은 코드의 테스트 용이성을 향상
- 객체 간의 결합도를 낮추어 유지보수성과 확장성을 개선
- 코드의 재사용성을 높이고, 의존 관계의 변경에 유연하게 대처할 수 있는 장점을 제공
* Bean
- Spring IoC 컨테이너가 관리하는 자바 객체 (컨테이너에 의해 생명주기가 관리됨)
- 의존성 주입을 통해 객체 간 결합도를 낮춤
- 기본적으로 싱글톤(Singleton)으로 생성됨
2. POJO(Plain Old Java Object)
- 해당 프레임워크에 종속되어 있는 무거운 객체들을 만드는 것에 반발하며 나타난 용어
- 별도의 프레임워크 없이 Java EE(Enterprise Edition)를 사용할 때에 비해 특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기가 용이하고, 객체가 가볍다.
3. 관점 지향 프로그래밍(AOP; Aspect Oriented Programming)
- 여러 객체에서 공통적으로 사용하고 있는 기능을 분리해서 모듈화하고 재사용하는 프로그래밍 기법
- 핵심 기능과 공통 기능의 구현을 분리하여 핵심 기능의 코드 수정없이 공통 기능 적용 가능
4. MVC 패턴