개요
- Spring 가장 많이 쓰이는 자바 웹 프레임워크
- 얘는 대체 뭘까?
정의
- Spring Framework는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
- 엔터프라이즈급 애플리케이션 개발을 위한 포괄적인 기능을 제공
- 전자정부 표준프레임워크의 기반 기술
탄생배경
- Spring 이전에는
EJB(Enterprise Java Been) 라는 기술이 표준으로 사용됨
- EJB의 문제점
- 특정 회사의 EJB 컨테이너에 의존하여 이식성이 낮음
- 프로그래밍 모델이 복잡
- 자동화된 테스트가 거의 불가능
- 이러한 문제를 해결하기 위해 Rod Johnson이 "Expert One-on-One J2EE Design and Development"라는 책을 출간하면서 Spring의 기초가 되는 코드와 개념들을 선보임
Spring의 특징
IoC(Inversion of Control): 제어의 역전
- 애플리케이션 흐름의 주도권을 개발자가 아닌 Spring이 갖는 것을 의미
- 개발자가 직접 객체를 생성하지 않고 Spring의 컨테이너가 대신 처리
- 객체 간의 결합도 감소
- 유연한 코드 작성 가능
- 테스트 용이성 향상
DI(Dependency Injection): 의존성 주입
- IoC를 구체적으로 구현하는 방법
- 객체가 필요한 의존성을 외부에서 주입 받음
- 생성자 주입: 생성자를 통해 의존성 제공
- Setter 주입: Setter 메서드를 통해 의존성 제공
- 필드 주입: 필드에 직접 주입
AOP(Aspect-Oriented Programming): 관점 지향 프로그래밍
핵심 비즈니스 로직과 부가 기능(로깅, 보안, 트랜잭션 등)을 분리
코드의 모듈성과 재사용성을 높이는 프로그래밍 패러다임
- AOP 활용 예시
@Transactional : 트랜잭션 관리
- 로깅 처리
- 보안 검증
- 성능 모니터링
PSA(Portable Service Abstraction): 서비스 추상화
환경의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있는 추상화 구조
개발자는 구체적인 구현보다는 인터페이스에 의존하여 코드를 작성
- PSA의 예
- Spring Web MVC
- Spring Transaction
- Spring Cache
POJO(Plain Old Java Object) 지원
특정 인터페이스를 구현하거나 클래스를 상속받지 않아도 되는 순수한 자바 객체 지원
코드를 수정 없이 Spring에서 사용 가능
참고
Spring과 Spring Boot의 차이점을 아시나요?