Boot의 기본기[패스트 캠퍼스 강의]

taeeun2·2022년 5월 6일
0
post-thumbnail

@Component

  • 이 클래스는 "커스텀 빈이다."
  • @CompontentScan -> base package에서부터 모든 @Componet 검색
  • 인스턴스화 : 필요한 의존성을 모두 주입
  • 스프링 컨테이너에 등록 : 필요한 곳에 주입

빈을 만드는 방법

  1. @Compontent
  2. @Bean(in @Configuration)
  3. @Bean(in @Component) : Lite Mode

@Component vs @Bean

  1. @Component
  • class-level annotation
  • 등록하려는 빈의 클래스 소스가 편집 가능한 경우 사용
  • auto-detection에 걸림
  1. @Bean
  • method-level annotation
  • 좀 더 읽기 쉬움
  • 인스턴스화 하는 코드가 수동으로 작성됨
  • 빈의 인스턴스 코드와 클래스 정의가 분리된 구조
  • 따라서 외부 라이브러리, 써드 파티 클래스도 빈으로 등록 가능

-> 개발자가 직접 컨트롤이 가능한 Class들의 경우 : @Component
-> 외부 라이브러리들을 Bean으로 등록하고 싶은 경우 : @Bean

컴포턴트에 해당하는 스테레오 타입 애노테이션들

  • @Controller
  • @Service
  • @Repository

"컴포넌트는 빈이다."

@Configuration

"이 클래스는 각종 빈 설정을 담고 있다."
1. @SpringBootApplication 이 컴포넌트 스캔을 통해 @Configuration을 찾아냄
2. 안의 빈 설정(메소드)을 읽어서 스프링 컨테이너에 등록
3. 필요한 곳에 주입
4. 또는 각종 스프링 인터페이스의 구현에 함께 활용

"애노테이션이 의도에 맞게 사용되었는지 잘 봐주자"

  • 빈 설정은 @Configuration, 클래스 빈 등록은 @Component

@Value

  • SpEL로 프로퍼티명을 표현
  • type-safe 하지 않음
  • 필드 주입 방식을 사용할 경우,
    - 인스턴스화 이후에 주입하므로, final 쓸 수 없음
    • 생성자 안에서 보이지 않음(대안 : @PostConstruct)
  • 생성자 주입 방식이 가능
  • 프로퍼티 Releaxed binding 지원(SpEL 표현 : kebab-case only)
  • meta-data 없음

@ConfigurationProperaties

  • 자바 클래스로 매핑하므로 type-safe
  • 각 프로퍼티에 대응하는 meta-data 작성 가능
  • Relaxed binding 지원
  • 작성 방법
    - 기본
    • @Configuration 생략
    • @Bean 메소드
    • @ConstructorBinding

Spring Cache Abstraction

  • 애플리케이션에 "투명하게"캐시를 넣어주는 기능
  • 메소드, 클래스에 적용 가능
  • 캐시 인프라는 스프링 부트 자동 설정으로 세팅되고, 프로퍼티로 관리 가능

캐시가 시스템, 애플리케이션에 투명하게 자리잡는다는 말은..

  • 데이터를 통신하는 시스템 쌍방이 캐시의 존재를 모른다는 의미
  • 캐시가 있건 없건, 시스템의 기대 동작은 동일해야 한다.

캐시를 쓸 때

  • 잘 바뀌지 않는 정보를 외부 저장소에서 반복적으로 읽어올 때
  • 기대값이 어차피 같을 때
  • 캐싱해서 성능 향상, I/O 감소

주요 기능들

  • @EnableCaching : 캐시 활성화
  • @Cacheable : 캐시 등록
  • @CacheEvict : 캐시 삭제
  • @CachePut : 캐시 갱신

0개의 댓글