[스프링부트] 스프링의 핵심(Ioc, DI, AOP)

Harry park·2021년 12월 26일
0

SpringBoot

목록 보기
3/11
post-thumbnail

스프링(Spring)의 핵심

Ioc의 등장
: 스프링이 다른 프레임워크와 가장 큰 차이점

AOP
: AOP를 사용하여, 로깅, 트랜잭션 관리, 시큐리티에서의 적용 등 AspectJ와 같이 완벽하게 구현된 AOP와 통합하여 사용 가능하다.

  • IoC/DI : 의존 관계 주입
  • AOP : 관점 중심 프로그램
  • PSA : 이식 가능한 추상화

IOC (Inversion of Control : 제어의 역전

  • 인스턴스 등의 생성 주기 같은 것들이 개발자가 관리하는 것이 아니라 스프링 컨테이너에게 모두 맡기게 되는데 이게 제어가 넘어갔다고 하여 제어의 역전이라 한다.

의존성 주입(DI : Dependency Injection)

[장점]

  • 의존성으로부터 격리시켜 코드 테스트에 용이하다.
  • DI를 통하여, 불가능한 상황을 Mock과 같은 기술을 통해 안정적으로 테스트가 가능하다.
  • 코드를 확장하거나 변경할 때 영향성을 최소화한다.(추상성)
  • 순환 참조를 막을 수 있다.

[방법]

  • 생성자를 이용
  • Field변수를 이용
  • setter를 이용

@Bean, @Component,

  • @Bean
    : 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다.
    또한, class에 사용이 불가능하다.

  • @Component
    : 직접 컨트롤이 가능한 Class들의 경우에 사용된다.
    : 개발자가 직접 작성한 클래스를 Bean으로 등록하고자 할 경우 사용된다.
    : @Controller, @Service, @Repository 등의 어노테이션에서 상속

  • @Configuration
    : 외부라이브러리 또는 내장 클래스를 Bean으로 등록하고자 할 경우 사용한다.(개발자가 직접 제어가 불가능한 클래스)
    : 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시@Configuration을 사용해야 한다.
    즉, 해당 클래스에서 한 개 이상의 Bean을 생성하고 있을때 선언 해주어야 함

관점지향 프로그램(AOP : Aspect Oriented Programming)
스프링 어플리케이션은 대부분 특별한 경우를 제외하고는 MVC 패턴
Web Layer, Business Layer, Data Layer로 나뉜다.

주요 Annotation

  • Aspect : 자바에서 널리 사용하는 AOP 프레임워크에 포함되며, AOP를 정의하는 Class에 할당
  • Poincut : 기능을 어디에 적용시킬지, 메소드? Annotation? 등 AOP를 적용시킬 지점을 설정
  • Before : 메소드 실해하기 이전
  • After : 메소드가 성공적으로 실행 후, 예외가 발생 되더라도 실행
  • AfterReturing : 메소드 호출 성공 실행시(Not Throws)
  • AfterThrowing : 메소드 호출 실패 예외 발생(Throws)
  • Around : Before / After 모두 제어

[사용예시]

[1]. Dependency 추가
[2]. AOP 클래스 추가
[3]. PointCut, Before, AfterReturning 메서드 정의

profile
Jr. Backend Engineer

0개의 댓글