왜 스프링을 사용해야 하는가?

돔푸·2025년 4월 6일

결론적으로는 사용할 필요는 없다. 스프링 없이도 DIP를 사용하면 견고하고도 유연한 구조를 만들 수 있다. 의존성의 방향을 도메인 같이 덜 변화되는 것으로 향하게 만듦으로 이를 달성할 수 있다.

하지만 스프링을 사용하면 이 목표를 더 쉽게 달성할 수 있다.

DI

스프링의 의존성 주입 기능을 활용하면 의존성 역전 구조에서 원하는 구현체를 끼워넣기 훨씬 쉬워진다.

public class Application {
    public static void main(String[] args) {
        new LottoController(
                new InputView(),
                new OutputView(),
                new LottoService(new JdbcWinningLottoRepository(new MySqlDatabaseConnector())),
                new LottoPurchaseService(new JdbcLottoRepository(new MySqlDatabaseConnector()))
        ).run();
    }
}

기존 순수 자바를 사용하면 위와 같이 의존성을 전부 개발자가 관리해야 한다. 이는 확장성과 유연성 면에서 개발자가 귀찮게 만든다. 하지만 스프링을 사용하면 애노테이션 기반으로 의존성을 관리해주기 때문에, 개발자는 의존성에 신경쓰지 않고 개발할 수 있도록 도와준다.

@Controller
public class LottoController {

    private final InputView inputView;
    private final OutputView outputView;
    private final LottoService lottoService;
    private final LottoPurchaseService lottoPurchaseService;

    // 롬복을 통해 더 간단하게 만들 수도 있다.
    public LottoController(final InputView inputView, final OutputView outputView, final LottoService lottoService, final LottoPurchaseService lottoPurchaseService) {
        this.inputView = inputView;
        this.outputView = outputView;
        this.lottoService = lottoService;
        this.lottoPurchaseService = lottoPurchaseService;
    }

결국 스프링은 도구이다. 순수 자바로도 유연한 코드를 작성할 수 있으며, 스프링으로도 뻣뻣한 코드를 작성할 수 있다. 설계는 스프링이 아니라 개발자가 하는 것이다.

그 외

또한 스프링 코어 말고도 스프링은 수많은 기능을 제공해주는데, 이것들 역시 스프링을 사용할 이유가 된다. 예를 들어, 스프링은 JPA와도 잘 통합되어 Spring Data JPA를 활용하면 매우 손쉽게 DB 관련 기능을 개발할 수 있다.

웹 서버 기능과도 잘 통합되어 관련 의존성을 추가하고 몇가지 애노테이션만 사용하면 바로 웹 서버가 된다.

트랜잭션, 로깅, 보안과 같은 횡단관심사에 대한 기능들도 매우 잘 제공해준다.

결론

스프링은 개발자의 생산성을 높여주는 도구이다. 귀찮은 의존성관리와 DB, 웹서버, 횡단관심사 등에 대한 처리를 도맡아 하기 때문에 개발자는 정말 중요한 도메인에 신경 쓸 수 있게 된다.

따라서 스프링이 필수는 아니지만, 편리한 도구이다.

profile
나중에 또 모를 것들 모음

0개의 댓글