본문 바로가기

Develop/Backend 가이드

[Spring] 빈 Bean

반응형

Spring Bean
Spring Bean

빈 Bean

Bean 은 Spring framework 에서 앱을 구성하는 기본적인 객체입니다. 개발자는 Bean 을 정의하고 활용하고, Container 는 개발자가 정의한 Bean 을 객체로 만들어 관리하고 개발자가 필요로 할 때 제공합니다. 따라서 개발자는 Bean 을 어떻게 정의하고 사용하는지 알고 있어야만 Spring framework 를 사용할 수 있습니다.

    // Bean 은 Annotations 로 쉽게 정의할 수 있다.
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }

Bean 은 기본 객체이기 때문에 무엇이든지 가능합니다. 다만 Bean 은 BeanDefinition 으로 정의되며, BeanDefinition 에 따라 활용하는 방법이 달라지게 됩니다. BeanDefinition 속성에 따라 Container 가 Bean 을 어떻게 생성하고 관리할지 그리고 Bean 간의 관계를 어떻게 풀어나갈지를 결정하게 됩니다. Bean 간의 관계를 풀어나간다는 말의 의미는 Bean 들 사이에 존재하는 종속성을 해결한다는 뜻입니다. 즉 Dependency Injection 이 동작하도록 Container 는 Bean 을 생성하고 관리합니다.

Bean 종속성

Container 는 개발자를 대신하여 각 Bean 이 생성될 때 필요한 객체를 전달합니다. 이를 Dependency Injection 이라 합니다. 문제는 종속 관계가 환형, Bean 간에 서로 종속되는 관계를 가질 때 발생합니다. 이 때 BeanCurrentlyInCreationException 라는 예외를 마주치게 됩니다.

이 예외를 근본적으로 해결하는 방법은 서로에게 종속되지 않도록 관계를 정리해주는 겁니다. 서로에게 종속되는 Bean 은 코드 간에 결합을 발생시키는, 클린하지 않은 코드입니다.

다른 해결 방법은 서로 의존하게 되는 타이밍을 다르게 설정하는 방법입니다. 객체가 생성될 때가 아닌 객체의 속성을 설정할 때 종속성을 해결하면 됩니다. 다만 근본적인 문제를 해결하는 방법이 아니기에 추천드리지 않습니다.

반응형