Back-End/Spring

[Spring] Spring Framework란?

zsunny 2023. 4. 25. 12:22

💎 Spring의 등장배경

웹 사이트가 점점 커지면서 엔터프라이즈급의 서비스가 필요하게 되었다.
점차 POJO + 경량 프레임워크를 사용하기 시작했고, EJB가 제공하는 서비스를 지원해 줄 수 있는 프레임워크 Spring이 등장했다.

  • EJB (Enterprise JavaBean 1.0) : Low Level의 트랜잭션이나 상태관리, 멀티 쓰레딩, 리소스 풀링과 같은 복잡한 Low Level의 API를 이해하지 못해도 아무 문제 없이 애플리케이션 개발 가능
  • POJO + Framework : EJB서버와 같은 거창한 컨테이너 필요 없음 / 오픈소스 프레임워크라 무료 / 다양하고 많은 라이브러리 지원 / 모든 플랫폼에서 사용이 가능한 스프링 프레임워크

❓ Spring이란?

자바로 Enterprise Application을 만들 때 포괄적으로 사용하는 Programming 및 Configuration Model을 제공해주는 Framework로 Application 수준의 인프라 스트럭쳐를 제공한다.
즉, 개발자가 복잡하고 실수하기 쉬운 Low Level에 신경 쓰지 않고 Business Logic 개발에 전념할 수 있도록 해준다.
스프링은 Application 개발 시 복잡함을 해결하는 것이 핵심!

  1. POJO (Plain Old Java Object) : 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바객체로 테스트하기 용이
  2. PSA (Portable Service Abstraction) : 일관된 방식으로 기술에 접근할 수 있게하는 설계 원칙으로 DB 관계 없이 동일하게 적용가능한 트랜잭션 처리방식
  3. OC/DI (Dependency Injection) : 유연하게 확장 가능한 객체를 만들어 두고 객체 간 의존관계는 외부에서 다이나믹하게 설정
  4. AOP (Aspect Oriented Programming) : 관심사의 분리 통해 공통 모듈을 여러 코드에 쉽게 적용하며 SW의 모듈성 향상

🎨 Spring의 특징

  1. 경량컨테이너
  • 스프링은 자바객체를 담고 있는 컨테이너
  • 언제든지 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있음
  1. DI 패턴 지원
  • 스프링은 설정 파일 또는 어노테이션 통해 객체 간의 의존 관계를 설정할 수 있음(객체 생성 또는 검색 불필요)
  1. AOP 지원
  • 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법
  • 핵심관심 사항 또는 공통관심 사항을 기준으로 프로그래밍 해 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 함
  1. POJO 지원
  • 특정 인터페이스를 구형하거나 클래스를 상속하지 않는 일반 자바 객체 지원
  • 스프링 컨테이너에 저장되는 자바객체는 특정 인터페이스를 구현하거나 클래스 상속 없이도 사용 가능
  1. IoC (Inversion of Control)
  • 스프링의 핵심적 기능
  • 자바의 객체 생성 및 의존관계에 있어 모든 제어권은 개발자에게 있었음
  • Servlet의 등장으로 Servlet에 대한 제어권이 Servlet Container에게 넘어감
  • IoC의 구현 방법 중 하나가 DI
  • 스프링에서 IoC를 담당하는 컨테이너는 BeanFactory, ApplicationContext
  • Fatory (인터페이스)를 사용함으로써 객체 간의 결합도를 떨어뜨릴 수 있음 (loose coupling)
  • 객체간 결합도가 높으면 해당 클래스가 유지보수 될 때 그 클래스와 결합된 다른 클래스도 같이 유지보수 되어야 할 가능성 높음