개발툴/Spring

Spring Framework?

가든_ 2022. 10. 17. 23:40

등장 배경

  • EJB를 사용하면 어플리케이션 작성을 쉽게 할 수 있다.
    • EJB : (class + interface2 + xml2 ⇒ *.jar →Deploy → WAS)
  • 하지만 EJB는 엄청 복잡함
    • 개발 효율성 떨어짐
    • 어플리케이션 테스트 위해 EJB 서버 필요
  • 웹 사이트가 커지면서 엔터프라이즈급의 서비스가 필요하게 됨 → EJB 사용
  • Rod Johnson이 EJB를 사용하지 않는 개발 방법 소개함(스프링의 모태)
  • POJO + 경량 프레임 워크 사용하기 시작
    • POJO : Plain Old Java Object
      • 특정 기술에 종속적이지 않아서 생산성, 이식성 향상
    • 경량 프레임워크 : MyBatis, 스프링…
      • EJB가 제공하는 서비스를 지원해 줄 수 있는 프레임 워크
    • 장점
      • EJB같은 거창한 프레임 워크 필요 없음
      • 오픈 소스 기반 -> 무료로 사용 가능
      • 많은 라이브러리 지원
      • 모든 플랫폼에서 사용 가능

Spring Framework

  • 엔터프라이즈 급 어플리케이션을 만들기 위한 모든 기능을 종합적으로 제공
    • 드라이버 로딩, DB 연결, PrepareStatement, SQL 실행, ResultSet, Close,,, 자동으로 가능!
    • SQL문 작성 & DTO 작성만 하면 된다
  • 개발자가 복잡하고 실수하기 쉬운 Low Level에 신경 쓰지 않고 Bussiness Logic에 전념할 수 있게 도와줌

구조

  • Spring 삼각형
    • POJO(Plane Old Java Object)
      • 객체 지향 원리에 충실한 자바 객체
    • PSA(Portable Service Abstraction)
      • 변화에 관계없이 일관된 방식으로 기술에 접근이 가능하게 하는 설계 방식
    • IoC/DI(Dependency Injection)
      • 유연하게 확장 가능한 객체를 만들어 두고 객체간의 의존 관계는 외부에서 다이나믹하게 설정
    • AOP(Aspect Oriented Programming)
      • 관심사의 분리로 소프트웨어 모듈성 향상

특징

  • 경량 컨테이너
    • 자바 객체의 생성과 소멸과 같은 라이프 사이클 관리
    • 스프링 컨테이너에서 객체를 가져와서 사용하게 된다.
  • DI 패턴 지원
    • 설정 파일이나, 어노테이션을 통해 객체 간 의존 관계 설정
      • 객체 직접 생성하거나 검색할 필요가 없다(제어의 역행)
  • AOP 지원
    • 공통 모듈을 여러 코드에 쉽게 적용 가능
      • 문제 해결을 위한 핵심 관심사항과 전체에 적용되는 공통 관심사항을 기준으로 프로그래밍
  • POJO 지원
    • 스프링 컨테이너에 저장되는 자바 객체는 인터페이스 구현 혹은 클래스 상속 없이 사용 가능하다
  • IoC 지원
    • 제어의 반전
      • 객체 생성 및 의존 관계의 제어권이 개발자가 아니라 스프링 컨테이너로 넘어감
      • 객체에 대한 생성과 생명주기를 관리하는 기능을 제공하기 때문
  • 다양한 API 지원
    • MyBatis, Hibernate, JPA...