Spring core 백기선의 스프링 핵심 기술

카일·2020년 4월 17일
5

Spring

목록 보기
1/4
post-thumbnail

관련된 코드는 여기서 확인하실 수 있습니다.

IoC Container & Bean

  • Ioc Container & Bean
  • ApplicationContext

Autowired

  • 생성자
  • Setter
  • Field

Component Scan

  • 역할 : 스캔의 위치 설정, 필터(어떤 것을 스캔하지 않을지)설정
  • From base package
  • 기본적으로 어플리케이션 구동에서 싱글톤 타입의 빈을 등록하기 때문에 구동시간은 조금 길어질 수 있다. 하지만 문제되지 않는다.

Bean Scope

  • 기본적으로 싱글톤 방식

  • 프로토타입 방식으로는 어떻게 할 수 있는가?

  • 싱글톤타입이 프로토타입의 빈을 사용하는 경우 문제가 된다. 왜? 싱글톤은 한 번만 생성되고 생성될 때 이미 설정이 완료되니까 그럼 어떻게 해결할 수 있는가? 어떻게 싱글톤타입에서 프로토를 사용하면서 매번 새로운 객체를 받을 수 있을까?

      @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)

Environment Profile

  • ApplicationContext 가 제공하는 기능 중 하나(상속받고있으니까)
  • Profile : 어떤 설정을 사용할 것인가? 기본으로 적용되는 것이 아닌 다른 프로파일에 의해 프로그램을 실행하고 싶은 경우(예를 들어 테스트용으로 실행하는 경우와 실제가 다른 경우)

Environment Property

  • 다양한 Property 관련된 설정을 읽어올 수 있고 사용할 수 있다.
  • Springboot 강의 참고

MessageSource

  • ApplicationContext가 가지고 있는 다른 기능
  • 메세지를 지원하는 기능으로 ReloadableMessage 사용할 때 용이함.

ApplicationEventPublisher

  • Event 기반의 프로그래밍을 할 때 이벤트를 발생시키는 기능을 제공한다.

ResourceLoader

  • 파일을 읽어오거나 Resource 관련해서 작업을 하고 싶을 때 ApplicationContext가 상속받고 있는 ResourceLoader 를 사용.

Resource and Validation

Resource 추상화

  • Resource를 읽어오는 경로 및 과정을 추상화하여 제공한다.
  • ApplicationContext 의 타입에 맞게 Resource를 읽어오는데 이 방법은 상대적으로 모르는 사람이 많기 때문에 접두어를 사용해서 읽어오는 것을 추천한다
  • 뿐만 아니라 대부분의 경우 WebApplicationContext(ServletWebContext)를 사용할 것이기 때문에 File , Classpath등으로 읽어오는 경우 접두어를 사용해서 읽는 것이 좋다.

Validation 추상화

  • 어플리케이션에서 사용하는 객체를 검증하기 위한 추상화
  • LocalValidatorFactoryBean → Validator 의 구현체로 이 자동으로 등록된다.
  • 간단한 경우 기본적으로 제공하는 Validator 기능을 사용하면 되고
  • 복잡한 비즈니스 로직에 의해 검증하는 경우 본인이 구현하면 된다.

Data binding

  • 데이터 바인딩 ? 사용자가 입력한 값을 어플리케이션 도메인에 동적으로 할당하는 것. 사용자의 입력은 일반적으로 문자열인데 객체가 가지고 있는 필드의 타입은 다양하다. 이러한 부분을 동적으로 할당하기 위해 변환기를 스프링은 지원하는데 DataBinder라는 인터페이스를 통해서 제공하고 있다.
  • Data binding 추상화 PropertyEditor
    • 옛날 버전
    • 기본적으로 문자열과 객체타입간의 변환만을 제공한다.
    • 다양한 한계존재(쓰레드 세이프하지 않다 등등)
  • Formatter
    • 기본적으로 등록되어 있는 데이터 바인더 + 자신이 설정한 데이터 바인더를 포함하여
    • 요청이 들어오면 설정되어 있는 것으로 데이터 바인딩 과정을 거친 후 데이터를 받는다.
  • SpEL
    • Spring expression Language : 스프링 내에서 여러가지 객체 및 값을 사용할 수 있도록 지원하는 스프링 전용 언어
    • 필요할 때 사용법을 보면 될듯함. 스프링 전반에 걸쳐서 사용됨.

Aop

개념

  • Spring Aop + Java Aop(AspectJ)
  • 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법
  • 주된 사용 → 성능 측정이나 Transaction 처리 등등 비즈니스 로직과 관련되어 있지만 클래스에 포함되기엔 애매하고 다양한 곳에서 사용되는 기능들을 하나로 모으는 작업
  • Aspect , Target , Advice, Joint Point, Pointcut
    • Aspect : 하나의 모듈(묶음)을 의미하고
      • Advice : 해야 할 일
      • Pointcut : 어디에 적용해야 하는가? 위치
    • Target : 적용이 되는 대상
    • Joint Point : 언제 호출할 것인가 ? 예를 들어 생성될 때, 특정 메서드가 실행될 때 등등

AOP 적용 방법

  • 컴파일 : 바이트 코드 조작 → AspectJ
  • 로드 타임 : 컴파일된 후 클래스가 로드되는 시점에서 → AspectJ
  • 런타임 : 빈을 만들 때 프록시 빈을 만들어서 그 프록시 빈에서 AOP를 실행하고 프록시 내부의 실 제 메서드를 실행한다. → Spring Aop
  • 프록시 AOP
  • @AOP → Aspect
  • Null-saftey

0개의 댓글