Bean은 콩입니다.

⭐ 빈(Bean)의 유래
빈이라고 작명한 이유를 알려면, 자바로 작명한 이유부터 알아야 합니다.
자바로 작명한 이유는, 자주 마시는 커피가 인도네시아 자바 섬 커피였기 때문입니다.
농담 아니고 자바 상표에 커피잔이 있는 것도 바로 이것 때문이었습니다.
새 이름에 대한 아이디어 회의 중 이것저것 나오다가 결국 자바로 선택하게 되었다고 하네요.
아무튼 이때문에 재사용이 가능한 자바 객체를 커피콩에 비유해서 자바빈이라고 짓게 되었는데, 스프링이 등장하면서 자바빈의 개념을 확장해 스프링 프레임워크 내부에서 관리되는 객체들을 스프링 빈이라고 부르기 시작했습니다.
자바빈에서 영감을 받아 Bean이라는 단어를 사용한 이유는, 단순하고 가벼운 객체라는 뜻을 함축하기 위해서였습니다.
즉, 자바빈처럼 스프링 빈도 재사용 가능한 작은 단위의 객체들이며, 스프링 컨테이너가 이를 관리해준다는 개념이 강조된 것입니다.
따라서 스프링에서 "빈"이라는 이름이 사용된 이유는 자바에서 이미 널리 쓰이고 있던 "자바빈"의 컨벤션을 따르고, 재사용 가능한 객체라는 의미를 자연스럽게 전달하기 위해서라고 볼 수 있습니다.
⭐ 스프링 빈이란 무엇일까?
처음에는 빈이라는 개념이 조금 낯설게 느껴질 수 있지만, 쉽게 설명하자면 스프링 빈은 스프링 컨테이너에서 관리되는 객체라고 할 수 있습니다.
객체란 쉽게 말해 프로그램을 구성하는 중요한 구성 요소 중 하나인데, 그 객체들을 스프링이 알아서 관리해 주는 역할을 한다고 생각하면 됩니다.
이렇게 스프링 빈을 이해하려면 먼저 객체에 대해 간단히 짚고 넘어가야 합니다.
우리가 일반적으로 자바 프로그램을 만들 때, 다양한 객체들을 만들어서 이들이 서로 상호작용하도록 설계합니다.
예를 들어, User 객체가 있고, 그 사용자 정보를 관리하는 UserService 객체가 있을 수 있겠죠.
여기서 스프링 빈은 이런 객체들이 스프링 컨테이너라는 특별한 "상자" 안에서 만들어지고 관리되는 것을 의미합니다. 이 상자(컨테이너) 속에 들어 있는 객체들은 자동으로 서로 연결되고, 필요할 때마다 꺼내서 사용할 수 있게 됩니다.
예를 들어, 여러분이 UserService라는 클래스를 만들었다면, 이것을 스프링 빈으로 등록하면 스프링 컨테이너가 그 객체의 생애 주기(생성, 소멸)를 관리합니다.
즉, 개발자가 굳이 직접 객체를 만들고 관리하지 않아도 스프링이 알아서 처리해주는 것이죠!
⭐ 스프링 빈의 역할
✅ 객체 생성 및 관리
스프링 빈은 개발자가 직접 객체를 생성할 필요 없이 스프링 컨테이너가 객체를 대신 만들어줍니다.
예를 들어, 여러분이 UserService 빈을 등록해 놓으면 스프링이 알아서 이 객체를 만들어두고 필요할 때마다 꺼내줍니다. 이를 의존성 주입(Dependency Injection)이라고 부르죠.
✅ 의존성 관리
예를 들어, UserService가 UserRepository라는 다른 객체를 필요로 할 때, 스프링은 두 객체를 자동으로 연결해줍니다.
즉, UserService가 UserRepository에 의존하는 경우 스프링이 알아서 그 의존성을 해결해줍니다.
✅ 객체 생애 주기 관리
스프링 컨테이너는 스프링 빈의 생애 주기도 관리합니다.
빈이 생성될 때 어떤 작업을 할지, 소멸될 때 어떤 작업을 할지 등을 미리 지정해두면 스프링이 그에 맞춰 처리해줍니다.
⭐ 스프링 컨테이너에서 빈 관리 방식
스프링 컨테이너는 애플리케이션이 시작될 때 빈을 미리 생성하고, 그 후에는 필요할 때마다 빈을 제공합니다.
스프링 컨테이너는 빈의 스코프(scope)에 따라 관리 방식을 다르게 설정할 수 있습니다.
✅ 싱글톤(Singleton) 스코프
애플리케이션 내에서 딱 하나의 빈만 생성해서 사용하는 방식입니다.
대부분의 스프링 애플리케이션에서 기본적으로 사용됩니다.
✅ 프로토타입(Prototype) 스코프
요청이 있을 때마다 새로운 빈을 생성하는 방식입니다.
주로 상태를 유지해야 하거나, 각각의 사용자에 대해 별도의 인스턴스가 필요할 때 사용됩니다.
이 외에도 요청마다 빈을 생성하는 리퀘스트 스코프(Request Scope), 세션마다 빈을 생성하는 세션 스코프(Session Scope) 등이 있습니다.
⭐스프링 빈을 어떻게 등록할까?
스프링에서 빈을 등록하는 방법은 여러 가지가 있습니다.
✅ XML 설정 파일
초기 스프링에서는 applicationContext.xml 같은 XML 파일에 빈을 설정했지만, 최근에는 거의 사용되지 않습니다.
✅ 어노테이션 기반 설정
요즘 스프링에서 가장 많이 사용되는 방식으로, 클래스에 @Component, @Service, @Repository, @Controller 등의 어노테이션을 사용하여 빈을 등록합니다.
✅ 자바 설정 파일
@Configuration과 @Bean 어노테이션을 사용해 자바 클래스에서 직접 빈을 등록할 수도 있습니다. 이 방법은 좀 더 명시적으로 빈을 설정하고 싶을 때 사용됩니다.
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
}
이처럼, 스프링 빈은 우리가 직접 객체를 만들고 관리하는 수고를 덜어주며, 더 나아가 객체들 간의 관계와 생애 주기까지 관리해주는 매우 편리한 도구입니다.
이를 통해 개발자는 비즈니스 로직에 집중할 수 있고, 코드의 유지보수성과 재사용성을 높일 수 있습니다.
⭐ 스프링 빈을 이해하고 활용하는 이유
스프링 빈을 활용하면 코드의 의존성을 줄이고, 유지보수성을 높일 수 있습니다.
예를 들어, UserService가 UserRepository에 강하게 결합되어 있다면, 나중에 UserRepository를 수정해야 할 때 많은 코드를 고쳐야 할 것입니다.
하지만 스프링 빈과 의존성 주입을 통해 두 객체의 결합도를 낮추면, 변경사항이 생겨도 영향을 최소화할 수 있죠.
또한, 테스트가 용이합니다.
스프링 컨테이너가 제공하는 빈을 테스트 코드에서도 쉽게 주입받아 사용할 수 있기 때문에, 더 간단하게 테스트를 작성할 수 있습니다.
🚩 마무리
스프링 빈은 객체 생성과 관리를 자동으로 처리해주는 매우 유용한 개념입니다.
이를 통해 개발자는 비즈니스 로직에 집중할 수 있으며, 코드의 유지보수성과 재사용성을 높일 수 있습니다.
스프링 빈과 스프링 컨테이너의 개념을 이해하면 스프링 프레임워크를 더 효율적으로 활용할 수 있습니다.
📌 참고
Bean Overview :: Spring Framework
Every bean has one or more identifiers. These identifiers must be unique within the container that hosts the bean. A bean usually has only one identifier. However, if it requires more than one, the extra ones can be considered aliases. In XML-based configu
docs.spring.io
'기술 지식 쌓아가기 📚 > Backend 🍔' 카테고리의 다른 글
[Spring] 서블릿(Servlet)에 대해 알려드리겠송! 😼🍃 (3) | 2024.09.18 |
---|---|
[Spring] SpEL(Spring Expression Language)이란? Spring에서 표현식을 다루는 쉬운 방법 알아가기 🍃 (1) | 2024.09.16 |
[Spring] 스프링 컨테이너란? 의존성 주입의 마법 🍃 (0) | 2024.09.15 |
[Spring] 제어의 역전(IoC)과 의존성 주입(DI) 완벽 이해하기 🍃 (4) | 2024.09.12 |
[Spring] OOP vs AOP: 효율적인 코드 관리를 위한 소프트웨어 설계 핵심 패러다임 비교 🍃 (4) | 2024.09.09 |