Spring

[Spring] Spring 프레임워크의 특징

Rosie_dev 2021. 10. 31. 21:34

 

 

" 오브젝트 생명주기와 의존관계에 대한 프로그래밍 모델 "

 

정부표준 프레임워크로도 사용되며, 자바 기반의 서비스가 많이 구축되어 있는 국내 그리고 해외에서 유용하게 사용되기 때문에 Spring은 중요하다.

 

 

1. 오픈소스 프레임워크

자바 애플리케이션 개발을 위해 Spring 프레임워크 개발자들이 개발, 구축해나가는 시스템이다.

 

 

2. 경량 컨테이너로서 자바 객체를 관리

여기서 스프링 컨테이너란 자바 객체(빈)의 생명주기를 관리하며, 객체들에 추가적인 기능을 제공하는 역할을 한다.

스프링 컨테이너는 BeanFactory와 ApplicationContext가 있다.

BeanFactory는 빈을 등록하고 생성, 조회 등 빈을 관리하는 역할을 한다. 

ApplicationContextBeanFactory와 같이 빈을 관리할 수 있는데, ListableBeanFactory, HierarchicalBeanFactory의 상속을 받았기 때문이다.  초기화 시점에 모든 싱글톤 빈을 로드 후 애플리케이션 가동 후 빈을 지연없이 받을 수 있다는 점에서 차이가 있다.

 


" 이제 봄(Spring)의 대삼각형을 알아보자. "

스프링을 구성하는 주요 3대 요소는 AOP, PSA, IoC / DI 가 있다. 하나하나 살펴보자.


 

+ POJO (Plain Old Java Object)

오래된 방식의 자바 오브젝트로서, Java EE 등 중량 프레임워크를 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용하게 된 용어(조지 멕켄지)이다. 즉, 순수 자바 객체를 의미한다. 특정 프레임워크의 기술에 종속되지 않은 자바 객체인 것이다.

 

토비의 스프링에서는 "진정한 POJO란 객체 지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다." 라고 표현하고 있다. 

 

여기서 POJO를 위해서 미리 지정된 클래스 상속하거나, 인터페이스 구현, 어노테이션을 포함하는 것을 하지 않아야 한다. 즉, 자바의 객체 지향적인 특징을 살려 비즈니스 로직에 충실한 개발이 가능하도록 하는 것을 의미한다. 인프라 로직을 줄임으로써 유지보수 관리를 유용하게 한다.

 

 

3. 제어 역행(IoC, Inversion of Control)과 의존성 주입(DI, Dependency Injection)

객체의 생명주기를 관리하므로 즉, 제어 흐름을 외부에서 관리하는 것이라고 말할 수 있다. 애플리케이션의 느슨한 결합을 도모하며, 컨트롤 제어권이 프레임워크에 있다. 

 

대부분의 프레임워크에서 사용하는 방법으로, 개발자에 의해 추가된 코드들을 프레임워크에서 결정된 바에 따라 움직이게 된다. 이렇게 제어의 역행이 일어날 때, 어떠한 객체가 하려는 일은 다른 객체의 도움을 받아야하는 의존적 관계를 취한다. 스프링에서는 이런 의존성까지 주입을 해주기 때문에 개발자가 필요한 객체를 스프링 통해 주입받아 사용하게 된다.

 

의존성 주입부분에서 구체적인 사례로 들 수 있는 것은 @Autowired(스프링 기반), @Resource라는 어노테이션이다.  

 

 

4. AOP(Aspect-Oriented Programming) 지원

한 가지 코드를 작성하고 이 코드를 여러 클래스에서 사용해야 할 때 중복을 줄이기 위해서는 어떻게 해야 할까? 

 

스프링에는 AOP를 지원한다. Aspect는 하나의 모듈이고 Advice(해야할 일)과 Pointcut(적용점)으로 구분된다.  Java AOP 구현체로 AspectJ가 있는데 다양한 Join point와 많은 기능을 제공한다. 

 

스프링은 관점 지향 프로그래밍으로 프록시 기반 AOP를 지원한다. 여기서 프록시(Proxy) 패턴이란 원래 해야할 일을 가지고 있는 객체를 Proxy가 감싸서 실제 클라이언트의 요청을 처리해야 한다는 것이다. 

AOP 사용을 위해서는 pom.xml에 dependency로 의존성을 추가해야한다.

 

* AOP는 OOP를 보안하는 개념이다.

 

5. PSA (Portable Service Abstraction)

@Transactional 어노테이션과 같이 별도의 코드없이 트랜잭션 서비스를 사용할 수 있게 하는 것이 추상화 되어 있고 이 편의성을 제공하는 것이 바로 서비스 추상화이다. 그리고 이런 추상화를 이용해서 여러 서비스를 묶어둔 것을 PSA라고 합니다. 

 


소프트웨어 프레임워크 - 위키백과, 우리 모두의 백과사전

https://www.playnexacro.com

스프링의 특징 :: 개발자인듯 개발자아닌듯

스프링 프레임워크 3 - DI (Dependency Injection, 의존성 주입)

[10분 테코톡] 👨‍🔧유안의 Spring IoC/DI - YouTube

[스프링SPRING]제어의 역행(IoC)과 의존성 주입(DI) - 야망찬 개발자의 블로그

0. Spring의 주요 특징

[스프링SPRING]제어의 역행(IoC)과 의존성 주입(DI) - 야망찬 개발자의 블로그

[Spring] 스프링 컨테이너와 빈이란?

 

 

 

댓글