이번 주 한 일
- 스프링부트 with JPA 게시글 CRUD 완성
- 스프링 핵심 원리 기본편 1/3 수강
- 두 번째 보는건데 이렇게 좋은 강의라고 처음 봤을 때는 몰랐다. 좀 지루하기도 하지만 나름 재미가 있다..? 스프링의 핵심 개념을 공식문서보다는 쉽게 파악할 수 있어서 좋다. 강의 수강하고 스프링에 좀 익숙해지면 영어로 공식문서 읽기도 도전해봐야겠다.
- junit 테스트 맛보기
- 테스트 코드를 작성하는 게 참 재밌다. 초록불이 뜰 때마다 기분이 너무 좋다!
새롭게 배운 것 혹은 알게 된 것
DI
- 의존 관계 주입(Dependency Injection)
- 의존하는 객체를 외부에서 생성해서 넣어주는 것
DI 장점
- 의존성을 주입하게되면 유연해진다는 장점이 있다.
의존성 주입 방식
IOC (제어의 역전)
- 생성의 제어와 연관관계의 제어를 개발자가 하지 않고, 스프링에 위임한다고 해서 제어의 역전이라고 부른다.
- 스프링에서는 IOC 컨테이너가 이를 수행한다.
Bean
- Spring IoC 컨테이너가 관리하는 자바 객체를 빈이라고 부른다.
스프링 컨테이너
- 스프링 컨테이너는 스프링 빈의 생명 주기를 관리
- 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할
- IoC와 DI의 원리가 스프링 컨테이너에 적용된다.
- 개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸하지만, 스프링 컨테이너를 사용하면 해당 역할을 대신해 준다.
- 즉, 제어 흐름을 외부에서 관리하게 된다. 또한, 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다.
Bean 등록
- 스프링 IOC 컨테이너에 객체를 등록하는 것을 Bean 등록이라고 부른다.
- 스프링의 의존성 주입은 Bean에 등록된 객체 사이에서 이루어진다.
- Bean에 등록하는 것은 2가지 방법이 있다.
- 컴포넌트 스캔
- @ComponentScan가 붙은 클래스 디렉토리에서 하위로 @Component 가 붙은 클래스 Bean에 등록
- 직접 등록
- @Configuration가 있는 클래스에서 @Bean을 통해 등록
의존성 주입 과정
- 스프링이 실행될 때 IOC 컨테이너도 같이 실행
- Bean 등록된 클래스의 객체를 생성
- 2번에서 객체 생성할때 생성자 호출 (생성자 주입 방식)
- 컨테이너 안에서 의존성 주입
회고
- 스프링을 더 쉽게 이용할 수 있는 도구라고 할 수 있는 스프링부트를 사용하다보니 스프링 내부적으로 어떻게 돌아가는지 잘 모르더라도 간단한 개발을 할 때는 큰 문제가 없었다. 왜냐하면 스프링부트 내부적으로 자주 사용되는 기본 설정을 알아서 다 해주기 때문이다. 스프링으로 개발을 한다면 내부적으로 어떻게 돌아가는지 당연히 알아야 한다고 생각하지만 공부하다보면 너무 원론적이고 이론적인 부분이라고 느낄 때도 있다. 하지만 너무 중요하다. 기본이 가장 중요함!