[Spring] SpringFramework란?

JeongEun Kim·2023년 4월 23일
1

Spring

목록 보기
1/8

배경 지식

JavaBeans(자바빈즈)

JavaBeans는 Java로 작성된 소프트웨어 컴포넌트이다. 단순히 Java 언어로 작성된 클래스를 의미하는 것이 아니라, 아래의 관례에 따라 만들어진 클래스를 의미한다.

  • 클래스는 직렬화 되어야 한다.
  • 클래스는 기본 생성자를 가지고 있어야 한다.
  • 클래스의 속성들은 getter, setter 혹은 표준 명명법을 따르는 메서드를 사용해 접근할 수 있어야 한다.
  • 클래스는 필요한 이벤트 처리 메서드를 포함하고 있어야 한다.

EJB(Enterprise Java Beans)

기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. 애플리케이션 작성을 쉽게 할 수 있으며, Low Level의 트랜잭션이나 상태관리, 멀티 쓰레딩, 리소스 풀링 같은 Low Level API를 이해하지 못하더라도 문제 없이 애플리케이션을 개발할 수 있다.
하지만, 코드 수정 후 반영 과정이 거창해 개발의 효율성이 떨어지며, 애플리케이션의 테스트를 위해서 반드시 EJB 서버가 필요하다는 단점이 있다.

POJO(Plain Old Java Object)

특정 프레임워크나 기술에 의존적이지 않은 자바 객체를 말한다. 특정 기술에 종속적이지 않기 때문에 생산성, 이식성이 향상된다.
Plain : component interface를 상속받지 않는 특징 (특정 프레임워크에 종속되지 않음)
Old : EJB 이전의 java class

경량 프레임워크

EJB가 제공하는 서비스를 지원해 줄 수 있는 프레임워크.
Hibernate, JDO, iBatis(MyBatis), Spring


SpringFramework의 등장 배경

  • 웹사이트가 점점 커지며 엔터프라이즈급의 서비스가 필요했다.
    세션빈에서 트랜젝션 관리, 로긴, 분산처리, 보안 등이 필요했다.
  • 자바 진영에서는 EJB가 엔터프라이즈급 서비스로 각광을 받았다.
    단, EJB는 정의된 인터페이스에 따라 코드를 작성해야하므로 기존의 POJP를 변경해야하며, 컨테이너에 배포를 해야 테스트가 가능해 개발속도가 느렸다. 또한, 배우기 어려우며 설정도 많았고, RMI(Remote Method Invocation, 원격 메소드 호출)를 기반으로 하는 서버이기 때문에 무거웠다.
  • Rod Johnson이 'Expert One-on-One J2EE Development without EJB'라는 저서에서 EJB를 사용하지 않고 엔터프라이즈 애플리케이션을 개발하는 법을 소개하였다. 이것이 바로 스프링의 모태이다.
    AOP나 DI같은 새로운 프로그래밍 방법론으로 가능한 방법이었으며, POJO로 전언적인 프로그래밍 모델이 가능했다.
  • 점차 POJO + Framework를 사용하기 시작했다.
    EJB 서버와 같이 거창한 컨테이너가 필요 없고, 오픈소스 프레임워크라 무료이다. 웹 분야 뿐만이 아니라 다양한 분야에서 적용 가능한 많은 라이브러리가 지원되며 모든 플랫폼에서 사용이 가능하다는 장점이 있어 많은 사람들이 사용하게 되었다.

Spring Framework란?

  • 엔터프라이즈 급 애플리케이션을 만들기 위한 모든 기능을 종합적으로 제공하는 경량화 된 솔루션이다.
  • JEE(Java Enterprise Edition)가 제공하는 다수의 기능을 지원하고 있기 때문에, JEE를 대체하는 Framework로 자리잡고 있다.
  • JEE가 제공하는 다양한 기능 뿐만 아니라, DI(Depenedcy Injection)와 AOP(Aspect Oriencted Programming) 또한 지원한다.
  • 자바로 Enterprise Application을 만들 때 포괄적으로 사용하는 Programming 및 Configuration Model을 제공해주는 Framework로 Application 수준의 인프라 스트럭쳐를 제공한다. 즉, 개발자가 Low Level에 신경쓰지 않고 Buisness Logic 개발에 전념할 수 있도록 한다.

Spring Framework의 구조

Spring 삼각형

Enterprise Application 개발 시 복잡함을 해결하는 Spring의 핵심이다.

1. POJO (Plain Old Java Object)

  • 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바 객체
  • 테스트하기 용이하며, 객체지향 설계를 자유롭게 적용할 수 있다.

2. PSA (Portable Service Abstraction)

  • 환경과 세부기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 설계 원칙
  • transaction 추상화, OXM 추상화, 데이터 액세스의 Exception 변환기능 등 기술적인 복잡함은 추상화를 통해 Low Level의 기술 구현 부분과 기술을 사용하는 인터페이스로 분리했다.
  • ex. 데이터베이스에 관계 없이 동일하게 적용할 수 있는 트랜잭션 처리 방식

3. IoC/DI (Dependency Injection)

  • DI는 유연하게 확장 가능한 객체를 만들어 두고 객체 간의 의존관계는 외부에서 다이나믹하게 설정함

4. AOP (Aspect Oriented Programming)

  • 관심사의 분리를 통해 소프트웨어의 모듈성을 향상
  • 공통 모듈을 여러 코드에 쉽게 적용 가능하다.

SpringFramework의 특징

경량 컨테이너

  • 스프링은 자바 객체를 답고 있는 컨테이너이다.
  • 스프링 컨테이너는 이들 자바 객체의 생성과 소멸과 같은 라이프 사이클을 관리한다.
  • 언제든지 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.

DI (Dependency Injection - 의존성 지원) 패턴 지원

  • 스프링은 설정 파일이나 어노테이션을 통해 객체 간의 의존 관계를 설정할 수 있다.
  • 따라서, 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없다.

AOP (Aspect Oriented Programming - 관점 지향 프로그래밍) 지원

  • AOP는 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법이다.
  • 이는 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍 함으로써, 여러 코드에 쉽게 적용할 수 있도록 한다.
  • 스프링은 자체적으로 프록시 기반의 AOP를 지원하므로 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통으로 필요로 하지만 실제 모듈의 핵심이 아닌 기능들을 분리하여 각 모듈에 적용이 가능하다.

POJO (Plain Old Java Object) 지원

  • 특정 인터페이스를 구현하거나 또는 클래스를 상속하지 않는 일반 자바 객체 지원
  • 스프링 컨테이너에 저장되는 자바 객체는 특정한 인터페이스를 구현하거나 클래스 상속 없이도 사용이 가능하다.
  • 일반적인 자바 객체를 칭하기 위한 별칭 개념이다.

IoC (Inversion of Control - 제어의 반전)

  • 스프링이 갖고 있는 핵심적인 기능
  • 자바의 객체 생성 및 의존관계에 있어 모든 제어권은 개발자에게 있었다.
  • Servlet과 EJB가 나타나면서 기존의 제어권이 Servlet Container 및 EJB Container에 넘어가게 되었다.(Servlet, EJB에 대한 제어권을 제외한 나머지 객체 제어권은 개발자에게 그대로 있음)
  • 스프링에서도 객체에 대한 생명주기를 관리할 수 있는 기능을 제공하는데, 이런 이유로 Spring Container 또는 IoC Container라고 부르기도 한다.

트랜잭션 처리를 위한 일관된 방법 제공

  • JDBC, JTA 또는 컨테이너가 제공하는 트랜잭션을 사용하든, 설정파일을 통해 트랜잭션 관련정보를 입력하기 때문에 트랜잭션 구현에 상관 없이 동일한 코드를 여러 환경에서 사용 가능하다.

영속성과 관련된 다양한 API 지원

  • 스프링은 JDBC를 비롯하여 iBatis, myBatis, Hibernate, JPA 등 DB 처리를 위해 널리 사용되는 라이브러리와 연동을 지원한다.

다양한 API에 대한 연동 지원

JMS, 메일, 스케쥴링 등 엔터프라이즈 어플리케이션 개발에 필요한 다양한 API를 설정 파일과 어노테이션을 통해서 손쉽게 사용할 수 있도록 지원하고 있다.


SpringFramework Module


0개의 댓글