제어 역전(IoC; Inversion of Control)
일반적인 자바 개발은 사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다.
객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어하는 구조이다.
하지만 제어 역전을 적용한 스프링의 경우 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임한다.
(제어 역전이란 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것)
여기서 외부는 스프링 컨테이너 또는 IoC컨테이너를 의미하고 제어 역전을 통해 의존성 주입, 관점지향 프로그래밍등이 가능해진다.
스프링을 사용하면 객체의 제어권을 컨테이너로 넘기기 때문에 비지니스 로직을 작성하는 것에 더 집중할 수 있다.
의존성 주입
의존성 주입이란 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미한다.
의존성 주입 3가지 방법.
1. 생성자를 통한 의존성 주입(스프링 공식 문서에서 권장하는 방식)
생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화할 수 없다.
public class DIController {
MyService myService;
@Autowired
public DIController(MyService myService) {
this.myService = myService;
}
}
2. 필드 객체 선언을 통한 의존성 주입
코드가 간결하지만 외부에서 수정이 불가능하다.
public class FieldInjectionController {
@Autowired
private MyService myService;
}
3. setter 메서드를 통한 의존성 주입
setter를 public으로 열어둬야 하기 때문에 언제 어디서든 변경이 가능하기 때문에 유지보수에 취약하다.
public class SetterInjectionController {
MyService myService;
@Autowired
public void setMyService(MyService myService) {
this.myService = myService;
}
}
관점 지향 프로그래밍
AOP는 관점을 기준으로 묶어 개발하는 방식.
(비지니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화 해 삽입하는 방식)
여기서 관점이란 어떤 기능을 구현할 때 그 기능을 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것.
- 핵심 기능 : 비지니스 로직을 구현하는 과정에서 비지니스 로직이 처리하려는 목적 기능
스프링 AOP의 목적은 OOP와 마찬가지로 모듈화해서 재사용 가능한 구성을 만드는 것이고, 모듈화된 객체를 펴ㅑㄴ하게 적용할 수 있게 함으로써 비지니스 로직에만 집중할 수 있게 도와준다.
스프링 부트가 가진 특징
의존성 관리
스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성과 라이브러리와 호환되는 버전을 직접 설정해야 했지만, 스프링 부트에서는 'spring-boot-starter'라는 의존성을 제공한다. 'spring-boot-starter'의 의존성은 여러 종류가 있고, 각 라이브러리 기능과 관련하여 서로 호환되는 버전의 모듈 조합을 제공한다.
자동 설정
스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정을 지원한다.
자동 설정은 애플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알아서 찾아주므로 애플리케이션 개발에 필요한 의존성을 추가하면 자동으로 관리해준다.
내장 WAS
스프링 부트는 각 웹 애플리케이션에 내장 WAS가 존재한다.
'spring-boot-starter-web'의 경우 톰캣을 내장하는데 스프링 부트의 자동 설정 기능이 톰캣에도 적용되므로 설정 없이 톰캣을 실행할 수 있다.
'스프링' 카테고리의 다른 글
JPA N + 1 문제와 해결 방법 (0) | 2023.11.14 |
---|---|
DTO매핑을 해야하는 이유 (0) | 2023.11.13 |
스프링 부트 핵심가이드 9장 (0) | 2023.04.07 |
스프링 부트 핵심 가이드 5장 (0) | 2023.04.04 |
스프링 부트 핵심 가이드 2장 (0) | 2023.04.04 |