3.스프링 핵심 메커니즘
1.Spring의 핵심 메커니즘
스프링은 약 세 가지의 핵심 기술(Core Technology)이자 원칙을 가지고 있으며,
모든 스프링 하위 프로젝트들 역시 이 원칙들을 준수하여 개발되어있기 때문에 일관성을 유지하고 있음
스프링 하위 프로젝트
스프링에서 제공하는 하위 프로젝트 모듈
→ 개발자는 이 모듈을 활용하여 스프링 기반의 웹 애플리케이션을 개발할 수 있음
ex. Spring Boot, Spring Security, Spring Data..
정리하면,
스프링의 모든 하위 프로젝트들은 이와 같은 일관된 원칙과 디자인을 기반으로 설계되었기 때문에 스프링의 개별 모듈들을 활용하기 위해서는 핵심 원칙들에 대해 잘 이해하는 것이 중요함
2. 세 가지 핵심 원칙
세 가지 핵심 원칙은 다음과 같음
- 의존성 주입(Dependency Injection)
- 관점 지향 프로그래밍(Aspect Oriented Programming)
- (이식 가능한) 서비스 추상화(Portable Service Abstractions)

→ 스프링 삼각형, 스프링은 세 가지 핵심 원칙을 통해 순수 자바 코드(POJO)가 다른 코드들로부터 침투되지 않도록 방지함
(순수 자바 코드는 주로 애플리케이션의 핵심 비즈니스 로직)
2-1. 의존성 주입
개발자가 new 연산자를 직접 사용하지 않고, 스프링 컨테이너라고 불리는 별도의 컨테이너를 통해 애플리케이션의 동작에 필요한 비즈니스 객체(Instance)를 대신 생성해서 주입(초기화)해주는 기능
결과적으로 서로 다른 클래스들 간에 결합도를 낮출 수 있음
→ DI를 활용한 느슨한 결합(Loose coupling)
Person p = new Person(); // new -> 의존성
// App.java는 Person()에 의존하고 있음
// App.java -> Person.java
// 스프링 적용 후
Person p = 스프링 코드.getBean(); // getBean()의 경우는 주입보다는 의존성 찾기(Dependency Lookup)에 가까움2-2. 관점 지향 프로그래밍
그대로 번역하면 관점(Aspect) 지향 프로그래밍
프로그램 내에서 공통적으로 존재하는 반복적인 로직을 별도의 코드(하나의 Aspect)로 분리,
주로 어떤 기능을 제공하는데 필요한 핵심 비즈니스 로직과는 별개인 부가적인 로직들을 분리하여 부가 로직을 프로그램의 실행 과정(Runtime)에 동적으로 적용하는 방식
→ 부가 기능에 대한 코드가 핵심 비즈니스 로직 코드와 물리적으로 분리되면서도 분리된 부가 기능은 기존과 동일하게 그대로 적용되어 동작한다는 특징을 통해, 개발자는 비즈니스 로직 개발에 더 집중할 수 있음
2-3. 이식 가능한 서비스 추상화
본질적으로는 AOP와 유사하게 어떤 처리를 수행해야 함에 있어서,
별도의 코드를 작성하지 않고도 Annotation과 같이 코드를 추상화시킨 기능을 사용하여
개발자가 비즈니스 로직 작성에 더 집중할 수 있도록 도와주는 일련의 설계 개념