[코드스테이츠] S2.Unit8 회고

JinYoung Choi·2023년 2월 10일
0

흐음 생소한 단어들이 많이 등장했다. 그래도 할만했다. 이해한다라는 방식으로 접근했다.

다음주 부턴 세션3다 본격적으로 스프링을 배운다, 요 몇주간 스프링 인강으로 대충 맛은 찍어봤다.
내가 알고있는 지식과 부트캠프에서 배우는 지식을 접목시켜 완성시키도록 노력할 것 이다.

그나저나 벌써 세션2가 끝났다. 두달 이란 시간이 지났는데 내 머리 속에 들어온 지식들은 어마무시하게 많아졌다.
불과 두달전 까지는 내가 이정도로 발전할 것 이라 생각 조차 하지 못했다. 나의 이러한 모습을 자랑스럽게 여기고 앞으로 더욱더 꾸준히 발전 해 나가야겠다.

DI(Dependency Injection) - 의존성 주입

스프링 컨테이너

  • 스프링 프레임워크의 핵심 컴포넌트
  • 서로 다른 빈을 연결해 애플리케이션의 빈을 연결하는 역할
  • 빈의 인스턴스화, 구성, 전체 생명 주기 및 제거까지 처리
  • 객체 간의 의존성을 낮추기 위해 사용

BeanFactory - 스프링 컨테이너의 최상위 인터페이스, 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할
ApplicationContext - BeanFactory의 기능을 상속받아 제공 , 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고 그 외에 부가기능을 제공

빈(Bean)

  • 스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트 ( Spring 컨테이너가 관리하는 자바 객체를 의미 )

빈 스코프(Bean Scope)

  • 빈이 존재할 수 있는 범위를 의미

@Configuration - 해당 객체가 bean definitions의 소스임을 나타내는 애너테이션

@Bean - @Bean 애너테이션을 메서드에 추가해서 Bean으로 정의 할 수 있다

Component Scan - 스프링은 설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능

스프링 부트를 사용하면 @SpringBootApplication 를 이 프로젝트 시작 루트 위치에 두자 -> @SpringBootApplication에 @ComponentScan이 들어있음

다양한 의존관계 주입 방법

  • 생성자 주입 - 주로 사용
  • 수정자 주입 (setter 주입)
  • 필드 주입
  • 일반 메서드 주입

AOP(Aspect Oriented Programming)

AOP(Aspect-Oriented Programming)는 기존과 다른 프로그램 구조 사고 방식을 제공함으로써 객체 지향 프로그래밍(OOP)의 부족한 부분을 보완, 애스펙트를 사용하여 다양한 기능들을 분리한다

애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있는데 모듈화를 위하여 부가 기능을 분리하는
AOP 방식이 필요

애스팩트(Aspect)

  • 여러 객체에 공통으로 적용되는 기능
  • 어드바이스 + 포인트컷을 모듈화하여 애플리케이션에 포함되는 횡단 기능
  • 여러 어드바이스와 포인트컷이 함께 존재

조인 포인트(join point)

  • 클래스 초기화, 객체 인스턴스화, 메소드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미
  • 애플리케이션에 새로운 동작을 추가하기 위해 조인포인트에 관심 코드를 추가할 수 있다
  • 추상적인 개념이고 AOP를 적용할 수 있는 모든 지점
  • 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한
  • 어드바이스 적용이 필요한 곳은 애플리케이션 내에 메서드를 갖는다.

어드바이스(Advice)

  • 조인포인트에서 수행되는 코드를 의미
  • Aspect를 언제 핵심 코드에 적용할 지를 정의
  • 시스템 전체 애스펙트에 API 호출을 제공
  • 부가 기능에 해당

포인트컷(Pointcut)

  • 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
  • AspectJ 표현식을 사용해서 지정
  • 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능

위빙(Weaving)

  • 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것
  • Advice를 핵심 코드에 적용하는 것을 의미
  • 핵심 기능 코드에 영향을 주지 않고 부가 기능을 추가 할 수 있다

AOP 프록시(proxy)

  • AOP 기능을 구현하기 위해 만든 프록시 객체
  • 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시이다

타겟 (Target)

  • 핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 된다
  • Adivce를 받는 객체이고 포인트컷으로 결정된다

어드바이저(Advisor)

  • 하나의 어드바이스와 하나의 포인트 컷으로 구성
  • 스프링 AOP에서만 사용되는 특별한 용어
profile
백엔드 취준생

0개의 댓글