기록공간

Spring Framework 이해 본문

BackEnd/Spring

Spring Framework 이해

입코딩 2020. 12. 21. 21:37
반응형

 

 

개요

1. Framework?

어플리케이션을 구현하고 관리하는 환경 (, 약속)

 

2. Spring Framework?

설정 정보(XML, Annotation, ...)에 의해 어플리케이션을 구성하고, 객체를 생성, 관리하는 주체

 

스프링 프레임워크(Spring Framework)의 개념

스프링은 자바 엔터프라이즈 어플리케이션 개발에 사용되는 어플리케이션 프레임워크이다. 

어플리케이션 프레임워크는 에플리케이션 개발을 빠르고 효율적으로 할 수 있도록 어플리케이션의 바탕이 되는 공통 프로그래밍 모델, 그리고 API 등을 제공해준다.

 

1. 어플리케이션의 기본 틀 → 스프링 컨테이너 

 

스프링은 스프링 컨테이너 또는 어플리케이션 컨텍스트(application context)라고 불리는 스프링 런타임 엔진을 제공한다. 스프링 컨테이너는 설정 정보(XML, 배치 기술서)를 참고해서 어플리케이션을 구축하는 오브젝트(객체)를 생성하고 관리한다. 스프링 컨테이너는 독립적으로 동작할 수 있지만, 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용한다.

(설정 정보에 의해 어플리케이션을 구성하고 객체를 생성, 관리하는 주체)

 

스프링을 사용하려면 먼저 스프링 컨테이너를 다루는 방법과 스프링 컨테이너가 어플리케이션 오브젝트를 이용할 수 있도록 설정 정보를 작성하는 방법을 알아야 한다.

 

 

2. 공통 프로그래밍 모델 → IoC/DI, 서비스 추상화, AOP 

 

프레임워크는 어플리케이션을 구성하는 오브젝트(객체)가 생성되고 동작하는 방식에 대한 틀을 제공해 줄 뿐만 아니라 어플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준도 제시한다. 이것을 보통 프로그래밍 모델이라고 한다.

 

스프링에서는 세 가지 핵심 프로그래밍 모델을 제공한다.

 

① IoC/DI

IoC/DI는 오브젝트 생명 주기 의존 관계에 대한 프로그래밍 모델이다. 스프링은 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체 지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI를 프렘워크의 핵심 근간으로 삼고 있다. 스프링 프레임워크에서 동작하는 코드는 IoC/DI 방식을 따라 작성되어야 스프링이 제공하는 가치를 제대로 누릴 수 있다. 스프링이 제공하는 모든 기술과 API, 그리고 컨테이너까지도 IoC/DI 방식으로 작성되어 있다. 결국, IoC/DI는 스프링을 바르게 이해하고 효율적으로 사용하는데에 기본이 되며 가장 중요한 기술이다.

 

* IoC(Inversion of Control) : 제어의 역전

- 객체 관리(활용)의 주체

- 객체 생성과 관리를 직접 하는 것이 아닌 외부(컨테이너)에서 만들어진 오브젝트(객체)를 제공받는 입장이 되는 것
- Bean : 스프링이 관리하는 대상
- Bean Factory : 객체를 관리하는 주체. 
- Application Context : Bean Factory의 확장 버전으로 일반적으로 이것이 사용된다.
- 설정 정보 : 어떤 객체들이 관리 대상인지 설정한 정보. XML, Annotation 등을 이용하며 객체 의존관계도 기술되어 있다.
- IoC 컨테이너 : 객체를 등록하고 관리 및 활용하는 공간 또는 주체 (스프링 컨테이너)
* DI(Dependency Injection) : 의존성 주입(의존관계 주입)

- 객체를 관리(활용)하는 방법 (IoC가 일하는 방법)

- 자바에서 객체를 생성하고 관리하는 방법은 모두 has-a 관계를 통해 처리해 왔기 때문에 의존 관계가 치밀하고 밀접한 상황일 수 밖에 없었다. 이러한 강한 결합 상태는 유연성을 떨어뜨리는 결과를 초래한다. 이러한 결합 상태를 풀어주는(약화하는) 과정이 DI 이다.
- 의존관계 주입 : 의존 객체를 이 객체를 사용하는 객체에 외부에서 주입하는 상태(액션)
- 의존관계 : A 가 실행되기 위해서 B 를 필요로 하는 상태
- 의존객체 : A 입장에서의 의존객체는 B (즉, 주입되는 객체)

 

② 서비스 추상화 

스프링을 사용하려면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나고 유연한 어플리케이션을 만들 수 있게 된다. 이를 가능하게 해 주는 것이 바로 서비스 추상화이다. 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층(인터페이스)을 두는 방법이다.

 

③ AOP(Aspect Oriented Programming)

AOP는 어플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적인 상태로 모듈화하는 프로그래밍 모델이다. 스프링은 AOP를 이요해서 다양한 엔터프라이즈 서비스를 적용하고도 깔끔한 코드를 유지할 수 있게 해준다.

 

 

3. 기술 API

 

스프링은 엔터프라이즈 어플리케이션 개발의 다양한 영역에 바로 활용할 수 있는 방대한 양의 기술 API를 제공한다. UI 작성은 물론이고, 웹 프리젠테이션 계층, 비즈니스 서비스 계층, 기반 서비스 계층, 도메인 계층, 데이터 액세스 계층 등에서 필요한 주요 기술을 스프링에서 일관된 방식으로 사용할 수 있도록 지원해주는 전략 클래스를 제공한다.

 

스프링이 제공하는 API와 지원 기술은 모두 스프링 프로그래밍 모델에 따라 작성되었기 때문에 이를 가져다 쓰는 것만으로도 스프링 프로그래밍 모델을 모드에 자연스럽게 적용할 수 있다. 

 

스프링의 모든 기술은 표준 자바 엔터프라이즈 플랫폼(JavaEE)에 기반을 두고 있다. 표준 기술과 더불어 유명 오픈소스 기술과 주요 상용 기술에 대한 지원 기능 등을 다양하게 제공된다.

 

스프링 프레임워크의 주요 기능과 특징

  1. 경량 컨테이너 : 자바 객체를 담고, 이들 자바 객체의 생성과 소멸의 라이프 사이클을 관리

  2. DI(Dependency Injection) : 의존성(의존관계) 주입(삽입)을 지원. 설정 파일을 통해 객체간의 의존 관계를 정의

  3. AOP(Aspect Oriented Programming) 지원 : 관점(관심사) 지향 프로그래밍을 지원. 여러 모듈에서 공통적으로 쓰이는 기능을 분리하여 각 모듈에 적용하는 것이 가능

  4. POJO(Plane Old Java Object) 지원 : 가장 기본적인 자바 객체를 지원하여 기존 작성 코드의 유지성을 향상

  5. 트랜젝션 처리 : JDBC 나 JTA 를 사용하는 설정 파일을 통해 트랜잭션을 관리하여 동일한 코드를 여러 환경에서 사용하도록 하는 것이 가능

  6. 다양한 프레임워크와 조합 : myBatis(iBatis), Hivernate, Struts, Struts2, JAP, JDO, JWS, Quartz 등 다른 프레임워크 뿐 아니라 사용자가 만든 프레임워크와의 연동성을 제공

※ 스프링 프레임워크에서 가장 중요한 개념은 DI와 IoC!!

 

반응형
Comments