본문으로 바로가기

https://www.inflearn.com/course/spring-framework_core

 

스프링 프레임워크 핵심 기술 - 인프런 | 강의

이번 강좌는 스프링 부트를 사용하며 스프링 핵심 기술을 학습합니다 따라서 스프링 부트 기반의 프로젝트를 사용하고 있는 개발자 또는 학생에게 유용한 스프링 강좌입니다., 스프링 프레임워

www.inflearn.com

 

 

ㅇ IOC 컨테이너 1부 : 스프링 IoC 컨테이너와 빈

- BeanFactory : 인터페이스

                       bean들을 관리함, IOC 컨테이너

   > applicationcontext : beanfactory 상속, 

- Annotation이 있으면, AutoScan을 통해 Bean 객체로 등록한다.

- 스코프 

  > 싱글톤 : 하나의 프로그램 내에서 하나의 인스턴스만을 사용해야하는 상황에서 사용됨

  > 프로포토타입 : 매번 다른 객체

 

ㅇ IoC 컨테이너 2부 : ApplicationContext와 다양한 빈 설정 방법

- SpringBoot 로 시작시, pom.xml 에 spring-boot-starter-web 이 들어가 있다.

  이것만 있으면 spring-core 등 의존성있는 패키지들이 자동으로 받아와진다.

- xml에서 bean을 등록해서 설정할 수 있다. (옛날 방식 - ref, property 등)

  context:component-scan 을 통해 bean을 경로아래에 있는 어노테이션을 읽어서 등록할 수 있다.

  묶어줄때는 @Autowired, @injection을 통해 할수 있음 (Spring 2.5 부터 등장)

- applicationconfig.java 파일을 만들어서도 가능 (@Configuration)

  >  호출할때 ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);

  > config 파일에 @ComponentScan 을 붙여서, 자동으로 객체들을 스캔하여 bean 에 등록

 > 이 방법이 가장 springboot에 근접함

 

ㅇ IoC 컨테이너 3부 :Component와 컴포넌트 스캔

- Autowired

 > 1. 생성자를 통해 의존썽 삽입 (스프링 4.3부터 생략 가능)

 > 2. 필드 객체 자체 삽입

 > 3. setter를 통해 삽입

- 해당 타입의 빈이 여러개인 경우

 빈 이름으로 시도, 같은 이름의 빈 찾으면 해당 빈 사용, 못찾으면 실패

 * 해결 방법

  > @Primary 어노테이션 선언  (선호됨)

  > @Qualifier 어노테이션 선언 (id는 객체의 첫글자가 소문자인 이름)

 

 

 ㅇ IoC 컨테이너 4부: @Component 와 컴포넌트

- 컴포넌트 스캔의 범위 고려

- 싱글톤 bean의 경우, 초기 구동시 만드는데 시간이 오래걸려 실행시 오래걸릴 수 있음 ( 구동 시간 )

- 펑션을 사용한 빈 등록 (스프링5 부터 가능) : 리플렉션과 프록시를 사용안하기 때문에  성능(구동타임) 상에 이점이 있음

  

ㅇ IoC 컨테이너 5부: 빈의 스코프

- 스코프 : 싱글톤, 프로토타입 (@Scope("Prototype"))

- 프록시(프록시 패턴)를 쓰는 이유 :  A -> B 로 바로 접근하는게 아니라 B를 감싸는 C 에 접근하도록 함

           => B에 대한 의존성을 줄이기 위함 

   > proxyMode = scopedProxyMode.TARGET_CLASS or INTERFACE

- 스코프와 Thread Safe에 대해서 생각해봐야함

  > 멀티스레드 환경에서 변수에 대해 문제가 생길 수 있음

 

ㅇ IoC컨테이너 6부:Environment 1부. 프로파일

- ApplicationContext extends EnviornmentCapable

   > getEnvironment()

- 프로파일이란? bean들의 묶음

 > Enviorment라는 인터페이스로 사용

 > 프로파일 설정시 @Profile() 에 조건식도 가능

 

ㅇ IoC컨테이너 6부:Environment 2부. 프로파일

- args 값을 받아 쓰는 방법

- @value 어노테이션 사용하기

- vm 옵션의 값이 property 로 얻는 값보다 우선순위가 높음

 

ㅇ IoC컨테이너 7부: MessageSource

- 부트는 messages 라는 파일들을 자동으로 읽어줌

 

ㅇ IoC컨테이너 9부: ResourceLoader

- File.readString 은 자바 11버전부터 쓸수 있음

- classPath 로 빌드된 타겟폴더 아래에서부터 접근 가능