Spring Boot에서 의존성 주입: Spring이 모든 것을 연결해 주는 방법

발행: (2025년 12월 31일 오전 01:45 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Spring Boot에서 의존성 주입: 스프링이 모든 것을 연결해 주는 방식

의존성 주입이란?

Dependency Injection (DI) 은 Spring Boot에서 느슨한 결합(loose coupling) 을 구현하기 위해 사용되는 설계 패턴입니다.

간단히 말하면: 클래스가 스스로 의존성을 생성하는 대신, 그 의존성들을 외부에서 제공받습니다 — 그리고 Spring Boot에서는 이 역할을 Spring IoC 컨테이너가 담당합니다. 이 접근 방식 덕분에 애플리케이션이 더 깔끔하고, 유연하며, 유지보수가 쉬워집니다.

간단한 예제로 DI 이해하기

예를 들어:

  • 앨리스는 케이크를 만들기 위해 프로스팅시럽이 필요합니다.
  • 앨리스는 프로스팅이나 시럽을 직접 만들지 않습니다.

대신, 프로스팅과 시럽이 외부에서 앨리스에게 주입됩니다. 이것이 바로 Spring에서 의존성 주입이 작동하는 방식입니다.

Spring Boot에서의 의존성 주입

  • 객체를 **빈(Bean)**이라고 부릅니다.
  • 빈은 IoC 컨테이너에 의해 관리됩니다.
  • 의존성은 런타임에 자동으로 주입됩니다.

클래스는 비즈니스 로직에만 집중하고, 의존성 생성에 대해서는 신경 쓸 필요가 없습니다.

의존성 주입의 장점

느슨한 결합

구성 요소가 구체적인 구현에 의존하지 않으므로, 애플리케이션을 유지보수하고 확장하기가 쉬워집니다.

유연한 설정

의존성을 외부에서 설정할 수 있어, 코드를 변경하지 않고도 손쉽게 교체할 수 있습니다.

향상된 테스트 가능성

테스트 시 의존성을 모킹하거나 교체할 수 있어, 신뢰성 높고 격리된 단위 테스트가 가능합니다.

Spring Boot에서 의존성을 주입하는 방법

1. 생성자 주입

의존성을 클래스 생성자를 통해 제공받습니다.

선호되는 이유:

  • 필수 의존성이 반드시 존재함을 보장합니다.
  • 불변성을 장려합니다.
  • 테스트가 쉬워집니다.

실제 Spring Boot 프로젝트에서는 이 방식이 권장됩니다.

2. 필드 주입

@Autowired를 사용해 클래스 필드에 직접 의존성을 주입합니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyService {

    @Autowired
    private MyRepository repository;

    // ...
}

간단하지만, 필드 주입은 다음과 같은 문제점이 있습니다.

  • 의존성이 숨겨집니다.
  • 테스트가 어려워집니다.
  • 프로덕션 애플리케이션에서는 권장되지 않습니다.

실제 프로젝트에서 의존성 주입이 중요한 이유

DI 없이:

  • 코드가 강하게 결합됩니다.
  • 변경이 여러 클래스에 영향을 미칩니다.
  • 테스트가 어려워집니다.

DI와 함께:

  • 애플리케이션이 모듈화됩니다.
  • 코드가 깔끔하고 유지보수가 용이합니다.
  • 시스템이 더 잘 확장됩니다.

의존성 주입은 깔끔한 Spring Boot 아키텍처의 기반입니다.

마무리 생각

Dependency Injection을 이해하는 것은 Spring Boot 학습에서 중요한 이정표입니다. DI가 명확해지면 빈(Bean), IoC 컨테이너, 그리고 Spring 어노테이션과 같은 개념들이 자연스럽게 이해됩니다.

Back to Blog

관련 글

더 보기 »

분리를 분리하자

소개 2025년 말 며칠 동안, 우리 팀 리더는 하루를 추가로 쉬면서 중요한 회의를 놓쳤습니다. 최근 구조조정 이후, 한 동료가 떠났습니다.