내 세상

[Spring] Spring in Action, Chapter 1. 스프링 속으로 본문

Technical/Spring

[Spring] Spring in Action, Chapter 1. 스프링 속으로

sga8 2019. 7. 30. 14:41
728x90
반응형

스프링 프레임워크

  • 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크
  • Spring, 스프링
  • J2EE 애플리케이션 개발을 위한 책의 예제를 작성하면서 사용했던 프레임워크들을 발전시켜 지금에 이름.
  • 자바 엔터프라이즈 개발을 편하게 해 주는 오픈 소스 경량급 애플리케이션 프레임 워크
  • “JEE 애플리케이션 개발을 더 쉽게 만들겠다.”는 대단히 명확한 목적으로 만들어짐

 

자바 복잡도 간소화를 지원하기 위한 스프링의  가지 주요 전략

  • POJO를 이용한 lightweight하고, non-invasive한 개발
    • Non-invasive : 바탕이 되는 기술을 사용하는 클래스, 인터페이스, API 등을 코드에 직접 나타내지 않는 방법. 복잡함을 분리할 수 있음.
  • DI와 Interface Orientation을 통한 loose coupling
  • Aspect와 공통 규약을 통한 declarative 프로그래밍
  • Aspect와 template을 통한 반복적인 코드 제거

 

POJO 

  • 스프링은 API를 이용하여 애플리케이션 코드의 분산을 가능한 막는다.

 

Dependency Injection : 컴포넌트의 결합도를 낮춰줌

  • 여러 객체는 협력하는 객체에 대한 Reference를 얻을 책임이 있음. 그 결과, 결합도가 높아지고 테스트하기 힘든 코드가 만들어짐.
  • Wiring(와이어링) : 애플리케이션 컴포넌트 간의 관계를 정하는 것 (일반적으로 XML 이용)

<bean id=”knight” class=”com.skcc.knight”>

<constructor-arg ref=”quest”>

</bean>

<bean id=”quest” class=”com.skcc.SlayDragonQuest”>

<constructor-arg value=”#{T(System).out}”/>

</bean>

 

  • XML 기반의 설정이든 자바 기반의 설정이든 DI의 이점은 동일함.
  • Application Context
    • Bean에 관한 정의들을 바탕으로 Bean들을 엮어줌.
    • 애플리케이션을 구성하는 객체의 생성과 Wiring을 전적으로 책임짐.

 

Aspect 적용 : 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용할 수 있는 컴포넌트에 담음

  • 소프트웨어 시스템 내부의 관심사들을 서로 분리(separation of concerns)하는 기술
  • 여러 개의 컴포넌트는 대체로 본연의 특정 기능 외에 Logging이나 Transaction 관리, 보안 등의 시스템 서비스도 수행해야 하는 경우가 많음.
  • 시스템의 여러 컴포넌트에 관련되는 경향이 있으므로 횡단 관심사(cross-cutting concerns)라고 함
  • 발생할 수 있는 2가지 문제점
    • 여러 컴포넌트에서 중복된 코드가 나타남.
    • 컴포넌트의 코드가 본연의 기능과 관련 없는 코드로 인해 지저분해짐.
  • AOP는 시스템 서비스를 모듈화해서 컴포넌트에 선언적으로 적용함. -> POJO를 단순화함

 

빈을 담는 그릇컨테이너 : 스프링 기반 애플리케이션에서는 스프링 Container 안에서 객체가 태어나고, 자라고, 소멸함.

  • 빈 팩토리(BeanFactory)
    • DI에 대한 기본적인 지원을 제공하는 가장 단순한 Container.
    • 대부분의 애플리케이션에 대하여 지나치게 저수준의 기능을 제공함.
  • 애플리케이션 컨텍스트(Application Context)
    • 빈 팩토리를 확장해 Property 파일에 텍스트 메시지를 읽고 해당 이벤트 Listner에 대한 애플리케이션 이벤트 발행 같은 애플리케이션 프레임워크 서비스를 제공하는 Container.

 

빈의 일생

  • 자바 애플리케이션에서 new 키워드를 이용해 빈을 인스턴스화하고 이를 바로 사용함. 더 이상 사용되지 않으면 garbage collection 후보가 되어 언젠가는 메모리 덩어리가 됐다가 사라짐.
  • 스프링 컨테이너 내에서 빈의 생명주기는 더 정교함. 빈이 생성될 때 스프링이 제공하는 customizing 기회를 이용하려면 스프링의 빈 생명주기를 이해해야 함.
  •  

 

 

스프링의 모듈

  • Spring FWK는 6개의 모듈로 구성되어 있음.
  • 코어 스프링 컨테이너
    • Spring FWK의 핵심은 Spring Appl.에서 빈의 생성, 설정, 처리방법을 관리하는 컨테이너.
    • 이 모듈 내에서 DI를 제공하는 스프링 빈 팩토리를 확인함.
  • 스프링의 AOP 모듈
    • AOP 모듈을 통해 AOP를 지원함.
    • DI처럼 Appl. 객체 간의 결합도를 낮추는 데 기여함.
    • 주로 Appl. 전체에 걸친 관심사(트랜잭션, 보안 등)와 각 객체간의 결합도를 낮추는 데 이용됨.
  • 데이터 액세스와 통합
    • 스프링의 JDBC와 DAO(Data Access Objects) 모듈은 반복되는 코드 추상화 및 데이터베이스 서버가 제공하는 오류 메시지에 의미 있는 예외 계층이 추가되어 있음.
    • ORM 모듈은 JDBC보다 ORM(Object-Relational Mapping)을 선호하는 사람을 위한 것
  • 웹과 리모팅
    • MVC(Model-View-Controller)는 user's interface가 Appl. logic과 분리되는 Web App을 만드는 경우에 일반적으로 사용되는 접근 방식.
  • 인스트루멘테이션(Instrumentation)
    • JVM에 에이전트를 추가하는 기능을 제공함.
  • 테스팅

 

 

 

Summary

  • Spring은 결합도가 낮은 코드를 만드는 것을 목적으로 함. 핵심은 DI와 AOP.
  • DI (Dependency Injection)
    • 객체들이 상호 간의 종속관계나 구체적인 구현 방법을 알 필요가 없도록 Appl. 객체들을 연결하는 방법
    • 종속객체를 필요로 하는 객체가 직접 종속객체를 얻어 오는 것이 아니라, 종속객체를 필요로 하는 객체에 종속객체가 부여되는 방식.
  • AOP(Aspect Object Programming)
    • Appl의 여러 곳에 흩어져 있는 로직을 한 곳으로, 즉 Aspect로 모을 수 있음.
    • Aspect는 스프링이 빈을 wiring할 때 런타임에 연결되어 효과적으로 빈에 새로운 기능 부여.
728x90
반응형