[Spring 입문] "IoC가 뭔데요?" 스프링 핵심 용어 8가지, 딱 3분 만에 정리!

시에나·2026년 1월 11일

스프링 기초

목록 보기
10/13

1. 등장인물과 무대 (Component, Bean, Scan)

가장 먼저 알아야 할 것은 "누가 주인공이고, 어디에 사느냐"입니다.

① @Component (이름표)

  • 의미: "스프링아, 이 클래스는 네가 좀 관리해줘!"라고 붙이는 이름표입니다.
  • 예시: MarioGame, GameRunner 클래스 위에 붙였었죠? 이 스티커가 붙으면 스프링이 챙겨야 할 식구가 됩니다.

② Spring Bean (관리받는 객체)

  • 의미: @Component 이름표가 붙어서 스프링이 실제로 관리하게 된 객체(인스턴스)를 부르는 말입니다.
  • 비유: 클래스가 '붕어빵 틀'이라면, 빈(Bean)은 스프링이 구워낸 따끈따끈한 '붕어빵'입니다.

③ Component Scan (숨은 빈 찾기)

  • 의미: 스프링에게 "어디 가서 컴포넌트를 찾아와야 하는지" 알려주는 것입니다.
  • 사용법: @ComponentScan("com.example.package") 처럼 패키지 위치를 알려주면, 스프링이 그 동네를 샅샅이 뒤져서 @Component가 붙은 애들을 다 찾아냅니다.

2. 관계 맺기 (Dependency, DI, Auto-wiring)

이제 주인공들을 찾았으니, 서로 연결해 줄 차례입니다.

④ Dependency (의존성)

  • 의미: 어떤 객체가 일을 하기 위해 필요한 다른 객체입니다.
  • 예시: GameRunner가 게임을 실행하려면 MarioGame이 꼭 필요하죠? 이때 "GameRunner는 MarioGame에 의존한다"고 합니다.

⑤ Dependency Injection (DI) (의존성 주입)

  • 의미: 필요한 부품(의존성)을 스프링이 알아서 꽂아주는(주입) 과정 전체를 말합니다.
  • 핵심: 우리가 직접 코드로 연결하는 게 아니라, 스프링이 알아서 "너 이거 필요하지?" 하고 넣어주는 것입니다.

⑥ Auto-wiring (자동 연결)

  • 의미: DI가 일어나는 구체적인 동작입니다. 스프링이 빈(Bean)을 보다가 "어? 생성자에 GamingConsole이 필요하네?"라고 인식하면, 가지고 있는 빈 중에서 딱 맞는 걸 찾아 자동으로 선을 연결해 주는 행위입니다.

3. 스프링의 철학 (IoC, Container)

이 모든 과정이 왜 혁신적일까요? 바로 주도권이 바뀌었기 때문입니다.

⑦ IoC (Inversion of Control) (제어의 역전)

  • 의미: 프로그램의 제어권이 '나(프로그래머)'에서 '스프링'으로 넘어간 것을 말합니다.
  • 비교:
  • 옛날 (내가 제어): new GameRunner(new MarioGame()) -> 내가 직접 객체를 만들고 조립함.
  • 지금 (제어 역전): @Component, @Autowired -> 나는 설정만 하고, 실제 객체 생성과 조립은 스프링이 알아서 함.
  • 왜 좋을까? 운전대가 나한테서 자율주행차(스프링)로 넘어간 것과 같습니다. 훨씬 편하고 안전하죠.

⑧ IoC Container (스프링 컨테이너)

  • 의미: 빈(Bean)의 생명주기(태어나서 죽을 때까지)를 관리하고 의존성을 엮어주는 관리자 시스템입니다.
  • 종류:
  • BeanFactory: 아주 기본적인 기능만 있음 (거의 안 씀).
  • ApplicationContext: 우리가 계속 쓰고 있는 그것! 아주 똑똑하고 다양한 기능이 있는 컨테이너입니다. (실무에서는 99.9% 이걸 씁니다.)

이것만 기억하세요

용어한 줄 요약
@Component"나 관리해줘!" 이름표
Spring Bean스프링이 관리하는 객체 그 자체
Dependency내가 일할 때 필요한 친구
Component Scan이름표 붙은 친구들 찾으러 다니기
DI (의존성 주입)친구들을 서로 소개해 주고 연결해 주기
IoC (제어의 역전)"내가 다 할게" → "스프링아 네가 다 해" (주도권 이양)
IoC Container이 모든 일을 처리하는 스프링의 핵심 엔진 (ApplicationContext)

0개의 댓글