스프링의 특징
스프링 프레임워크 (Spring Framework) 는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring) 이라고 불립니다. 동적인 웹 사이트 개발을 위한 여러가지 서비스를 제공하고 있습니다. 스프링은 다른 프레임워크에 비해 다음과 같은 특징을 가지고 있습니다.
경량 컨테이너
로써 자바 객체를 직접 관리합니다 각각의 객체 생성, 소멸과 같은라이프 사이클
을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있습니다.- Spring Bean 의 scope 는 singleton, prototype, request, session, global session 중 기본적으로 singleton 으로 설정되며 필요에 따라 변경이 가능합니다.
- Spring Bean 의 기본 scope 는 singleton 입니다. 이 때 Spring IoC container 는 해당 Spring Bean 객체의 인스턴스를 정확히 하나만 만들게 되며 만들어진 인스턴스는 singleton bean 의 캐시에 저장되어 이후의 모든 요청 및 참조는 캐시된 object 가 반환됩니다.
POJO(Plain Old Java Object)
방식의 프레임워크입니다. 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍습니다.- POJO : 말 그대로 오래된 방식의 간단한 자바 오브젝트 라는 의미. 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용됩니다. 자바 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 오브젝트라고 할 수 있습니다.
- POJO : 말 그대로 오래된 방식의 간단한 자바 오브젝트 라는 의미. 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용됩니다. 자바 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 오브젝트라고 할 수 있습니다.
- 스프링은
DI(의존성 주입. Dependency Injection)
을 지원합니다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줍니다.- DI : 프로그래밍에서 구성요소간의 의존관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴 중 하나입니다.
- DI 사용시의 이점
- 의존관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈들간의 결합도를 낮출 수 있습니다.
- 코드 재사용을 높여 작성된 모듈을 여러 곳에서 소스코드의 수정 없이 사용할 수 있습니다.
- 모의 객체 등을 이용한 단위 테스트의 편의성을 높여줍니다.
- DI 적용 유형
- 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입받습니다.
- 세터(Setter) 를 통한 주입 : 의존성을 입력받는 Setter 메소드를 만들고 이를 통해 의존성을 주입받습니다.
- 인터페이스(Interface) 를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 실행시에 이를 통하여 의존성을 주입합니다.
- 스프링은
AOP(관점 지향 프로그래밍. Aspect-Oriented Programming)
을 지원합니다. 따라서 트랜젝션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있습니다.- AOP : 관점 지향 프로그래밍은 횡단 관심사(Cross cutting concerns) 들을 Aspect 로 캡슐화 함으로써 모듈화를 갖는 것을 목표로 합니다. 이를 통해 횡단 관심사를 해결하는 코드의 깨끗한 분리와 재사용을 달성할 수 있게 합니다.
- 횡단 관심사(Cross cutting concerns) : 횡단 관심사들은 수많은 다른 부분에 의존하거나 영향을 미쳐야 하는 프로그램의 일부분을 말합니다. 이러한 횡단관심사들은 객체 지향 프로그래밍, 절차적 프로그래밍에 딱 들어맞지 않습니다. 이를 해결하기 위해 AOP 개념이 도입되었습니다.
- 횡단 관심사의 예 : 동기화, 실시간 제약조건, 오류 검출 정정, 제품 기능, 메모리 관리, 자료 검증, 퍼시스턴스, 트랜잭션 처리, 국제화와 지역화, 정보 보안, 캐시 처리, 로깅, 모니터링, 비즈니스 룰, 코드 이동성, 도메인 특화 최적화 등
- 스프링은
영속성
과 관련된 다양한 서비스를 지원합니다. iBATIS 나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공합니다.- 영속성 Persistence (지속성이라고도 한다.) : 프로세스가 생성했지만 별개로 유지되는 상태의 특징 중 한가지이며 별도의 기억장치에 데이터를 보존하는 것을 목적으로 합니다. 영속성으로 인해 프로그래머는 저장장치로부터 데이터를 전송하는 작업 및 자료구조 등을 이용해 데이터를 보존하는 것이 가능합니다.
- 영속성 Persistence (지속성이라고도 한다.) : 프로세스가 생성했지만 별개로 유지되는 상태의 특징 중 한가지이며 별도의 기억장치에 데이터를 보존하는 것을 목적으로 합니다. 영속성으로 인해 프로그래머는 저장장치로부터 데이터를 전송하는 작업 및 자료구조 등을 이용해 데이터를 보존하는 것이 가능합니다.
- 스프링은
확장성
이 높습니다 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이합니다.