본문 바로가기
codeit sprint backend/weekly paper

[4] Spring

by boolynn 2026. 2. 9.

✔️ Spring Framework의 등장 배경

Spring Framework은 기존 EJB의 문제점을 해결하기 위해 등장했다. 따라서, Spring Framework의 등장 배경을 알아보기 위해서는 EJB를 먼저 살펴보아야 한다.

1. EJB(Enterise JavaBeans)

EJB는 트랜잭션 관리, 보안 처리, 원격 호출 등 복잡한 기능을 자동으로 처리해주는 기술이다. 복잡한 기술을 컨테이너가 대신할 수 있도록, 이를 통해 개발자는 비즈니스 로직에만 집중할 수 있도록 돕기 위해 등장했다.

 

2. EJB의 문제점

하지만 EJB에는 아래의 문제점이 있었다.

기술 종속성과 낮은 이식성 - 특정 WAS에 종속되어 다른 환경에서 재사용하기 어려움(이식성이 떨어짐)
- 코드를 일반 자바 클래스처럼 다루기 어려움
객체지향 설계 원칙의 훼손 - 의존 객체를 내부에서 직접 생성해 결합도가 높아짐
- 인터페이스 구조 강제로 인해 유연한 설계가 어려움
복잡한 설정 및 느린 배포 사이클 - XML을 중심으로 한 방대한 설정
- 구성 파일의 복잡성으로 인한 유지보수 비용 증가 및 사이클 시간의 증대
테스트의 제약 - 일반적인 자바 환경에서 단위 테스트가 불가능하거나 제한적
- 테스트를 위해 전체 애플리케이션 서버를 기동해야 하는 비효율성

 

3. Spring Framework의 등장

이러한 문제들을 해결하기 위해 등장한 것이 Spring Framework이다. Spring의 핵심 철학은 다음과 같다.

  • POJO: 컨테이너에 종속되지 않는 순수한 자바 객체 사용
  • IoC: 객체의 생성가 의존성 주입을 개발자가 아닌 컨테이너가 담당
  • AOP: 공통 관심사와 비즈니스 로직의 분리
  • 경량 컨테이너: WAS 없이도 단독 실행 가능

이를 통해 EJB의 등장 배경이었던 기술의 기능성은 유지하며, 문제점들을 해결한 것이 Spring Framework이다.


✔️ 프레임워크 vs 라이브러리

프레임워크와 라이브러리의 가장 큰 차이점은 제어의 역전(IoC, Inversion of Control) 여부에 있다. 즉, 전체적인 흐름을 제어하는 대상이 다르다.

1. 제어 흐름의 주체

  • 라이브러리
    • 개발자가 주체
    • 개발자가 필요할 때마다 라이브러리를 호출해서 사용한다.
  • 프레임워크
    • 프레임워크가 주체
    • 프레임워크의 틀 안에서 개발자가 코드를 작성하면, 프레임워크가 적절한 시점에 코드를 실행한다.

 

2. 사용 방식

라이브러리와 프레임워크의 사용 방식을 간단한 예제 코드를 통해 살펴보자.

  • 라이브러리: 개발자가 새로운 객체를 생성하고, 필요할 때 호출
public static void main(String[] args) {
        System.out.println("프로그램 시작");
		
        // 개발자가 필요한 라이브러리를 직접 호출한다.
        int result = Math.abs(-10); // Math.abs(a)는 절댓값을 반환하는 라이브러리
        System.out.println("결과: " + result);
		
        // 프로그램을 시작하고 끝내는 흐름을 개발자가 관리한다.
        System.out.println("프로그램 종료");
    }
  • 프레임워크: 프레임워크가 적절한 시점에 메소드를 호출
@Service
public class MyService {
    // 개발자가 main을 만들어서 실행하지 않음
    // 시스템을 구동하다가 필요한 곳에 알아서 메소드를 호출해줌(제어의 역전)
    public void doSomething() {
        System.out.println("Spring이 호출해서 시작");
        }
}