본문 바로가기

프로그래밍/spring

[스프링 입문] 스프링 빈과 의존관계

시작에 앞서 이 글은 인프런 김영한 님의 강의를 정리하며 쓴 글입니다.

웹 백엔드를 공부하시는 분이라면 꼭 김영한님의 강의를 들어보시길 추천합니다.

 

스프링 컨테이너와 의존관계 설정 방법

우리는 이전에 멤버 객체를 만들고 멤버 서비스를 통해 가입하고, 레포지토리에서 데이터를 조회하는 기능을 구현했습니다. 이제는 회원 가입 결과를 HTML로 보여주기 위해 컨트롤러가 큰 역할을 할 차례입니다.

컨트롤러가 서비스를 통해서 회원 가입하고 데이터를 조회하려면 이들 간에는 의존관계가 필요합니다. 여기서는 스프링 컨테이너를 활용하여 의존관계를 설정하는 방법에 대해 알아보겠습니다.

 


 

 

컴포넌트 스캔으로 의존관계 설정

@Controller, @Service, @Repository 어노테이션이 붙은 클래스는 스프링 컨테이너가 해당 객체를 등록하고 관리합니다. @Autowired 어노테이션을 이용하면 해당 객체가 필요한 곳에서 스프링 컨테이너에서 가져와서 사용할 수 있습니다.

예를 들어, @Service 어노테이션이 붙은 서비스 클래스에 @Autowired를 사용하면 스프링 컨테이너가 해당 서비스를 주입해줍니다.

 

@Service
public class MemberService {
    
    @Autowired
    private MemberRepository memberRepository;

    //... 기타 메서드들
}

 

그리고 @Repository 어노테이션을 사용한 레포지토리 클래스도 동일하게 @Autowired로 주입할 수 있습니다.

 

자바 코드로 직접 빈 등록

또 다른 방법은 자바 코드로 직접 빈을 등록하는 것입니다. @Configuration 어노테이션이 붙은 클래스를 만들고, 그 안에서 @Bean 어노테이션을 이용하여 각 빈을 등록할 수 있습니다.

 

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    //... 다른 빈 등록들
}

 

 

여기서 @Configuration 어노테이션이 붙은 클래스는 스프링 설정 정보를 담은 클래스로 인식되어, 여기서 @Bean으로 등록한 메서드들이 빈으로 관리됩니다.

 

둘 중 어떤 방법이 더 좋은지는 상황에 따라 다르지만, 컴포넌트 스캔이 간편하고 빠르게 설정을 할 수 있는 방법이라면, 자바 코드로 직접 빈을 등록하는 것은 나중에 데이터베이스 설정 등을 바꿔야 할 경우에 유리할 수 있습니다.