🔷 스프링은 자바로 애플리케이션을 개발하는 데 필요한 기능을 제공하고 쉽게 사용하도록 돕는 도구
🔷 1. 제어 역전(IoC)
일반적인 자바 개발의 경우와 다르게 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임한다. 이를 통해 개발자는 비즈니스 로직을 작성하는 데 더 집중할 수 있다.
🔷 2. 의존성 주입(DI)
제어 역전의 방법 중 하나로, 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식으로 3가지 방법이 있다.
이 중에서 생성자를 통한 의존성 주입받는 방식을 권장한다. 다른 방식과는 다르게 레퍼런스 객체 없이는 객체를 초기화 할 수 없게 설계할 수 있기 때문이다.
@Autowired : 스프링에서 의존성을 주입하는 애너테이션(annotation)
🔷 3. 관점 지향 프로그래밍(AOP)
AOP는 관점을 기준으로 묶어 개발하는 방식이다. 관점이란 어떤 기능을 구현할 때 '핵심 기능'과 '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것을 말한다
밑 예시는 클라이언트로부터 상품 정보 등록 요청을 받아 데이터베이스에 저장하고, 그 상품 정보를 조회하는 비즈니스 로직을 구현할 때, 상품 정보 등록과 상품 정보 조회가 핵심 기능이다.
부가 기능을 추가 할 때는 핵심 기능 사이에 로깅 처리 또는 트랜잭션을 처리하면 된다.

AOP 구현하는 방법
스프링은 프락시 패턴을 통해 AOP 기능을 제공하고 있다.
따라서, OOP와 같이 모듈화된 객체 구조와 이 핵심 기능을 수행하는 로직 이전에 부가 기능을 수행 함으로써 개발자가 온전히 비즈니스 로직만을 구현하는데 집중하게 해준다.
| 스프링 프레임워크 | 스프링 부트 | |
|---|---|---|
| 설정 | 복잡 | 단순 |
| 의존성 관리 | 직접 설정 | 'spring-boot-starter' 의존성 제공 |
| 자동설정 | 없음 | 자동설정 지원 |
| 내장 WAS | 없음, 외부 WAS에 배포해야 함 | Tomcat 등 내장 WAS 지원 |
| 모니터링 | 직접 구현 | Spring Boot Acctuator로 모니터링 지원 |