Spring Framework Java 구성 파일에서 자동 연결 구현

시에나·2026년 1월 7일

스프링 기초

목록 보기
2/13
post-thumbnail

이번 단계에서는 단순히 하나하나의 Bean을 만드는 것을 넘어서, Bean들의 이름표를 바꿔 달고(커스텀 이름), Bean들을 서로 조립(관계 형성)하는 방법을 배울겁니다.

마치 레고 블록(Bean)을 각각 만들고, 그 블록들을 합쳐서 완성된 장난감(Person)을 만드는 과정과 같습니다.


1. 이름표 바꿔 달기 (Custom Bean Name)

원래 Bean의 이름은 메서드 이름과 똑같습니다. 하지만 @Bean(name = "...")을 쓰면 내가 원하는 이름표를 붙일 수 있습니다.

  • 코드 상황:
    원래는 address였던 메서드에 name="address2"라는 이름표를 붙였습니다.
  • 결과:
    이제 스프링에게 "address 주세요"라고 하면 못 알아듣습니다. "address2 주세요"라고 해야 찾아줍니다. 그래서 App02 실행 파일에서 getBean("address2")로 이름을 바꿔서 불러야 합니다.

2. 이미 만든 블록 재사용해서 조립하기 (Bean 간의 관계)

Person이라는 큰 객체를 만들 때, 이미 만들어둔 name, age, address Bean을 가져와서 합치는 방법입니다. 두 가지 방법이 있습니다.

방법 A: 직접 메서드 호출하기 (person2MethodCall)

  • 설명: 같은 설정 파일 안에 있는 메서드(name(), age())를 직접 실행해서 값을 가져오는 방식입니다.
  • 코드:
@Bean
public Person person2MethodCall() {
    // 이미 있는 name(), age() 메서드를 호출해서 재사용!
    return new Person(name(), age(), address()); 
}
  • 비유: 요리사가 "냉장고에 있는 재료(Bean) 좀 꺼내줘"라고 직접 명령하는 것과 같습니다.

방법 B: 스프링에게 가져다 달라고 하기 (파라미터 주입, person3MethodCall)

  • 설명: 메서드의 괄호(파라미터) 안에 필요한 것을 적어두면, 스프링이 알아서 맞는 Bean을 찾아서 넣어줍니다.
  • 코드:
@Bean
// 괄호 안에 필요한 걸 적으면 스프링이 자동으로 채워줍니다 (name, age, address3)
public Person person3MethodCall(String name, int age, Address address3) {
    return new Person(name, age, address3);
}
  • 비유: 요리사가 "여기 양파랑 당근 좀 준비해 줘"라고 주문서(파라미터)에 적어두면, 보조 요리사(스프링)가 알아서 딱 맞는 재료를 손에 쥐여주는 것입니다. 이를 '의존성 주입(Dependency Injection)'이라고도 부릅니다.

3. "주소(Address)가 두 개라서 헷갈려요!" (에러의 원인)

코드 마지막 부분에 주석 처리된 System.out.println(context.getBean(Address.class)); 부분이 보이시나요?

  • 문제: 스프링에게 "주소(Address) 타입인 Bean 좀 줘"라고 요청했습니다.
  • 현실: 지금 메뉴판(Configuration)에는 주소 타입이 address2, address3 이렇게 두 개나 등록되어 있습니다.
  • 에러: 스프링은 "둘 중에 뭘 달라는 거야?"라며 헷갈려서 에러(Exception)를 냅니다. 강의에서 "일치하는 Bean이 한 개 있어야 하지만... 예외를 출력합니다"라고 한 부분이 바로 이것입니다.

요약: 오늘 배운 것

  1. 이름 변경: @Bean(name="새이름")으로 Bean 이름을 내 맘대로 바꿀 수 있다.
  2. 조립(관계): 새로운 Bean을 만들 때, 기존에 만든 Bean을 메서드 호출이나 파라미터로 가져와서 합체할 수 있다.
  3. 중복 주의: 똑같은 타입(Address)의 Bean이 여러 개 있으면, 그냥 달라고 했을 때 스프링이 헷갈려 한다.

0개의 댓글