스프링 기본 - 섹션6. 컴포넌트 스캔

2023. 7. 3. 23:23·CS/김영한 스프링 강의

 

@Autowired가 뭔지, 기존에 수동으로 만들었던 AppConfig를 어떻게 자동화 하는지 알아보는 내용이다.

 

이렇게 수동으로 등록한 것과

이렇게 자동으로 등록한 것은 같은 역할을 한다.

이게 뭐냐면 AutoAppConfig는 똑같이 @Configuration이지만 @ComponentScan을 통해 AutoAppConfig가 들어있는 패키지 이하(따로 설정 가능)를 모두 스캔해서 annotation @Component가 붙은 클래스를 컨테이너에 등록한다. 다만 이렇게 하면 수동으로 했을 때 DI를 지정해줬지만 AutoAppConfig안엔 아무것도 없으므로 해당 구체화 인스턴스 생성자에 @Autowired로 어떤걸 주입하는지 알려준다.

스캔 범위 설정은 속도를 높이기 위해 가끔 필요한 듯 하다.

 

그럼 의존관계가 필요할 때 수동으로 했을 땐 new로 직접 지정해주고 @AppConfig가 싱글톤으로 알아서 해주고 하는 과정이 있었지만 자동으로 하면 컨테이너에 등록한 것을 그대로 등록해서 사용한다.

 

위 로그를 잘 보면 스캔한 것과 싱글톤 빈으로 등록되었다고 나와있음.

 

이 @Component들 중 특별한 것들 몇개를 보자. 이것들도 @Component 하위 클래스라서 @Component scan 대상에 포함된다(사실 java엔 annotation에 상하 관계는 없지만 스프링이 자체적으로 모방해서 만들었다고 한다.)

@Controller: 스프링 MVC 컨트롤러 인식

@Repository: 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.

@Configuration: 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.

@Service: 사실 특별한 처리를 하지 않는다. 대신 개발자들이 핵심 비즈니스 로직이 여기에 있겠구나 하고 비즈니스 계측을 인식하는데 도움이 된다.

 

그 외에 ComponentScan에 포함필터, 예외필터 같은걸 포함해줄 수 있다.

필터도 가끔 쓰인다. 내가 원하지 않는 건 스캔에서 회피하게 하거나(사실 이 용도) 등.

이렇게 대강 넘어가는 이유가 기본값에 맞춰서 쓰는것이 좋도록 애초에 만들어졌기 때문.

 

 

그 외에 빈으로 등록할 때 이름이 같아 발생하는 충돌 중 '자동 빈 등록 vs 자동 빈 등록'과 '자동 빈 등록 vs 수동 빈 등록'이 있는데 자동끼리는 충돌나고, 자동수동은 수동으로 덮어씌워지지만 스프링 전체를 실행할 땐 에러가 난다.

'CS > 김영한 스프링 강의' 카테고리의 다른 글

스프링 기본 - 섹션8. 빈 생명주기 콜백  (0) 2023.07.06
스프링 기본 - 섹션7. 의존관계 자동 주입  (0) 2023.07.05
스프링 기본 - 섹션5. 싱글톤 컨테이너  (0) 2023.07.03
스프링 기본 - 섹션4. 스프링 컨테이너와 스프링 빈  (0) 2023.07.02
스프링 기본 - 섹션2,3. 스프링 핵심 원리 이해 - 예제 만들기, 객체 지향 원리 적용  (0) 2023.07.02
'CS/김영한 스프링 강의' 카테고리의 다른 글
  • 스프링 기본 - 섹션8. 빈 생명주기 콜백
  • 스프링 기본 - 섹션7. 의존관계 자동 주입
  • 스프링 기본 - 섹션5. 싱글톤 컨테이너
  • 스프링 기본 - 섹션4. 스프링 컨테이너와 스프링 빈
용나리
용나리
  • 용나리
    티스토리 블로그
    용나리
  • 전체
    오늘
    어제
    • 분류 전체보기 (333)
      • 과거의 것들 (93)
        • AI Tech boostcamp (92)
      • 생각정리(고찰) (2)
      • 기술 글 (0)
      • 코딩테스트 (4)
        • C++ (0)
        • Python (4)
      • CS (121)
        • 컴퓨터 시스템 (4)
        • 코틀린 인 액션 (13)
        • 김영한 스프링 강의 (104)
      • 일지 남기기용 (11)
        • 운동 (10)
      • 개발 배포 해보기 (1)
      • 프로그래밍 언어 및 기타 (32)
        • Spring Boot (9)
        • Python (9)
        • Kotlin (1)
        • Flutter (2)
        • SQL (4)
        • Docker (3)
        • 공통 (4)
      • os (4)
        • Linux (4)
      • 기술 (17)
        • PyTorch (6)
        • Computer Vision (6)
        • NLP (1)
        • 기타 (4)
      • 제품 후기 (0)
      • 게임 (0)
        • Human Resource Machine (0)
      • 강의 (26)
        • fullstackdeeplearning_sprin.. (9)
        • 부캠 안드로이드 학습정리 (17)
      • 개인 메모 (10)
      • IT 기타 (5)
      • 논문 읽기 연습 (5)
        • Computer Vision (1)
        • NLP (0)
        • 공통 (2)
        • 그냥 메모 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pip install killed
    파이썬 실행경로
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
용나리
스프링 기본 - 섹션6. 컴포넌트 스캔
상단으로

티스토리툴바