Spring/핵심원리

[스프링 핵심원리 - 기본편] 요약 정리

슈코 2023. 9. 11. 23:53
인프런 김영한님의 강의를 듣고,
내용을 정리하며 저의 생각도 정리하였습니다.

영한님의 스프링 핵심원리 - 기본편을 정리해본다.

사실 오래전에 강의를 들었지만, 제대로 정리하지 않아서 그런지 자꾸 잊혀진다.

강의를 듣는것이 중요한 것이 아니라, 강의를 듣고 내것으로 만드는 것이 중요함을 새삼 깨닫는다.

스프링을 제대로 공부해본 적이 없어서 이 강의는 충격으로 다가왔다.

처음 회사를 갔을때, 무엇인지도 모르고 사용했던 것들을 하나씩 알아가는 즐거움이란...ㅎㅎ

 

배워야하는것

이 강의에서 내가 배워야하는건 명확하다

바로 스프링의 핵심원리의 기본적인 내용을 이해하는 것

 

먼저 목차를 살펴보면

 

  1. 객체지향설계와 스프링
  2. 스프링 핵심 원리 이해 1 - 예제 만들기
  3. 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용
  4. 스프링 컨테이너와 스프링 빈
  5. 싱글톤 컨테이너
  6. 컴포넌트 스캔
  7. 의존관계 자동 주입
  8. 빈 생명주기 콜백
  9. 빈 스코프
  10. 다음으로

다음과 같이 구성되어 있다.

각각의 챕터를 살짝 요약해보면 다음과 같다.

 

 

객체지향설계와 스프링 - [스프링 핵심원리 - 기본편] 내용 정리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)