1. 스프링 빈(Spring Bean)이란?

가장 간단한 한마디 정의는 다음과 같습니다.

스프링 빈(Spring Bean)이란, 스프링 IoC 컨테이너가 생성하고 관리하는 자바 객체(Object)입니다.

여기서 핵심 단어는 '관리하는' 입니다. 우리가 직접 new 키워드를 사용해 객체를 만들고 관리하는 것이 아니라, 모든 권한을 스프링에게 위임하여 스프링이 대신 만들어주고 관리해주는 특별한 객체를 '스프링 빈'이라고 부릅니다.

쉬운 비유:

개발자는 이 공장(스프링 컨테이너)에게 "이런 부품(객체)이 필요해"라고 요청만 하면, 공장이 알아서 부품을 만들고, 다른 부품과 조립까지 해서(의존성 주입) 제공해 줍니다.

기존 방식의 문제점

스프링을 사용하지 않는다면, 개발자가 직접 객체를 생성하고 연결(의존 관계 설정)해야 합니다.

// Controller가 Service를, Service가 Repository를 직접 생성
public class MemberController {
    // Controller가 Service 객체를 직접 생성하여 의존함 (강한 결합)
    private final MemberService memberService = new MemberServiceImpl();
}

public class MemberServiceImpl implements MemberService {
    // Service가 Repository 객체를 직접 생성하여 의존함 (강한 결합)
    private final MemberRepository memberRepository = new MemoryMemberRepository();
}

스프링 빈을 사용한 해결 방식

스프링은 **IoC(Inversion of Control, 제어의 역전)**와 **DI(Dependency Injection, 의존성 주입)**라는 개념을 통해 이 문제를 해결합니다.