JAVA

스프링 (SpringFramework)

PGNV 2022. 3. 16. 10:43

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 Documentation

Overview history, design philosophy, feedback, getting started. Core IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP. Testing Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient. Data Access Tran

docs.spring.io

Spring Framework API

https://docs.spring.io/spring-framework/docs/current/javadoc-api/

 

Spring Framework 5.3.16 API

 

docs.spring.io

 

mvnrepository

https://mvnrepository.com/

 

 

 

 

'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