인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

곽장현님의 프로필 이미지
곽장현

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

프로젝트 설정과 메모리 저장소

scanbasepackages 관련 질문입니다.

작성

·

8

0

image.png

위 설명에 대한 의문이 들어서 질문드립니다.

 

@SpringBootApplication(scanBasePackages = "hello.itemservice.web")

위와 같이 하지 않고

@SpringBootApplication

이렇게만 해도 실행되는데는 문제가 없는데

굳이 넣는 이유가 뭔지 궁금합니다.

 

혹시 성능과도 연관이 있나요?

답변 2

0

안녕하세요. 곽장현님, 공식 서포터즈 y2gcoder입니다.

AI 인턴의 답변에 덧붙여서 말씀드리자면 해당 강의에서는 컴포넌트 스캔 범위를 제한하기 위해서입니다.

강의 특성상 여러 DB 접근기술 구현체를 교체하게 될텐데, 교체하는 과정을 명시적으로 보여주기 위해 수동으로 빈을 등록하게 됩니다! 이를 위해 자동으로 컴포넌트를 스캔에 등록하는 범위를 좁혀준 것입니다 🙂

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

곽장현님이 올려주신 질문에 대해 설명드리겠습니다.

@SpringBootApplication(scanBasePackages = "hello.itemservice.web")과 같이 특정 패키지를 지정하는 것은 주로 성능 최적화와 관련이 있으며, 몇 가지 이유로 사용됩니다:

  1. 컴포넌트 스캔 범위 제한: 지정한 패키지만을 대상으로 컴포넌트 스캔을 하게 되므로, 전체 애플리케이션에서 관리해야 할 빈의 수를 줄이고 초기 로드 시간을 단축할 수 있습니다.

  2. 명확한 경계 설정: 애플리케이션의 구조가 복잡해지면, 어떤 클래스가 어떤 모듈의 일부인지 명확하게 구분하기 위해 스캔 범위를 설정할 수 있습니다.

  3. 의존성 문제 방지: 무분별한 스캔은 의도치 않은 부작용이나 의존성 충돌을 일으킬 수 있습니다. 특정 패키지에 한정함으로써 이를 방지할 수 있습니다.

적어도 실행 측면에서는 문제가 되지 않지만, 위와 같은 이유로 scanBasePackages 옵션을 사용하는 경우가 있습니다. 대규모 프로젝트에서는 이러한 최적화가 특히 중요할 수 있습니다.

다음의 링크들을 통해 관련 내용을 더 자세히 확인할 수 있습니다:
- Component Scan 개념과 활용하기
- 스프링 부트의 @SpringBootApplication 내부

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

곽장현님의 프로필 이미지
곽장현

작성한 질문수

질문하기