빈과 스프링 컨테이너
스프링 컨테이너란?
- 스프링은 스프링 컨테이너를 제공합니다.
- 스프링 컨테이너는 앞서 본 것처럼 빈을 생성하고 관리합니다.
- 즉, 빈이 생성되고 소멸되기까지의 생명주리를 이 스프링 컨테이너가 관리하는 것이죠.
- @Autowired 같은 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원한다.
스프링 컨테이너 : 빈 생성, 소멸관리 생명주기 관리
@Autowired을 이용해 빈을 주입받을 수 있게 DI를 지원
빈이란?
스프링 컨테이너가 생성하고 관리하는 객체
- 빈은 스프링 컨테이너가 생성하고 관리하는 객체
- 스프링은 빈을 스프링 컨테이너에 등록하기 위해 XML 파일 설정, 애너테이션 추가 등 여러 방법을 제공합니다.
- 예: MyBean이라는 클래스에 @Component 애너테이션을 붙이면 MyBean 클래스가 빈으로 등록된다.
- 이후 스프링 컨테이너에서 이 클래스를 관리한다.
- 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리한다. -> "myBean"이다
-
MyBean => 관리하는 이름은 myBean 이다.
@Component
public class MyBean {
}
@Compnent 을 이용하여 MyBean을 Bean으로 지정하여 스프링 컨테이너에서 관리한다.;
"MyBean"은 "myBean" 의 이름으로 Bean을 관리한다.
관점 지향 프로그래밍 (AOP : Aspect Oriented Programming)
- 스프링에서 또 하나 중요한 개념으로 AOP가 있다.
- AOP는 Aspect Oriented Programming이다.
- 직역하면 관점 지향 프로그래밍이다.
- 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서
- 관심 기준으로 모듈화하는 것을 의미
- 계좌 이체, 고객 관리하는 프로그램이 있을 때
- 핵심 관점은 계좌 이체, 고객 관리 로직
- 부가 관점은 로깅, 데이터베이스 연결 로직입니다.
그림
- AOP관점을 적용하면 부가 관점에 해당하는 로직을 모듈화해 앞에서 본 그림처럼 개발할 수 있게 해준다.
- 다시 말해 부가 관점 코드를 핵심 관점 코드에서 분리할 수 있게 해준다.
AOP을 사용하는 이유
- 핵심 관점 코드에만 집중할 수 있게 될 뿐만 아니라
- 프로그램의 변경과 확장에도 유연하게 대응 할수 있다.
개발자는 핵심 관점 코드에 집중 -> 변경, 확장에 유연하게 대응
이식 가능한 서비스 추상화 (PSA : Portable Service Abstraction)
- 이식 가능한 서비스 추상화입니다.
- PSA는 Portable Service Abstraction 을 줄인 표현이다.
- 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다.
PSA의 예는
- 클라이언트의 매핑과 클래스, 메서드의 매핑을 위한 에너테이션입니다.
- 스프링에서 데이터베이스에 접근하기 위한 기술로는 JPA, MyBatis, JDBC
- 어떤 기술을 사용하든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원
- WAS도 PSA의 예시 중 하나라고 볼 수 있다.
스프링의 콘셉트 정리 (IOC, DI, AOP, PSA)
IOC : 제어의 역전
DI : 의존성 주입
AOP : 관점지향 프로그래밍
PSA : 이식 가능한 서비스 추상화
- IoC/DI를 통해 객체 간의 의존 관계를 설정
- AOP를 통해 핵심 관점과 부가 로직을 분리해 개발
- PSA를 통해 추상화된 다양한 서비스들을 일관된 방식으로 사용.
그림.
용어정의
IoC (제어의 역전) | 객체의 생성과 관리를 개발자가 하는 것이 아니라 프레임워크가 대한하는것 |
DI (의존성 주입) | 외부에서 객체를 주입받아 사용하는 것 |
AOP (관점 지향 프로그램) | 프로그래밍을 할 때 핵심 관점과 부가 관점을 나누어서 개발하는 것 |
PSA (이식 가능한 서비스 추상화) | 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것 |
'개인공부 > 스프링 부트 3 백엔드 개발자 되기' 카테고리의 다른 글
스프링 부트 - 3장_스프링부트3 구조 이해하기 (0) | 2023.06.25 |
---|---|
스프링 부트 - 2장_3_스프링부트3 둘러보기 (0) | 2023.06.25 |
스프링 부트 3 - 2장 _1 DI와 IOC (0) | 2023.06.22 |
스프링 부트 3 백엔드 개발자 되기 - 1장 이론 (0) | 2023.06.22 |
Build system 의 그레이들과 메이븐의 차이는 무엇인가요 - p24 (0) | 2023.06.22 |