찬우의 이것저것 Chanwoo's blog

Til 스프링부트 정리

인프런 스프링부트 기본편 강의를 완강.. 정리를 해봤다.

객체 지향 설계

캡슐화, 상속, 추상화, 다형성

  • 역할구현으로 세상을 구분
  • 역할을 먼저 설계하고 그 역할을 수행하는 구현 객체를 만든다.
  • 구현이 바뀌어도 역할은 바뀌지 않아야 한다.

SOLID

  • srp 단일책임원칙 - 한 클래스는 하나의 책임만 가져야한다. - 변경에 대한 파급효과가 적도록 하기위해서.
    • ocp 개방 폐쇄 원칙
      • 확장에는 열려있으나 변경에는 닫혀있어야한다.
      • 운전자라는 역할 - 운전자 1,2,3,4,5…. (확장)
      • 클라이언트 객체를 변경하지않고 구현을 바꾸려면 별도의 조립자가 필요하다. → DI
    • LSP 리스코프 치환
      • 하위타입 인터페이스로 바꿀수있어야한다.
    • ISP 인터페이스 분리
      • 특정 기능을 하는 인터페이스 여러개가 범용 인터페이스 하나보다 좋다.
      • 인터페이스가 명확해지고 대체가능성이 높아진다.
    • DIP 의존관계 역전
      • 추상에 의존해야지 구체에 의존하면안된다.
    • 객체지향의 핵심은 다형성.
    • 하지만 다형성만으로는 쉽게 부품을 갈아끼우듯 개발할수없다.
    • OCP, DIP를 지킬수없다. 외부에서 객체를 관리하고 조립해주는 무언가가 필요하다.
    • →스프링컨테이너

스프링 핵심 기능

스프링 컨테이너, 빈

  • new AnnotationApplicationContext(AppConfig.class)
  • Config.java@Bean 들을 등록

싱글톤

  • 스프링컨테이너는 빈들을 기본적으로 싱글톤으로 관리한다.(@Scope(”singleton”))
  • 싱글톤.. 여러 클라이언트가 하나의 객체를 공유하기때문에.. 동시성이슈가 생길수있다.
  • 따라서 상태를 가지지 않도록 설계해야한다 → 가급적 읽기만 해야한다.
  • @Configuration 애너테이션을 붙여서 Config를 만들면 등록된 빈들의 싱글톤을 보장한다..
    • 없으면 만들고 있으면 있는거 주고
    • @Bean 만 써도 스프링빈으로 등록되지만 싱글톤을 보장하지는 않는다. 설정정보는 항상 @Configuration을 사용하자
    • 프로젝트 최상단에 설정정보를 놓고 스캔위치 신경안쓰고 쓰는걸 권장

컴포넌트 스캔

  • 설정정보에 @ComponentScan을 사용하면 @Component 가 붙은 빈들을 자동으로 등록해준다.

의존관계 자동주입

  • @Autowired
  • 생성자 주입
  • 세터주입
  • 필드주입
  • 롬복의 @RequireArgsConstructor를 이용해서 생성자를 한개만 만들고 @Autowired를 생략하는 생성자 주입 방법을 주로 사용하게된다.
  • @Primary주입할수있는 빈이 여러개 매칭되었을때.. 우선권을 주고싶은 컴포넌트에 사용한다.
  • Map, List로 매칭된 모든 빈을 받아와서 상황에 맞는 빈을 사용할수도있다.
  • 편리한 자동기능을 기본으로 사용하자.

빈 생명주기 콜백

  • @PreDestroy
  • @PostConstruct

빈 스코프 @Scope

  • singleton
  • prototype
  • request

커리추천

스프링입문

스프링 핵심 기본편

스프링부트 + JPA 실무완전정복 - 야생형코스

활용1 - JPA기본 - 활용1 복습 - 활용2 - 데이터JPA - QueryDSL