티스토리 뷰

Spring

스프링(Spring)의 주요 특징

토마's 2016. 10. 19. 22:11

안녕하세요. 오늘은 스프링의 주요 특징에 대해서 포스팅 해보려고 합니다.

물론, 많은 분들이 알고 계시지만 저와 같은 초급 개발자들은 개발을 하면서도 스프링의 특징 또는 구성 등을 자주 잊어버리기 

때문에 제가 다시 잊을만하면 제 블로그 들어와서 공부를 하기 위해 포스팅으로 남깁니다. 저와 같은 다른 분들도 혹시 참고가 

되신다면 좋을 것 같습니다.


스프링의 주요 특징


- POJO 기반의 구성

- 의존성 주입(DI)을 통한 객체 간의 관계 구성

- AOP(Aspect-Oriented-Programming) 지원

- 편리한 MVC 구조

- WAS에 종속적이지 않은 개발 환경


POJO 기반의 구성


스프링 자체가 경량 프레임워크지만, 스프링 내부에는 객체 간의 관계를 구성할 수 있는 특징을 가지고 있습니다.

다른 프레임워크와는 달리 이 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성만으로도 

가능하도록 제작되어 있습니다.

따라서, 일반적인 Java코드를 사용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있습니다.

이것이 중요한 이유는 '개발자가 특정한 라이브러리나 컨테이너에 종속적이지 않다'라는 것을 의미하는 것이기 때문입니다.

생산성에도 유리하고 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다고 생각하시면 됩니다.


의존성 주입(DI)을 통한 객체 간의 관계 구성


'스프링'이라고 하면 의존성 주입(Dependency Injection)과 IOC(Inversion Of Control - 제어의 역행)이 떠오릅니다.

IOC는 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미합니다.

스프링은 그 자체가 '구조를 설계할 수 있도록 만들어 졌다'는 뜻으로, 개발자가 부품을 만들어 조립하는 형태의 개발이 가능하다는

것을 의미합니다.


IOC는 간단하게 말하여 프로그램의 제어 흐름 구조가 바뀌는 것입니다.

일반적으로, main() 같은 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정, 생성하고, 만들어진 오브젝트 내의 메소드를

호출하는 작업을 반복합니다. 이런 구조에서 각 오브젝트는 프로그램 흐름을 결정하거나 사용할 오브젝트를 구성하는 작업에 능동적으로

참여합니다. 즉, 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조입니다.


이에 반하여 IOC는 제어 흐름의 개념을 거꾸로 뒤집습니다. 오브젝트는 자신이 사용할 오브젝트를 스스로 생성하거나 선택하지 않습니다.

그리고 자신이 어떻게 만들어지고 어디서 사용되는지 알 수 없습니다. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하는 것입니다.

프로그램의 시작을 담당하는 main()과 같은 엔트리 포인트를 제외하면 모든 오브젝트는 이런 방식으로 위임받는 제어 권한을 갖는 특별한

오브젝트에 의해 결정되고 만들어지는 것입니다.


IOC를 아래와 같이 요약해 볼 수 있습니다.

- 작업을 수행하는 쪽에서 Object를 생성하는 제어 흐름의 개념을 거꾸로 뒤집는다.

- IOC에서는 Object가 자신이 사용할 Object를 생성하거나 선택하지 않는다.

- 또한 Object는 자신이 어떻게 생성되고 어떻게 사용되는지 알 수없다.

- 모든 Object는 제어 권한을 위임받는 특별한 Object에 의해서 만들어지고 사용된다.


의존성 주입은 IOC(제어의 역행)이 일어날 때 스프링이 내부에 있는 객체들(Bean) 간의 관계를 관리할 때 사용하는 기법입니다.

의존성(Dependency)이라는 용어는 어떤 객체가 혼자 일을 처리할 수 없다는 것을 의미합니다. 외부에서 필요한 객체를 결정하기 때문에 

개발자는 의존적인 객체들과의 관계를 직접 처리할 필요가 없고, 인터페이스를 활용해서 유연한 구조를 사용할 수 있습니다.

스프링은 의존성 주입을 프레임워크에서 처리하기 때문에 개발자는 자신이 만드는 객체나 클래스 외에는 신경 쓰지 않고 코드를 만들고,

자신의 코드에 필요한 객체는 스프링을 통해서 주입받는 구조로 작성됩니다.


의존성 주입의 종류


1) 생성자를 통한 주입

2) set 메소드를 이용한 주입

두 방식 모두 사용할 수 있고, 이에 대한 처리 역시 간단한 어노테이션만으로 처리할 수 있습니다.


AOP(Aspect-Oriented-Programming) 지원


좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다.'입니다.

몇 가지 중요한 원칙들이 있겠지만, 가장 쉽게 생각할 수 있는 것이 '반복적인 코드의 제거'라고 할 수 있습니다.

스프링 프레임워크를 이용한 개발에도 이러한 반복적인 코드를 줄이고, 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공합니다.


반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사'라고 하며 스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능합니다.

AOP(Aspect-Oriented-Programming)는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임입니다.


스프링은 AOP를 AspectJ의 문법을 통해서 작성할 수 있는데 이를 통해서

1) 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있습니다.

2) 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화 시킬 수 있습니다.

3) 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있습니다.


트랜잭션의 지원


데이터베이스를 이용할 때 반드시 신경써야 할 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리입니다.

스프링은 이런 복잡한 트랜잭션의 관리를 어노테이션이나 XML을 통해 설정할 수 있기 때문에 개발자가 매번 상황에 맞는 코드를 작성할 수

없도록 설계되어 있습니다.


출처 및 참조 : 코드로 배우는 스프링 웹 프로젝트 책

참조 블로그 : http://isstory83.tistory.com/91


이것으로 스프링의 주요 특징에 대한 포스팅을 마치겠습니다. 더욱 자세한 것을 알고 싶으신 분의 위의 링크를 통해 책 또는 블로그를 통해

검색해보시면 됩니다 :)