인프런 김영한님의 강의를 듣고,
내용을 정리하며 저의 생각도 정리하였습니다.
영한님의 스프링 핵심원리 - 기본편을 정리해본다.
사실 오래전에 강의를 들었지만, 제대로 정리하지 않아서 그런지 자꾸 잊혀진다.
강의를 듣는것이 중요한 것이 아니라, 강의를 듣고 내것으로 만드는 것이 중요함을 새삼 깨닫는다.
스프링을 제대로 공부해본 적이 없어서 이 강의는 충격으로 다가왔다.
처음 회사를 갔을때, 무엇인지도 모르고 사용했던 것들을 하나씩 알아가는 즐거움이란...ㅎㅎ
배워야하는것
이 강의에서 내가 배워야하는건 명확하다
바로 스프링의 핵심원리의 기본적인 내용을 이해하는 것
먼저 목차를 살펴보면
- 객체지향설계와 스프링
- 스프링 핵심 원리 이해 1 - 예제 만들기
- 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용
- 스프링 컨테이너와 스프링 빈
- 싱글톤 컨테이너
- 컴포넌트 스캔
- 의존관계 자동 주입
- 빈 생명주기 콜백
- 빈 스코프
- 다음으로
다음과 같이 구성되어 있다.
각각의 챕터를 살짝 요약해보면 다음과 같다.
객체지향설계와 스프링 - [스프링 핵심원리 - 기본편] 내용 정리1
- 객체지향은 프로그래밍을 독립된 단위(객체)로 파악하고자 함
- 객체는 메세지를 주고 받으며 데이터를 처리(협력의 관계)
- 역할과 구현으로 구분(다형성)
- 확장 가능한 설계
- 스프링은 객체지향의 특징을 가장 잘 살리는 프레임워크
객체지향의 특징을 간단하게 알려주고, 객체지향적인 코드를 구현한다.
( 이는 스프링의 핵심원리가 객체지향의 특징을 가장 잘 살리면서 편하게 구현할 수 있기 때문에 )
그러다보면, 귀찮고 불편한 포인트가 등장하게 되는데, 그때 바로 스프링의 개념이 들어가게 된다.
( fixDiscountPolicy → rateDiscountPolicy 로 변경하는 상황 )
스프링 컨테이너와 스프링 빈 - [스프링 핵심원리 - 기본편] 내용 정리3
- AppConfig를 통해 관심사를 분리하고, 의존관계를 주입
- 외부에서 의존관계를 설정 = 의존관계주입(DI)
- 제어흐름을 직접 제어하지 않고 외부에서 관리 = 제어의 역전(IoC)
- AppConfig는 스프링 컨테이너의 역할
- 스프링 컨테이너 = ApplicationContext(인터페이스)를 객체로 구현하여 사용
- 스프링 빈 = 스프링 컨테이너에 의해 관리되는 객체
- @Configuration 애노테이션 = 스프링의 설정을 담당하는 클래스로 인식하도록 지정
- @Bean 애노테이션 = 해당 메소드를 스프링 빈으로 등록
싱글톤 컨테이너 - [스프링 핵심원리 - 기본편] 내용 정리4
- 스프링은 싱글톤의 문제점을 해결하면서, 객체를 싱글톤으로 관리
- 스프링 컨테이너 덕분에 고객의 요청때마다 객체를 효율적으로 재사용
- @Configuration 애노테이션 필수
컴포넌트 스캔 & 의존관계 자동주입 - [스프링 핵심원리 - 기본편] 내용 정리5
- 직접 등록할 빈이 많아지면 관리하기 어려움
- @ComponentScan 애노테이션 = @Component 애노테이션이 붙어있는 모든 클래스를 스캔하여 스프링 빈으로 등록
- @Autowired 애노테이션 = 설정 정보 클래스에서 직접 객체를 생성하지 않아도, 스프링이 관리하는 대상으로 인식하고 의존관계를 주입해줄 수 있다.
- 새로운 서비스를 만들때 해당 클래스에 @Component 애노테이션을 붙여주고, 그 안에서 의존관계를 설정할 부분에 @Autowired만 입력해주면 되어 편리한 관리가 가능
- @Controller, @Service, @Repository 애노테이션에는 @Component 애노테이션이 포함
- 의존관계 주입 시 생성자 주입을 사용할 것을 권장
- 대부분의 의존관계 주입은 '불변'일때 좋은 설계
- 프레임워크 없이 ONLY 자바코드로 테스트 진행 시 다른 주입방법은 NPE을 일으켜 불편하다('누락')
- @RequiredArgsConstructor 애노테이션 사용 시 해당 서비스에 final이 붙어있는 필드를 모아 생성자를 자동으로 생성
- + 생성자가 딱 1개만 있으면, @Autowired 생략 가능
빈 생명주기 콜백 - [스프링 핵심원리 - 기본편] 내용 정리6
- 스프링 빈은 객체 생성 → 의존관계 주입이라는 라이프 사이클
- 초기화 작업은 의존관계 이후 호출
- 스프링은 초기화 & 소멸 콜백을 실행해주는 기능이 있다
- 인터페이스(InitalizingBean, DisposableBean)
- 초기화 & 소멸 메소드 지정 = @Bean(initMethod = "init", destroyMethod = "close")
- 애노테이션 @PostConstruct, @PreDestory
빈 스코프 - [스프링 핵심원리 - 기본편] 내용 정리7
- 싱글톤 = 기본, 스프링 컨테이너의 시작 ~ 종료까지 유지되는 가장 넓은 범위
- 프로토타입 = 빈의 생성, 의존관계 주입까지만 관여, 소멸은 신경 X
- 웹(request, session, application)
'Spring > 핵심원리' 카테고리의 다른 글
[스프링 핵심원리 - 기본편] 내용 정리7 (0) | 2023.09.04 |
---|---|
[스프링 핵심원리 - 기본편] 내용 정리6 (0) | 2023.08.30 |
[스프링 핵심원리 - 기본편] 내용 정리5 (0) | 2023.08.27 |
[스프링 핵심원리 - 기본편] 내용 정리4 (0) | 2023.08.27 |
[스프링 핵심원리 - 기본편] 내용 정리3 (0) | 2023.08.22 |