본문 바로가기
개인공부/스프링 부트 3 백엔드 개발자 되기

스프링 부트 - 2장_2 스프링 부트 3시작하기

by 응가1414 2023. 6. 23.

빈과 스프링 컨테이너

스프링 컨테이너란?

  1. 스프링은 스프링 컨테이너를 제공합니다.
  2. 스프링 컨테이너는 앞서 본 것처럼 빈을 생성하고 관리합니다.
    1. 즉, 빈이 생성되고 소멸되기까지의 생명주리를 이 스프링 컨테이너가 관리하는 것이죠.
    2. @Autowired 같은 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원한다.

스프링 컨테이너 : 빈 생성, 소멸관리 생명주기 관리

@Autowired을 이용해 빈을 주입받을 수 있게 DI를 지원

빈이란?

스프링 컨테이너가 생성하고 관리하는 객체

  1. 빈은 스프링 컨테이너가 생성하고 관리하는 객체
  2. 스프링은 빈을 스프링 컨테이너에 등록하기 위해 XML 파일 설정, 애너테이션 추가 등 여러 방법을 제공합니다.
    1. 예: MyBean이라는 클래스에 @Component 애너테이션을 붙이면 MyBean 클래스가 빈으로 등록된다.
    2. 이후 스프링 컨테이너에서 이 클래스를 관리한다.
    3. 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리한다. -> "myBean"이다
    4. MyBean => 관리하는 이름은 myBean 이다.
@Component
public class MyBean {
}
​
@Compnent 을 이용하여 MyBean을 Bean으로 지정하여 스프링 컨테이너에서 관리한다.;
"MyBean"은 "myBean" 의 이름으로 Bean을 관리한다.

관점 지향 프로그래밍 (AOP : Aspect Oriented Programming)

  1. 스프링에서 또 하나 중요한 개념으로 AOP가 있다.
  2. AOP는 Aspect Oriented Programming이다.
  3. 직역하면 관점 지향 프로그래밍이다.
  4. 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서
    1. 관심 기준으로 모듈화하는 것을 의미
  5. 계좌 이체, 고객 관리하는 프로그램이 있을 때
    1. 핵심 관점은 계좌 이체, 고객 관리 로직
    2. 부가 관점은 로깅, 데이터베이스 연결 로직입니다.

그림

  1. AOP관점을 적용하면 부가 관점에 해당하는 로직을 모듈화해 앞에서 본 그림처럼 개발할 수 있게 해준다.
    1. 다시 말해 부가 관점 코드를 핵심 관점 코드에서 분리할 수 있게 해준다.

AOP을 사용하는 이유

  1. 핵심 관점 코드에만 집중할 수 있게 될 뿐만 아니라
  2. 프로그램의 변경과 확장에도 유연하게 대응 할수 있다.

개발자는 핵심 관점 코드에 집중 -> 변경, 확장에 유연하게 대응

이식 가능한 서비스 추상화 (PSA : Portable Service Abstraction)

  1. 이식 가능한 서비스 추상화입니다.
  2. PSA는 Portable Service Abstraction 을 줄인 표현이다.
  3. 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다.

PSA의 예는

  1. 클라이언트의 매핑과 클래스, 메서드의 매핑을 위한 에너테이션입니다.
    1. 스프링에서 데이터베이스에 접근하기 위한 기술로는 JPA, MyBatis, JDBC
  2. 어떤 기술을 사용하든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원
    1. WAS도 PSA의 예시 중 하나라고 볼 수 있다.

스프링의 콘셉트 정리 (IOC, DI, AOP, PSA)

IOC : 제어의 역전

DI : 의존성 주입

AOP : 관점지향 프로그래밍

PSA : 이식 가능한 서비스 추상화

  1. IoC/DI를 통해 객체 간의 의존 관계를 설정
  2. AOP를 통해 핵심 관점과 부가 로직을 분리해 개발
  3. PSA를 통해 추상화된 다양한 서비스들을 일관된 방식으로 사용.

그림.

용어정의

IoC (제어의 역전) 객체의 생성과 관리를 개발자가 하는 것이 아니라 프레임워크가 대한하는것
DI (의존성 주입) 외부에서 객체를 주입받아 사용하는 것
AOP (관점 지향 프로그램) 프로그래밍을 할 때 핵심 관점과 부가 관점을 나누어서 개발하는 것
PSA (이식 가능한 서비스 추상화) 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것