SpringFramework등장 배경
EJB 복잡한 스펙으로 인한 개발의 효율성이 떨어짐
POJO(Plsin Olf Java Object)
- 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바객체
- 테스트하기 용이하며, 객체지향 설계를 자유롭게 적용할 수 있다.
- 특정 기술에 종속적이지 않기 때문에 생산성, 이식성 향상
- Plain : component interface를 상속받지 않는 특징 (특정 framework에 종속X)
- Old: EJB이전의 Java Class의미
PSA(Portable Service Abstraction, 이식 가능한 서비스 추상화)
- 환경과 세부기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 설계 원칙
- 트랜잭션 추상화, OXM추상화, 데이터 액세스의 Exception 변환기능..등 기술적인 복잡함은 추상화를 통해 LowLevel의 기술 구현 부분과 기술을 사용하는 인터페이스로 분리
- 예를 들어 데이터베이스에 관계없이 동일하게 적용 할 수 있는 트랜잭션 처리 방식
IoC(Inversion of Control, 제어의 역전/DI (Dependency Injection, 의존성 주입)
- DI는 유연하게 확장 가능한 객체를 만들어 두고 객체 간의 의존관계는 외부에서 다이나믹하게 설정
- 객체지향 언어에서 Object간의 연결 관계를 런타임에 결정
- 객체 간의 관계가 느슨하게 연결됨(loose coupling)
- IoC의 구현 방법 중 하나가 DI (Dependency Injection, 의존성 주입)
DI (Dependency Injection, 의존성 주입)
- 객체 간의 의존관계를 자신이 아닌 외부의 조립기가 수행
- 제어의 역행(Inversion of Control, IoC) 라는 의미로 사용
- DI를 통해 시스템에 있는 각 객체를 조정하는 외부 개체가 객체들에게 생성시에 의존관계를 주어짐
- 느슨한 결합(loose coupling)이 주요 강점
- 객체는 인터페이스에 의한 의존 관계만을 알고 있으며, 이 의존 관계는 구현 클래스에 대한 차이를 모르는채 서로 다른 구현으로 대체가 가능
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)
- 관심사의 분리를 통해서 소프트웨어의 모듈성을 향상
- 공통 모듈을 여러 코드에 쉽게 적용가능
- 핵심 관심사항/핵심코드(core concern)과 공통 관심 사항(cross-cutting concern)/부가 기능 코드를 분리
- 간단한 메소드의 성능 검사에 사용
- 트랜잭션 처리
- 예외 반환
- 아키텍처 검증
Spring AOP 용어
- Target : 핵심 기능
- Advice : 부가 기능
- JoinPoint : Aspect가 적용될 수 있는 지점(method, field) ※Spring AOP는 method JoinPoint만 지원
- Pointcut : AOP를 적용할 하나의 포인트
- Aspect : Advice +Pointcut
- Advisor(Aspect같은말) : Advice + pointcut
- Weaving : 적용을해서 실행함
Container란?
- 객체의 생성, 사용 소멸에 해당하는 라이프사이클을 담당
- 라이프사이클을 기본으로 애플리케이션 사용에 필요한 주요 기능을 제공
Container기능
- 라이프사이클 관리
- Dependency 객체 제공
- Thread관리
- 기타 애플리케이션 실행에 필요한 환경
Container필요성
- 비즈니스 로직 외에 부가적인 기능들에 대해서는 독립적으로 관리되도록 하기 위함
- 서비스 lookup이나 Configuration에 대한 일관성을 갖기 위함
- 서비스 객체를 사용하기 위해 각각 Factory 또는 Singletion 패턴을 직접 구현하지 않아도 됨
Ioc Container
- 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당
- Container가 코드 대신 오브젝트에 대한 제어권을 갖고 있어 IoC라고 부름
- 스프링 컨테이너를 IoC Container라고 부르기도 함
- 스프링에서 IoC를 담당하는 Container에는 BeanFactory, ApplicationContext가 있음
POJO + Framework
- EJB서버와 같은 거창한 컨테이너 필요 없음
- 오픈소스 프레임워크라 사용이 무료
- 각종 기업용 어플리케이션 개발에 필요한 상당히 많은 라이브러리가 지원
- 스프링 프레임워크는 모든 플랫폼에서 사용 가능
- 스프링은 웹분야 뿐만이 아니라 어플리케이션 등 모든 분야에 적용 가능한 다양한 라이브러리가 있음
Spring Framework란?
- 엔터프라이즈 급 애플리케이션을 만들기 위한 모든 기능을 종합적으로 제공하는 경량화 된 솔루션
- JEE(Java Enterprise Edition)가 제공하는 다수의 기능을 지원하고 있기 때문에, JEE를 대체하는 Framework로 자리 잡음
- SpringFramework는 JEE가 제공하는 다양한 기능을 제공하는 것 뿐만 아니라, DI(Dependency Injection)나 AOP(Aspect Oriented Programming)와 같은 기능 지원
- Spring Framework는 자바로 Enterprise Application을 만들 때 포괄적으로 사용하는 Programming 및 Configuration Model을 제공해 주는 Framework로 Application 수준의 인프라 스트럭쳐를 제공
- 개발자가 복잡하고 실수하기 쉬운 Low Level에 신경 쓰지 않고 Business Logic개발에 전념할 수 있도록 도움
싱글톤 빈(Singleton bean)
- Spring Framework 컨테이너가지고 있는 자바 객체
- 스피링 빈은 기본적으로 싱글톤(유일하게 하나만 존재하는 객체)으로 만들어짐
- 컨테이너가 제공하는 모든 빈의 인스턴스는 항상 동일함
- 컨테이너가 항상 새로운 인스턴스를 반환하게 만들고 싶은 경우 scope를 prototype으로 설정
빈의 생성 범위 지정
범위 | 설명 |
singleton | 스프링 컨테이너당 하나의 인스턴스 빈만 생성(default) |
prototype | 컨테이너에 빈을 요청할 때마다 새로운 인스턴스 생성 |
request (web MVC, Web Application context 사용) | HTTP Request별로 새로운 인스턴스 생성 |
session (web MVC, Web Application context 사용) | HTTP Session별로 새로운 인스턴스 생성 |
Stereotype | 적용 대상 |
@Repository | Data Access Layer의 DAO 또는 Repository 클래스에 사용. DataAccessException 자동변환과 같은 AOP의 적용 대상을 선정하기 위해 사용 |
@Service | Service Layer의 클래스에 사용 |
@Controller | Presentation Layer의 MVC Controller에 사용 스프링 웹 서블릿에 의해 웹 요청을 처리하는 컨트롤러 빈으로 선정 |
@Component | 위의 Layer 구분을 적용하기 어려운 일반적인 경우에 설정 |
Spring Framework Documentation
https://docs.spring.io/spring-framework/docs/current/reference/html/index.html
Spring Framework API
https://docs.spring.io/spring-framework/docs/current/javadoc-api/
mvnrepository
'JAVA' 카테고리의 다른 글
자바(Java) - 스레드(Thread) (0) | 2022.01.20 |
---|---|
자바(Java) I/O 개념 (0) | 2022.01.20 |
자바 컬렉션 프레임워크(Collection Framework) (0) | 2022.01.19 |
자바 제네릭(Generics) (0) | 2022.01.19 |
자바 예외 처리 (0) | 2022.01.19 |