스프링 프레임워크(Spring Framework)
자바(java) 기반의 애플리케이션을 개발하는 데
필요한 기능을 제공하고 쉽게 사용하도록 돕는 도구
스프링 특징
제어 역전(IoC : Inversion of Control)
- 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 ‘스프링 컨테이너(Spring Container) 또는 IoC 컨테이너(IoC Container)에 위임한다.
- 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부르며, 제어 역전을 통해 의존성 주입(DI), 관전 지향 프로그래밍(AOP)등이 가능해진다.
의존성 주입(DI: Dependency Injection)
- 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식
- 생성자를 통한 의존성 주입 → 권장(레퍼런스 객체 없이는 객체를 초기화 할 수 없게 설계)
- 필드 객체 선언을 통한 의존성 주입
- setter 메서드를 통한 의존성 주입 → 잘 사용하지 않음
- 스프링에서는 @Autowired라는 어노테션을 통해 의존성 주입을 할 수 있음
(스프링 4.3 이후 버전은 @Autowired 어노테이션 생략 가능)
관점 짐향 프로그래밍(AOP: Aspect-Oriented Programming)
-
관점을 기준으로 묶어 개발하는 방식
→ 관점(aspect) : 어떤 기능을 구현할 때 그 기능을 ‘핵심 기능’, ‘부가 기능’으로 구분해 각각 하나의 관점으로 보는 것
- 핵심기능 : 비즈니스 로직이 처리하려는 목적 기능
- 부가기능 : 핵심기능인 비즈니스 로직 사이에 로깅, 트랜잭션 등 처리하는 코드를 넣는것
-
아래의 표는 부가기능인 로직, 트랜잭션 처리 코드가 중복으로 삽입되어 있다. 이런 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식

-
AOP 구현방법
- 컴파일 과정에 삽입하는 방식
- 바이트코드를 메모리에 로드하는 과정에 삽입
- 프락시 패턴을 이용한 방식 → 디자인 패턴 중 하나, 스프링은 이 기능을 통해 AOP 기능을 제공함
-
AOP 의 목적
- OOP와 마찬가지로 모듈화해서 재사용하고 모듈화한 객체를 편하게 적용
-
스프링 프레임워크의 다양한 모듈
