[Spring] 스프링 프레임워크(Spring Framework)의 특징과 구조

0. 스프링 프레임워크(Spring Framework)란?

동적 웹 사이트 개발을 위한 자바 플랫폼의 오픈 소스 애플리케이션 프레임워크다.
EJB를 사용할 때 알아야만 했던 수많은 디자인 패턴을 신경 쓸 필요없다. 스프링 프레임워크 그 자체로 이미 많은 디자인 패턴이 적용되어 배포되므로 스프링을 사용하는 것 자체가 디자인 패턴을 사용하는 것이다.

1. Spring Framework의 특징

스프링은 "IoC와 AOP를 지원하는 경량의 컨테이너 프레임워크"다.

  • 1) 경량적이다.

스프링은 여러 개의 모듈로 구성되어 있는 모듈식 프레임워크이다. 각 모듈은 하나 이상의 JAR 파일로 구성되어 있어 쉬운 개발과 실행이 가능하다. 또한 POJO(평범한 옛날 자바 객체, Plain Old Java Object) 형태로 객체를 관리해서 단순하고 가볍다.

  • 2) 제어의 역행(IoC, Inversion of Control)의존성 주입(DI, Dependency Injection)

스프링은 IoC를 통해 애플리케이션을 구성하는 객체 간의 낮은 결합도를 유지한다. IoC는 말 그대로 개발자가 직접 생성하거나 제어하는 것이 아닌 스프링의 Spring Bean모듈에서 객체를 생성하고 제어하며 관리하는 특징을 잘 설명해준다. (Bean 인스턴스를 생성해주는 곳은 Bean Factory라고 불린다.)

// 기존 Java
public class TV {
	private Speaker speaker;
    
    public TV(Speaker speaker) {
    	this.speaker = speaker;
    }
}

// Spring
@Component
public class TV {
	
    @Autowired
	private Speaker speaker;
}

DI는 객체 간의 의존성을 크게 줄여준다는 것에서 의미가 있다. 객체 간의 의존성이 줄어든다는 것은 그만큼 유지 보수를 할 때 손이 많이 가는 것을 줄여준다는 의미이기도 하다.

  • 3) 관점 지향 프로그래밍(AOP, Aspect Oriented Programming)

스프링은 비즈니스 메서드를 개발할 때 사용하는 공통 로직을 외부의 독립된 클래스로 분리하여, 해당 기능을 프로그램 코드에 직접 명시하지 않고 선언적으로 처리할 수 있다. 이로 인해 응집도가 높은 비즈니스 컴포넌트를 만들 수 있으며, 유지 보수 또한 높일 수 있다. OOP의 문제점 또한 보완할 수 있다.

  • 4) 컨테이너(Container)

컨테이너는 특정 객체의 생성과 관리를 담당하고 객체 운용에 필요한 다양한 기능을 제공한다. 대표적으로 Servlet과 Servlet Container가 그 예인데, Servlet 객체를 생성하고 생명 주기를 관리해주는 게 Servlet Container라는 맥락에서 스프링 또한 애플리케이션의 운용에 필요한 객체의 생성과 의존 관계를 관리한다는 점에서 일종의 컨테이너라고 할 수 있다.


2. Spring Framework의 구조

  • 1. Core Container

    • 1) Spring Core

      Core 모듈은 DI와 Ioc 패턴을 적용할 수 있는 기본적인 스프링 프레임워크 클래스들을 포함하고 있다. 어떤 타입의 스프링 애플리케이션을 빌드하든 항상 직간접적으로 이 Spring Core에 대한 종속성을 가진다.

    • 2) Spring Bean

      Bean 모듈은 모든 bean들의 생명 주기를 관리한다. Spring Bean은 Bean Factory를 가지고 있는데




Link

책 <스프링 퀵 스타트>,
https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/overview.html,
https://velog.io/@duckchanahn/Spring-%EC%9D%B4%EB%A1%A0%EC%A0%95%EB%A6%AC,
https://www.amitph.com/spring-framework-architecture/,

좋은 웹페이지 즐겨찾기