Develope Me!

[Spring] Spring Framework의 개념 - 정의, 기능, 특징 본문

Java/Spring

[Spring] Spring Framework의 개념 - 정의, 기능, 특징

코잘알지망생 2021. 9. 10. 00:14

Framework?


Spring Framework를 알아보기에 앞서 Framework 자체가 무엇인지에 대한 개념을 우선적으로 정리해야 한다.

Framework는 '뼈대, '구조'로 직역할 수 있는데 즉, 프레임 워크는 개발에 있어서 기본이 되는 뼈대나 구조를 제공한다.

따라서 프레임워크에 기반해서 애플리케이션을 개발하게 되면 여러 애플리케이션이 비슷한 구조를 가지게 되고 생산성이 향상되며 관리하기도 쉬워진다. 프레임 워크에는 Spring, Django, Ruby on Rails 등이 있는데 그 중에서도 현업에서 많이 사용된다는 Spring Framework에 대해 알아보고자 한다.

 

Spring Framework란?


Spring Framework는 객체를 관리해주는 빈 컨테이너 프레임 워크이다. 좀 더 자세히 설명하자면 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임 워크로서 엔터프라이즈 어플리케이션을 구축하는데 필요한 컴포넌트들을 제공한다. 또한 공공기관 웹 서비스 개발 시 사용을 권장하는 전자정부 표준 프레임 워크로도 사용되고 있다. 

 

 

Spring Framework 기능 및 특징


1. 크기와 부하의 측면에서 경량이다.

 

스프링은 단순 서버 환경(ex.톰캣)에서도 동작하며 빠르고 간편하게 애플리케이션을 개발할 수 있는 생산성이 뛰어난 프레임 워크다. 스프링 컨테이너는 자바 객체의 생성부터 소멸까지 전반적인 라이프 사이클을 관리하고 스프링 컨테이너로부터 필요한 객체를 검색해서 사용할 수 있다. 

 

 

2. DI(Dependency Injection) 기능을 지원한다.

 

스프링의 핵심적인 기능은 DI와 IOC이다. 이 중에서 DI를 풀어서 직역하면 '의존성 주입'이라고 하는데 직역만으로는 이해하는데에 한계가 있어서 dependency를 조립으로 비유해서 이해하고자 한다.

 

  Composition has a  Association has a
Dependency 조립 (1) class A{
   private B b;
   public A(){
     b=new B();
 }
}

class A{
   private B b;
   public A(){
 }
public void set B(B b){
  this.b=b;
 }
}
Dependency (2) A a = new A(); B b = new B();
A a = new A();
a.setB(b);

* 유튜브 '뉴렉처' 스프링 프레임 워크 강의 3강 DI 강의 참고

 

Dependency를 조립으로 가정했을 때 

Composition has a의 경우는 A가 B를 사용하기 위해서 A가 생성될 때 B를 생성해서 가진다.

즉, A가 b를 일체형으로 자기의 부품을 가지는 모습이다. B는 A의 부품으로서 종속 객체가 된다.

Dependency를 보자면 사용자의 입장에서는 a객체만 만들면 그 안에 어떤 부품이 들어있는 지 알기 힘들고 일체형이기 때문에 부품을 교체할 수도 없다는 것이다.

 

Association has a의 경우는 생성 작업을 외부에서 세팅하여 사용 가능한 모습을 보이고 있다. 

Dependency를 보자면 A가 가진 부품을 b에 준비해서 꽂아주기만 하면 되는데 외부에서 세팅되어 있는 것을 끌어와서 가져오는 모습인 것이다. 이러한 모습이 바로 Dependency Injection이다. 외부에서 세팅이 되어 있기 때문에 결합력이 낮아지면서 유지보수성은 증가하게 된다. 

 

좀 더 전문적으로 DI를 정의하자면 '객체간의 의존 관계를 객체 자신이 아닌 외부 컨테이너를 통해 설정하는 개념'인 것이다.

스프링은 1)Setter함수를 사용하거나 2) 생성자를 통해서 의존성을 주입 시켜주고 우리는 그 결과물을 사용하게 된다. 

 

 

3. IoC(Inversion of Control) 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.

 

IoC도 말로 풀어 설명하자면 '제어의 역전'을 의미한다. 

어플리케이션 개발 초기에는 자바 객체를 생성하고 의존 관계를 설정하는 제어권이 개발자에게 있었다면 이러한 제어권이 Container에게로 넘어갔다. 즉, 객체의 생성부터 소멸에 이르기 까지 모든 객체의 전 생명주기 관리에 대한 제어권이 넘어가게 됐다는 것이다. 

 

*Container라는 용어를 계속 사용하는데 비유하자면 주문서에 입력된 내용대로 객체를 생성해서 그 객체를 담을 수 있는 그릇이라 할 수 있다. 

*IoC 컨테이너는 조립/생성까지 다 해준다.

 

 

4. AOP(Aspect-Oriented Programming; 관점지향) 프로그래밍을 위한 풍부한 자원을 지원한다.

 

AOP는 문제를 바라보는 기준으로 프로그래밍하는 기법이다. 

문제를 해결하기 위한 핵심 관심 사항 및 공통 관심 사항을 기준으로 프로그래밍을 하며 공동 모듈을 여러 코드에 쉽게 적용할 수 있도록 한다. 객체 지향의 관점만으로는 해결할 수 없는 의존 관계의 복잡성과 코드 중복 문제를 해결하기 위한 개발 기법이라고 할 수 있다. 

 

5. 애플리케이션 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 일종의 Container라고 할 수 있다.

6. 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있다.

 

 

 

 

 

Comments