3 minute read

Spring Framework

  • 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
  • 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스 제공
  • 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술
  • Spring

Spring 특징

  • DI(Dependency Injection)
    • 의존성 주입
    • 설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요가 없다.
  • Spring AOP
    • Aspect Oriented Programming
    • 관점 지향 프로그래밍
    • 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능들을 분리하여 관리한다.
  • POJO
    • Plain Old Java Object
    • 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어 개발이 쉬우며, 기존 라이브러리의 지원이 용이하다.
  • IOC
    • Inversion of Control
    • 제어 반전
    • 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다는 뜻으로 객체의 생성부터 모든 생명주기의 관리까지 프레임워크가 주도하고 있다. 객체를 생성하고, 직접 호출하는 프로그램이 아니라, 만들어둔 자원을 호출해서 사용한다.
  • Spring JDBC
    • Mybatis나 Hibernate 등의 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다.
  • Spring MVC
    • MVC 디자인 패턴을 통해 웹 어플리케이션의 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 개발자가 아닌 서버가 객체들을 관리하는 웹 애플리케이션을 구축 할 수 있다.
  • PSA
    • Portable Service Abstraction
    • 스프링은 다른 여러 모듈을 사용함에 있어 별도의 추상화 레이어를 제공한다. 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 개발자는 이 모듈의 의존 없이 프로그램에 집중할 수 있다.

Spring의 구성 모듈

  • Data 접근 계층
    • JDBC나 데이터베이스에 연결하는 모듈
    • Data 트랜잭션에 해당하는 기능을 담당하여 영속성 프레임워크의 연결을 담당
  • Web 계층 (MVC / Remoting)
    • Spring Framework에서 Servlet, Struts 등 웹 구현 기술과의 연결점을 Spring MVC 구성으로 지원하기 위해 제공되는 모듈 계층
    • 스프링의 리모팅 기술로 RMI, Hessian, Burlap, JAX-WS, HTTP 호출자 그리고 REST API 모듈 제공
  • AOP 계층
    • Spring에서 각 흐름 간 공통된 코드를 한 쪽으로 빼내어 필요한 시점에 해당 코드를 첨부하게 하기 위해 지원하는 계층
    • 별도의 proxy를 두어 동작
    • 이를 통해 객체간의 결합도를 낮출 수 있다.
  • Core Container
    • Spring의 핵심 부분
    • 모든 스프링 관련 모듈은 이 Core Container 기반으로 구축
    • Spring의 근간이 되는 IoC(또는 DI) 기능을 지원하는 영역을 담당
    • BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원

Spring 모듈 정리

모듈명 내용
spring-beans 스프링 컨테이너를 이용해서 객체를 생성하는 기본기능을 제공
spring-context 객체생성, 라이프 사이클 처리, 스키마 확장 등의 기능을 제공
spring-aop AOP 기능을 제공
spring-web REST 클라이언트 데이터 변환 처리, 서블릿 필터, 파일 업로드 지원 등 웹 개발에 필요한 기반 기능을 제공
spring-webmvc 스프링 기반의 MVC 프레임워크, 웹 애플리케이션을 개발하는데필요한 컨트롤러, 뷰 구현을 제공
spring-websocket 스프링 MVC에서 웹 소켓 연동을 처리할 수 있도록 제공
spring-oxm XML과 자바 객체간의 매핑을 처리하기 위한 API 제공
spring-tx 트랜잭션 처리를 위한 추상 레이어를 제공
spring-jdbc JDBC 프로그래밍을 보다 쉽게 할 수 있는 템플릿 제공
spring-orm Hibernate, JPA, Mybatis 등과의 연동을 지원
spring-jms JMS 서버와 메시지를 쉽게 주고 받을 수 있도록 하기 위한 템플릿
spring-context-support 스케쥴링, 메일발송, 캐시연동, 벨로시티 등 부가 기능을 제공

Spring IoC

  • Inversion of Control
  • 제어 반전
  • 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 구동하는 컨테이너에서 직접 관리하는 것
  • 스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지 해당 객체에 대한 관리를 직접 수행

IoC 컨테이너

  • 스프링에서 관리하는 객체를 ‘Bean(빈)’이라고 하고, 해당 빈들을 관리한다는 의미로 컨테이너를 ‘Bean Factory’라고 한다.
  • 객체의 생명주기와 의존성을 관리한다.
  • VO (DTO / POJO) 객체의 생성, 초기화, 소멸 등의 처리를 담당한다.
  • 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축할 수 있다.

IoC 컨테이너와 Bean 객체

Bean 스프링이 IoC 방식으로 관리하는 Class.스프링이 직접 생성과 제어를 담당하는 객체
Bean Factory 스프링의 IoC를 담당하는 핵심 컨테이너. Bean을 등록, 생성, 조회, 반환하는 기능을 담당
ApplicationContext BeanFactory를 확장한 IoC 컨테이너. Bean을 등록하고 관리하는 기능은 BeanFactory와 동일하지만 스프링이 제공하는 각종 부가 서비스를 추가로 제공
GenericXmlApplication Context ApplicationContext 를 구현한 Class. 일반적인 XML 형태의 문서를 읽어 컨테이너 역할을 수행
Configuration metadata 설정 메타 정보 ApplicationContext 또는 BeanFactory가 IoC를 적용하기 위해 사용하는 설정 정보. 설정 메타 정보는 IoC 컨테이너에 의해 관리되는 Bean 객체를생성하고 구성할 때 사용

Spring DI

  • Dependency Injection
  • 의존성 주입
  • 사용하는 객체를 직접 생성하여 만드는 것이 아니라 컨테이너가 빈의 설정 정보를 읽어와 자동으로 해당 객체에 연결
  • 이렇게 의존성을 주입 받게 되면 이후 해당 객체를 수정해야 할 상황이 발생했을 때 소스 코드의 수정 최소화 가능
  • 장점
    • 간결하고 단순한 코드 작성
    • 각 객체 간의 종속 관계(결합도)를 해소 가능
      • 결합도: 한 클래스에서 필드 객체를 생성할 때 발생하는 두 객체 간의 관계. 각 객체간의 내용이 수정될 경우 영향을 미치는 정도

Spring DI 종류

  • Setter 메소드를 통한 의존성 주입
    • 의존성을 주입 받는 Setter 메소드를 만들고, 이를 통해 의존성을 주입
    • Setter 메소드를 통해 의존 관계가 있는 Bean을 주입하려면 property 태그를 사용
  • 생성자를 통한 의존성 주입
    • 필요한 의존성을 포함하는 클래스에 생성자를 만들고, 이를 통해 의존성을 주입
    • Constructor를 통해 의존 관계가 있는 Bean을 주입하려면 constructor-arg 태그 사용
  • 메소드를 통한 의존성 주입
    • 의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성을 주입

Categories:

Updated: