💎 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 개발 시 복잡함을 해결하는 것이 핵심!
- POJO (Plain Old Java Object) : 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바객체로 테스트하기 용이
- PSA (Portable Service Abstraction) : 일관된 방식으로 기술에 접근할 수 있게하는 설계 원칙으로 DB 관계 없이 동일하게 적용가능한 트랜잭션 처리방식
- OC/DI (Dependency Injection) : 유연하게 확장 가능한 객체를 만들어 두고 객체 간 의존관계는 외부에서 다이나믹하게 설정
- AOP (Aspect Oriented Programming) : 관심사의 분리 통해 공통 모듈을 여러 코드에 쉽게 적용하며 SW의 모듈성 향상
🎨 Spring의 특징
- 경량컨테이너
- 스프링은 자바객체를 담고 있는 컨테이너
- 언제든지 스프링 컨테이너로부터 필요한 객체를 가져와 사용할 수 있음
- DI 패턴 지원
- 스프링은 설정 파일 또는 어노테이션 통해 객체 간의 의존 관계를 설정할 수 있음(객체 생성 또는 검색 불필요)
- AOP 지원
- 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법
- 핵심관심 사항 또는 공통관심 사항을 기준으로 프로그래밍 해 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 함
- POJO 지원
- 특정 인터페이스를 구형하거나 클래스를 상속하지 않는 일반 자바 객체 지원
- 스프링 컨테이너에 저장되는 자바객체는 특정 인터페이스를 구현하거나 클래스 상속 없이도 사용 가능
- IoC (Inversion of Control)
- 스프링의 핵심적 기능
- 자바의 객체 생성 및 의존관계에 있어 모든 제어권은 개발자에게 있었음
- Servlet의 등장으로 Servlet에 대한 제어권이 Servlet Container에게 넘어감
- IoC의 구현 방법 중 하나가 DI
- 스프링에서 IoC를 담당하는 컨테이너는 BeanFactory, ApplicationContext
- Fatory (인터페이스)를 사용함으로써 객체 간의 결합도를 떨어뜨릴 수 있음 (loose coupling)
- 객체간 결합도가 높으면 해당 클래스가 유지보수 될 때 그 클래스와 결합된 다른 클래스도 같이 유지보수 되어야 할 가능성 높음
'Back-End > Spring' 카테고리의 다른 글
[Spring] 스프링 특징 IOC, AOP, DI 이란? (0) | 2023.12.14 |
---|---|
[Spring] pom.xml / web.xml / servlet-context.xml / root-context.xml (0) | 2023.04.30 |
[Spring] Spring MVC (0) | 2023.04.30 |
[Spring] AOP (Aspect Oriented Programming) (0) | 2023.04.28 |
[Spring] DI (Dependency Injection) (0) | 2023.04.26 |