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

조씨님의 프로필 이미지
조씨

작성한 질문수

스프링 핵심 원리 - 기본편

@Autowired 필드 명, @Qualifier, @Primary

@Primary, @Qualifier 우선순위 내용에 대해 문의드립니다.

작성

·

160

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
 
안녕하세요?
강의의 마지막 부분의 내용에 대해 문의드리고 싶습니다.
해당 내용은 다음과 같습니다.
 
-------------------------------------
@Primary, @Qualifier 활용
코드에서 자주 사용하는 메인 데이터베이스의 커넥션을 획득하는 스프링 빈이 있고, 코드에서 특별한 기능으로 가끔 사용하는 서브 데이터베이스의 커넥션을 획득하는 스프링 빈이 있다고 생각해보자.
메인 데이터베이스의 커넥션을 획득하는 스프링 빈은 @Primary 를 적용해서 조회하는 곳에서 @Qualifier 지정 없이 편리하게 조회하고, 서브 데이터베이스 커넥션 빈을 획득할 때는 @Qualifier 를 지정해서 명시적으로 획득하는 방식으로 사용하면 코드를 깔끔하게 유지할 수 있다.
물론 이때 메인 데이터베이스의 스프링 빈을 등록할 때 @Qualifier 를 지정해주는 것은 상관없다.
 
우선순위
@Primary 는 기본값처럼 동작하는 것이고, @Qualifier 는 매우 상세하게 동작한다.
이런 경우 어떤 것이 우선권을 가져갈까?
스프링은 자동보다는 수동이, 넒은 범위의 선택권 보다는 좁은 범위의 선택권이 우선 순위가 높다.
따라서 여기서도 @Qualifier 가 우선권이 높다.
-------------------------------------
 
 
마지막에 말씀하신 우선순위 순서에 대한 내용을 제가 이해한 바에 따르면 스프링은 가장 먼저 @Qualifier 이름으로 빈을 찾고, 없으면 @Primary 를 선택하게 됩니다.
 
즉, @Qualifier 를 먼저 조회한 후, @Primary 를 조회합니다.
 
그렇게 되면 @Qualifier 가 적용된 서브 db의 커넥션을 먼저 조회하고, @Primary 가 적용된 메인 db의 커넥션은 나중에  조회할 것이라는 생각이 드는데 맞는 걸까요? 
 
우선권이라는 말이 조금 헷갈리네요.
 
답변 주시면 감사드리겠습니다.
 
 

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 조씨님^^

제가 직접 정답을 알려드릴 수 도 있지만, 그러면 더 많은 것을 얻어가지 못합니다.

개발자는 궁금한 부분을 직접 코드로 테스트 해볼 때 가장 많이 배울 수 있습니다.

해당 부분을 코드로 직접 테스트해보시고, 그 결과를 공유해주세요. 그러면 함께 공부하는 분들께도 큰 도움이 될거에요.

그럼 테스트 해보시고 결과도 정리해서 공유 부탁드립니다.

감사합니다.

조씨님의 프로필 이미지
조씨
질문자

넵! 답변 주셔서 정말 감사합니다 !! 

조씨님의 프로필 이미지
조씨

작성한 질문수

질문하기