본문 바로가기
프로그래밍/Spring

[Spring] Spring Framework의 개요

by 소꿍 2020. 12. 13.

Java EE Architecture

 

  • Spring이란?
    Java Enterprise(J2EE) 개발을 편하게 해 주는 오픈 소스 경량급 어플리케이션 프레임워크

 

Spring Framework 소개

  • Road Johnson이 'Expert One-on-One J2EE Development without EJB'라는 책에서 *EJB를 사용하지 않고 Enterprise application을 개발하는 방법을 소개했고, 이것이 스프링 프레임워크의 모태가 되었다.
  • 2003년 2월부터 오픈 소스로 시작된 프로젝트로, 경량의 IoC(Inversion of Control)와 AOP(Aspect Object Programming) 컨테이너 프레임워크이다.

*EJB(Enterprise JavaBeans)란? 미국 Sun Microsystems사가 다양한 플랫폼과 제품간 이동성을 위해 비즈니스로직, 시스템 서비스를 이용하는 로직을 분산해 그 사이를 규정한 규약이다.

 

 

Spring Framework의 특징

  • AOP(기능별 모듈화, 진정한 OOP 제공)
    AOP 지원을 통해 주요 비즈니스 로직(핵심 기능)과 시스템 전반에 걸쳐 있는 기능 모듈(부가 기능)을 분리하도록 도와준다.

    * 비즈니스 로직을 탑재한 부분을 Enterprise Bean이라고 하고, DB처리, Transaction 처리 등의 시스템 전반에 걸쳐 있는 로직을 갖춘 부분을 컨테이너라고 한다.

  • IoC(Inversion of Control) 컨테이너
    애플리케이션 객체를 연결해 주고, 자동화된 설정 및 집중화된 설정을 제공하는 경량 컨테이너
    개발자가 직접 객체를 생성하지 않고, 객체의 생성에서 소멸까지 컨테이너가 관리한다.
    Dependency Injection을 통해 객체 간 의존성을 주입한다.
    EJB 컨테이너에 비해 가벼운 IoC 컨테이너

  • Test Unit(편리한 테스트 기능 제공)
    코드에 대한 단위 테스트를 쉽게 할 수 있도록 지원한다.

  • Transaction
    트랜잭션 관리를 위한 공통의 추상화된 레이어, 트랜잭션 관리자를 사용하여 저수준 트랜잭션 처리가 가능하다.
    선언적인 트랜잭션을 지원해 코드를 수정하지 않고 트랜잭션의 적용 및 변경이 가능하다.

  • JDBC 추상화 레이어
    중요한 예외 계층을 제공하고, 예외 처리를 단순화시켜 코드의 양을 줄인다.

  • ORM 프레임워크 연동 제공
    hibernate, Mybatis, JPA 등과 같은 *ORM 프레임 워크 연동이 가능하다.

    * ORM(Object Relational Mapping)이란?
    객체-관계 매핑. 객체와 관계형 DB의 데이터를 자동으로 매핑해주는 것이다.
    객체 지향 프로그래밍은 클래스, 관계형 DB는 테이블을 사용하므로 모델 간 불일치가 존재하는데,
    ORM을 통해 객체 간 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결할 수 있다.

  • 더 쉬운 J2EE 개발을 지향
    계층화된 아키텍처를 가지고 있고, 모든 부분이 독립적으로 사용될 수 있게 모듈화되어 있다.
    컨테이너의 API에 의존적이지 않은 POJO(Plain Old Java Object) 관리
    다른 프레임워크와 연동이 가능하고, Java 이외에도 제이루비, 그루비 등의 스크립트 언어를 지원한다.

  • 다양한 프레젠테이션 계층 제공(jsp 등)

  • 프레젠테이션 계층을 위해 다중 뷰 기술 지원

  • 검증된 아키텍처 제공
    서블릿 기반 MVC 프레임워크를 지원한다.

  • 분산(원격) 서비스
    RMI, JAX-RPC 등과 같은 기술을 이용해 쉽게 원격 서비스 구현이 가능하다.

 

IoC(Inversion of Control)

  • IoC의 개념
    단일 기능이 아닌 일반적인 Java의 component는 협업 객체와의 공동 작업으로 기능을 구현한다.
    이때 각 component와의 관계를 해당 작업 component가 직접 찾는 것이 아니라 컨테이너에게 부여받는다.
    즉, 객체에 대한 의존성을 컨테이너로부터 부여받는다.(Injection)

    의존하는 객체를 외부에서 주입한다는 의미에서 DI(Dependency Injection)이라고도 한다.

    IoC는 결합도를 낮추어 테스트와 재사용성을 높인다.
    또한 인터페이스를 이용해 다른 클래스에 영향을 주지 않고도 실제 구현 클래스를 쉽게 유지보수할 수 있다.

 

 

  • IoC 컨테이너
    IoC 방법으로 Bean을 관리하여 IoC 컨테이너라고 한다.
    개발자가 직접 객체를 생성하지 않고, 객체의 생성에서 소멸까지 컨테이너가 관리한다.

    Spring은 컨테이너에 객체를 담아두고, 필요한 때에 컨테이너로부터 객체를 가져와 사용할 수 있게 한다.
    Spring은 모든 객체를 빈(bean)으로 관리한다.(단 DTO 클래스는 일반적으로 제외)

    Dependency Injection을 통해 객체 간 관계를 설정한다.

 

 

 


참고한 글

 

 

댓글