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

발행: (2025년 12월 31일 오전 01:45 GMT+9)
5 분 소요
원문: 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 어노테이션과 같은 개념들이 자연스럽게 이해됩니다.

0 조회
Back to Blog

관련 글

더 보기 »

분리를 분리하자

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