Spring Triangle 학습정리

업데이트:

Spring 인프런 (백기선)

강의 링크 https://www.inflearn.com/course/spring_revised_edition#

Pet Clinic

  • Dispatcher sevlet 역할이란?

  • Bean : 스프링이 관리하는 객체

  • %:firstName% 중간글자 검색

  • @Query("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.firstName LIKE %:firstName%")
    @Transactional(readOnly = true)
    Collection<Owner> findByFirstName(@Param("firstName") String firstName);
    

    * Spring Triangle

** 스프링 IoC

IoC (Inversion of Controll)

  • 제어권의 역전
  • 내가 사용할 의존성을 다른 곳에 위임하는 것
  • 스프링의 IoC 컨테이너가 빈들의 의존성을 관리해준다. 즉, 객체를 만들어 빈으로 만들고 그 빈들의 필요한 의존성을 어노테이션, 생성자 등을 통해 주입해준다.

IoC Container

  • BeanFactory, ApplicationContext
  • 역할 : 빈을 만들고 의존성을 엮어주며 제공해준다.
  • 의존성 주입은 컨테이너 안에 있는 빈 끼리만 가능하다.
  • 싱글톤으로 쉽게 만들어준다.

Bean

  • IoC가 관리하는 객체

  • applicationContext가 갖고있는 객체만 빈이다.

  • 어떻게 빈으로 등록할까?

    • @SpringBootApplication - @ComponentScan에서 선언 된 곳의 하위 패키지 클래스의 Component를 Scan 한다.

    • Component Scanning

      @Component
      @Repository
      @Service
      @Controller
      @Configuration
      
    • XML, 자바 설정 파일에 등록

      아래는 SampleController 클래스를 설정파일을 통해 빈으로 등록하는 예시이다.

      @Configuration
      public class SampleConfig() {
        @Bean
        public SampleController sampleController() {
          return new SampleController();
        }
      }
      

D.I. (의존성 주입)

  • 빈이 아닌 객체에 의존성을 주입하려하면, No qualifying bean of type 에러 발생
  • 생성자 : 가장 권장되는 수단이다. 그러나 순환참조 문제 발생하면 필드 인젝션으로 처리 가능하다.
  • Setter (with @Autowired)
  • 필드에서 주입 : @Autowired

** 스프링 AOP

AOP (Aspect Oriented Programming)

  • 객체지향적 프로그래밍
  • 다양한 AOP 구현방법
    • 컴파일 : A.java –(AOP)–> A.class (AspectJ 참고)
    • 바이트코드 조작 : A.java –> A.class –(AOP)–> 메모리 (AspectJ 참고)
    • 프록시 패턴 (스프링 AOP)

프록시 패턴

  • 기존 코드는 건들이지 않고 새 기능 추가하 기
  • @Transactional
  • 클래스를 생성하여 기존 타겟 클래스가 사용하는 인터페이스를 상속받아 새로 정의 후 사용

** 스프링 PSA

PSA (Portable Service Apstraction)

  • 편리한 인터페이스, 편의성을 제공
  • 스프링 부트에서 코드를 작성할 때 따로 서블릿 동작 코드를 작성하지 않고 사용해도 잘 작동한다.
  • 그 이유는 인터페이스 추상화로 잘 구현이 되어있고, 서블릿은 그 기반에서 작성되어 구동되기 때문이다.
  • 서블릿 / 리액티브, 톰캣 / 네티
  • 스프링 웹 MVC, 스프링 트랜잭션, 스프링 캐시
  • Transaction : All or nothing (A, B, C 전부 진행되야 동작, 하나라도 안되면 동작하지 않음)

댓글남기기