2026-01-31

Q1. Spring Framework가 탄생하게 된 배경과 이를 통해 해결하고자 했던 문제점

Spring Framework는 기존 Java 엔터프라이즈 개발 환경의 복잡함과 높은 결합도 문제를 해결하기 위해 등장하였다.

초기 Java 서버 개발에서는 EJB(Enterprise JavaBeans)와 같은 기술을 사용했는데, 이 방식은 설정이 복잡하고 코드가 특정 기술에 강하게 의존하는 문제가 있었다. 이로 인해 개발자는 비즈니스 로직보다 환경 설정과 규칙을 맞추는 데 더 많은 시간을 써야 했고, 테스트 또한 어렵다는 한계가 있었다.

Spring Framework는 이러한 문제를 해결하기 위해 객체 간의 결합도를 낮추는 IoC(Inversion of Control, 제어의 역전)의존성 주입(DI, Dependency Injection) 개념을 도입하였다. 이를 통해 객체 생성과 관리 책임을 개발자가 아닌 프레임워크가 담당하게 되었고, 개발자는 비즈니스 로직에 집중할 수 있게 되었다.

결과적으로 Spring은 코드의 유연성, 테스트 용이성, 유지보수성을 크게 향상시키는 것을 목표로 탄생하였다.


Q2. 프레임워크와 라이브러리의 차이점과 Spring Framework 예시

프레임워크와 라이브러리는 모두 개발을 돕는 도구이지만, 제어 흐름의 주체사용 방식에서 차이가 있다.

라이브러리는 개발자가 필요할 때 직접 호출하여 사용하는 도구이다. 즉, 제어 흐름의 주체가 개발자에게 있다. 개발자는 프로그램의 흐름을 직접 제어하면서 필요한 기능이 있을 때 라이브러리의 메서드를 호출한다. 일반적인 Java 라이브러리(String, Math, Collections 등)가 이에 해당한다.

반면 프레임워크는 제어 흐름의 주체가 프레임워크이다. 개발자는 프레임워크가 정해놓은 구조와 규칙에 따라 코드를 작성하며, 프로그램의 흐름은 프레임워크가 제어한다. 이를 제어의 역전(IoC)이라고 한다.

Spring Framework는 대표적인 프레임워크로, 객체의 생성과 생명주기, 실행 흐름을 Spring이 관리한다. 개발자는 필요한 로직만 구현하면 되고, 실제 실행 시점에는 Spring이 적절한 객체를 생성하고 연결하여 동작시킨다.

정리하면, 라이브러리는 개발자가 흐름을 제어하고 필요할 때 호출하는 도구이고, 프레임워크는 전체 흐름을 제공하며 개발자는 그 틀 안에서 동작하는 코드를 작성하는 구조라고 할 수 있다.