본문 바로가기
Spring Framework/Spring

Spring Framework 소개

by 도쿠니 2022. 6. 5.

1. Spring Framework 란?

  • 자바 엔터프라이즈 애플리케이션 개발을 단순하게 해주는 오픈 소스 애플리케이션 프레임워크
    • 구조가 잘 잡히고 유지보수하기 쉬우며 테스트하기 좋은 애플리케이션 개발 인프라를 제공
    • 이로 인해 개발자는 애플리케이션 비즈니스 로직에 더욱 집중할 수 있게 되어 생산성이 좋아진다.
  • 여러 모듈로 구성되어 있다.
    • 애플리케이션 개발에 필요한 기능을 가진 모듈을 골라서 사용할 수 있다.
    • 핵심 컨테이너
      • spring-core,spring-beans : DI기능과 IoC 컨테이너 구현
      • spring-expression : 애플리케이션 객체설정에 사용하는 SpEL 지원을 제공
    • AOP와 계측
      • 관점 기반 프로그래밍과 클래스 계측을 지원
      • spring-aop : AOP기능
      • spring-instrument : 클래스 계측
    • 메시징
      • spring-messaging : 메시지 기반 애플리케이션을 쉽게 개발하도록 도와주는 모듈
    • 데이터 접근/통합
      • 데이터베이스나 메시징 공급자와의 상호 작용을 쉽게 해주는 모듈을 포함
      • spring-jdbc : jdbc를 사용한 데이터베이스 사용을 단순화
      • spring-orm : 객체-관계 매핑(ORM) 프레임워크 통합
      • spring-jms : JMS 공급자와의 상호 작용을 쉽게 만들어줌
      • spring-tx : 프로그램을 통해 트랜잭션 관리를 선언적으로 할 수 있음
      • spring-web : 웹 모듈이 공통으로 사용하는 클래스와 인터페이스를 정의
      • spring-webmvc : 서블릿 기반의 웹 애플리케이션과 RESTful 웹 서비스 개발(블로킹방식)을 쉽게 해줌
      • spring-webflux : 반응형(넌블로킹방식) 웹 애플리케이션과 RESTful 웹 서비스 개발을 쉽게 해줌
      • spring-websocket : 웹소켓 프로토콜을 사용하는 웹 애플리케이션 개발 지원
    • 테스트
      • spring-test : 단위 테스트와 통합 테스트를 도와준다.
  •  

 

2. 스프링의 3대 프로그래밍 모델 (스프링 삼각형)

스프링은 POJO를 기반으로 하는 3대 프로그래밍 모델이 있다. 이를 스프링 삼각형이라고 부른다. 

  • Portable Service Abstraction(PSA, 서비스 추상화)
    • 환경의 변화와 관계없이 일관된 방식으로 기술로의 접근 환경을 제공하는 추상화 구조 
    • 트랜잭션 추상화,OXM(Object-XML Mapping) 추상화,데이터 액세스의 Exception 변환기능 등 기술적인 복잡함은 추상화를 통해 Low Level의 기술 구현부분과 기술을 사용하는 인터페이스로 분리한다
      •  추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것이 서비스 추상화(Service Abstraction) 
      •  하나의 추상화로 여러 서비스를 묶어둔 것을 PSA(Portable Service Abstraction)
    • 즉, 추상화 계층을 사용해서 기술은 내부에 숨기고 개발자에게 편의성을 제공해주며 서비스 추상화를 통해 제공되는 기술을 다른 기술 스택으로 간편하게 바꿀 수 있는 확장성을 가지도록 한 것이 PSA이다.
  • DI(Dependency Injection,의존관계 주입) 와 IOC (Inversion of Control, 제어의 역전)
    • DI 
      • 객체 간의 의존성을 자신이 아닌 외부에서 주입하는 방식
      • 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.
      • 의존 관계가 변경될 때 마다 의존하고있는 클래스와 관계있는 내부 코드들을 변경해주어야 하는데, DI를 이용하면 내부 코드는 변경하지 않고 외부에서 동적으로 의존 관계를 바꿀 수 있다.
    • IOC
      • 스프링 애플리케이션에서는 DI와 객체(빈)의 생성, 사용, 제거 등과 같은 라이프 사이클을 애플리케이션 코드 대신 스프링 컨테이너가 담당한다.
  • AOP(Aspect Objected Programming)
    • 개발을 하다보면 반복되는 작업이 있는데 이러한 공통 작업을 분리하여 따로 모아 적절한 시기에 실행시켜주는 것을 의미한다.
  • POJO(Plain Old Java Object)
    • 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바 객체
    • 특정 기술에 종속적이지 않기 때문에 생산성, 이식성 향상

 

3. 특징

  • 컨테이너 역할
    • Spring 컨테이너는 Java 객체의 LifeCycle을 관리하며 Spring 컨테이너로부터 필요한 객체를 가져와 사용할 수 있다.
  • DI 지원
    • 설정파일(XML)이나 어노테이션을 통해서 객체 간의 의존관계를 설정할 수 있도록 함
  • AOP 지원
    • 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서 적용할 수 있도록 함
  • POJO 지원
    • Spring 컨테이너에 저장되는 Java 객체는 특정한 인터페이스를 구현하거나, 특정클래스를 상속받지 않아도 된다.
  • 트랜잭션 처리를 위한 일관된 방법을 지원
    • 어떤 트랜잭션을 사용하던 설정을 통해 정보를 관리하므로 트랜잭션 구현에 상관없이 동일한 코드 사용가능
  • 영속성(Persistence)과 관련된 다양한 API 지원
    • MyBatis,Hibernate 등 데이터베이스 처리를 위한 ORM 프레임워크들과의 연동 지원

'Spring Framework > Spring' 카테고리의 다른 글

Spring Validation  (0) 2022.06.07
Data Binding  (0) 2022.06.07
Spring AOP(관점 지향 프로그래밍)  (0) 2022.06.07
DI 정리  (0) 2022.06.06
Spring 등장 배경  (0) 2022.06.02

댓글