본문 바로가기

콩's EDUCATION/콩's TERMINOLOGY

Spring Framework


 

 

   스프링 프레임워크란?

 

Spring Framework는 엔터프라이즈급 애플리케이션을 만들기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션입니다. JEE(Java Enterprise Edition)가 제공하는 다수의 기능을 지원하고 있기 때문에, JEE를 대체하는 프레임워크로 자리잡고 있고 실제로 Spring 프레임워크는 JEE가 제공하는 다양한 기능을 제공하는 것 뿐만 아니라, DI(Dependency Injection)나 AOP (Aspect Oriented Programming)와 같은 기능도 지원 합니다.

 

 

1. 경량컨테이너

- 스프링은 자바객체를 담고 있는 컨테이너이다. 스프링 컨테이너는 이들 자바 객체의 생성과 소멸과 같은 라이프사이클을 관리하고, 언제든지 스프링 컨테이너로 부터 필요한 객체를 가져와 사용할 수 있다.


2. DI(Dependency Injection – 의존성 지원) 패턴 지원

- 스프링은 설정파일이나, 어노테이션을 통해서 객체간의 의존 관계를 설정할 수 있다. 따라서, 객체는 의존하고 있는 객체를 직접생성하거나 검색할 필요가 없다.


3. AOP(Aspect Oriented Programming – 측면 지향 프로그래밍) 지원

- AOP 는 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법이다. 이는 문제를 해결하기 위한 핵심관심 사항과 전체에 적용되는 공통관심 사항을 기준으로 프로그래밍 함으로서 공통모듈을 여러 코드에 쉽게 적용할 수 있도록 한다. 스프링은 자체적으로 프록시 기반의 AOP를 지원하므로 트랜잭션이나, 로깅, 보안과 같이 여러 모듈에서 공통으로 필요로 하지만 실제 모튤의 핵심은 아닌 기능들을 분리하여 각 모듈에 적용이 가능하다.


4. POJO(Plain Old Java Object – 특정 인터페이스 또는 클래스를 상속하지 않는 일반 자바 객체) 지원

- POJO는 일반적인 자바 객체를 말한다. 스프링 컨테이너에 저장되는 자바객체는 특정한 인터페이스를 구현 하거나, 클래스 상속 없이도 사용이 가능하다. 일반적인 자바 객체를 칭하기 위한 별칭 개념이다.


5. IoC(Inversion of Control – 제어의 반전)

- IoC는 스프링 프레임워크가 갖고 있는 핵심적인 기능이다. 본디 자바의 객체 생성 및 의존관계에 있어 모든 제어권은 개발자에게 있었다. 하지만, 서블릿과 EJB가 나타나면서 기존의 제어권이 서블릿 컨테이너 및 EJB컨테이너에게 넘어가기 된다. 하지만 모든 객체의 제어권이 넘어간 것은 아니고 서블릿, EJB에 대한 제어권을 제외한 나머지 객체 제어권은 개발자들이 담당하고 있다. 스프링 프레임워크에서도 객체에 대한 생성과 생명주기를 관리할 수 있는 기능을 제공하고 있는데 이런 이유로 스프링 컨테이너[Spring Container] 또는 IoC 컨테이너 라고 부르기도 한다.


6. 스프링은 트랜젝션 처리를 위한 일관된 방법을 제공한다

- JDBC를 사용하든 JTA를 사용하든, 또는 컨테이너가 제공하는 트랜젝션을 사용하든, 설정파일을 통해 트랜젝션 관련정보를 입력하기때문에 트랜젝션 구현에 상관 없이 동일한 코드를 여러 환경에서 사용이 가능하다.


7. 스프링은 영속성과 관련된 다양한 API를 지원한다.

- 스프링은 JDBC를 비롯하여 iBatis, 하이버네이트, JPA등 DB처리를 위해 널리 사용되는 라이브러리와 연동을 지원하고 있다.


8. 스프링은 다양한 API에 대한 연동을 지원한다.

- 스프링은 JMS, 메일, 스케쥴링등 엔터프라이즈 어플리케이션 개발에 필요한 다양한 API를 설정파일과 어노테이션을 통해서 손쉽게 사용할 수 있도록 지원하고 있다.






[스프링 프레임워크 모듈 구성]



 




 

 

   스프링을 쓰는 이유

 

자바로 개발을하면 스케일이 엄청나게 큰게 사실입니다. 앞으로도 스케일이 점점 커지게 될꺼고 그렇게 되면 프로젝트 규모도 커지게 됩니다 따라서 많은 개발자들이 한 프로젝트에 투입하게 되고 많은 개발자들이 서로 분할하여 개발을 하다보면 중복되는 부분도 많고 또 복잡해집니다 스프링은 이런 개발자들을 편하게 작업을할수있는 환경을 만들어주는 오픈소스 프레임 워크입니다. 

 

*오픈소스 : 특별한 라이센스없이 사용이 가능한 개발소스

*프레임 워크 : 좀더 개발이 용이하도록 공통 클레스를 만들어 묶어놓은 것

 

정리

 

스프링 프레임워크 주요 특성중 DI와 AOP(관점 지향 프로그래밍 (Aspect-Oriented Programming)의 예시

 

DI (Dependency injection;의존성 주입) : a.java, b.java에서 a 클래스의 객체를 b에서 생성하고자 하는데, a 클래스 내용이 변경되면 b도 다시 객체를 수정해줘야 합니다. 하지만, 이 종속성 부분을 xml 혹은 annotation을 통해 따로 정의해두면 변화에 상관없이 개별적으로 클래스 테스트를 할 수 있습니다.

 

AOP : 은행 애플리케이션에서 이체를 하게 되면 보안, 로그, 인증 단계와 같은 공통 단계를 거칩니다. 조회를 할 때도 마찬가지로 위와 같은 공통단계를 거칩니다. 이 점이 바로 AOP입니다. 기본 이체, 조회와 같은 중심 기능을 따로 보안, 로그, 인증과 같은 공통 처리 단계에 대한 코드를 따로 두어 이를 쉽게 처리함을 목적으로 합니다.