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

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

명수찬님의 프로필 이미지
명수찬

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

자바 코드로 직접 스프링 빈 등록하기

Configuration을 통해 Bean을 생성하는 이유

해결된 질문

작성

·

202

2

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

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
안녕하세요. 좋은 수업 감사드립니다.
 
강의를 듣던 도중 궁금증이 생겨 질문드립니다.
 
일반 자바 코드를 이용하여 Bean을 등록하는 이유를, 가상 DB에서 실제 DB가 선정되고 나면 MemmoryMemberRepository를 실제 DB를 반영시켜서 수정(혹은 새 클래스로 대체)해야 하기 때문이라고 하셨습니다.
 
이때 편의성 혹은 효율성을 위해 SpringConfig 클래스에서 return new MemoryMemberRepository();에서 리턴 값의 이름만 바꿔줘도 정상 동작 하도록 하기 위해 자바 코드로 직접 등록을 하는 게 낫다고 하셨습니다.
 
하지만 만약 MemberRepositry를 구현하는 부분(DB가 설정되었을 때)을 결국 다시 코드 작성을 해야 한다면, DbMemoryMemberRepository 상단에 @Repository 로 빈 등록을 해주면 들이는 노력은 똑같은 것 아닌가요?
 
제가 이해하기로는 Configuration에서 Bean을 등록하는 것과 Bean으로 등록하려는 클래스 위에 @Component를 기입해서 Bean을 등록하는 것이 같은 로직으로 이해했는데,
 
왜 해당 조건에서 Configuration에서 Bean을 등록하는 것이 효율적인지 잘 모르겠습니다 ㅠㅠ
 
감사합니다.

답변 1

4

안녕하세요. aud248님, 공식 서포터즈 OMG입니다.

영한님께서는 

 

라고 말씀하셨는데요,

예를 들어,

1.H2Repository

2.JDBCRepository

3.SpringDataJPARepository

4.JPARepository

5.MongoRepository

6.RedisRepository

 

등등 다양한 형태의 Repository가 쓰일 수 있다고 가정하겠습니다.

모든 Repository를 자동 빈으로 등록해놓았을 때 이 중 하나만 사용하는 형태라면,

Repository를 교체하기 위해 Repository가 자동 빈으로 등록된 코드를 탐색해야합니다.

반면, 해당 빈들에 대해 Config 파일에서 빈을 수동으로 등록한다면

여러 Repository를 탐색할 필요 없이 Config 파일에서 교체를 해주면 됩니다.

 

"Repository는 교체할 가능성이 있으니 수동으로 등록해놓고 필요할 때 마다 교체해야지" 라는 생각을 갖고 있을 때 이렇게 정한 규칙을 통해 Repository의 구현체를 교체해야하는 상황에서 바로 Config 파일을 찾아 구현체를 교체하는 가상의 개발 시나리오에서 편의성을 얘기하신 것으로 이해하시면 될 것 같습니다.


감사합니다.

명수찬님의 프로필 이미지
명수찬
질문자

답변 너무 감사합니다!! 큰 도움이 되었습니다.

명수찬님의 프로필 이미지
명수찬

작성한 질문수

질문하기