Spring Framework 탄생 / 프레임워크와 라이브러리의 차이점에 대하여

썬쑨·2025년 3월 16일

Spring

목록 보기
1/12

1. Spring Framework의 탄생 배경

Spring Framework가 탄생하기 전, 개발자들은 EJB(Enterprise Java Bean)를 사용하였지만 이를 이용한 개발을 어려워 하였다. EJB는 분산 객체를 대규모로 처리하기 위한 기술로 잘 만들어졌지만 특정 기술에 의존적이고 사용하기 어려웠기 때문이다. 복잡성과 어려움 속에서, 기존의 단순한 자바 객체(POJO, Plain Old Java Object)를 활용하자는 움직임이 생겨났다.
이러한 상황에서 로드 존슨은 약 30,000줄에 달하는 코드인 Spring을 개발하였다. 2002년 로드 존슨은 EJB의 근본적인 문제점을 지적하며, EJB 없이도 충분히 확장 가능하고 고품질의 애플리케이션을 개발할 수 있음을 보여주는 책을 출간하였다.

Spring은 EJB의 문제를 해결하고자 경량화된 솔루션을 제공하였으며, 또한 의존성 주입(DI)과 제어의 역전(IoC) 개념을 도입하였다. 이러한 기능을 통해 개발자는 유연한 코드 작성과 재사용이 용이해졌으며, 프레임워크나 라이브러리에 종속되지 않고 순수 자바 객체 기반의 프로그래밍 모델로 애플리케이션 개발이 가능해졌다.

2. 프레임워크 / 라이브러리

2.1 프레임워크 / 라이브러리란?

프레임워크는 소프트웨어 개발의 기본 구조와 흐름을 제공하는 틀(Framework)이다. 개발자는 이 틀 안에서 필요한 코드를 작성하여 프로그램을 완성한다. Spring Framework와 Django, React.js가 이에 해당한다.

라이브러리는 특정 기능을 수행하는 코드의 모음으로, 개발자가 필요할 때 직접 호출하여 사용한다. 예시로 Apache Commons, Numpy가 있다.

2.2 프레임워크와 라이브러리의 차이점

프레임워크와 라이브러리 모두 개발을 도와주는 코드의 집합이지만, 주요한 차이점이 있다.

  1. 제어 흐름의 주체
  • 프레임워크는 제어의 역전(IoC) 원칙을 따른다. 즉, 개발자가 프레임워크를 호출하는 것이 아니라, 프레임워크가 개발자가 작성한 코드를 호출한다. 프레임워크가 애플리케이션의 흐름을 주도하며, 개발자는 프레임워크가 요구하는 틀에 맞춰 코드를 작성해야 한다.
  • 라이브러리는 개발자가 필요할 때 직접 호출하여 사용하는 코드 모음이다. 흐름을 개발자가 직접 제어하며, 라이브러리는 특정 기능을 제공하는 보조 도구 역할이다.
  1. 사용 방식
  • 프레임워크를 사용하면 전체적인 구조를 따르게 되며, 정해진 방식으로 코드를 작성해야 한다. 이를 따르지 않으면 원하는 기능을 구현하기 어렵다. 또한 개발자는 프레임워크가 제공하는 기능을 확장하거나 재정의하는 방식으로 애플리케이션을 개발하기에 직접 구현해야 하는 부분이 줄어든다.
  • 라이브러리는 필요할 때 호출해서 사용하는 방식이므로 자유도가 높다. 개발자가 원하는 방식으로 라이브러리를 선택하고 조합하여 사용할 수 있다.

Spring Framework같은 경우 IoC 컨테이너를 기반으로 동작하여 개발자가 직접 객체를 생성하고 관리하는 것이 아니라, Spring이 객체의 생성과 초기화, 소멸, 의존성 주입을 관리한다. 예를 들어, @Component@Service와 같은 어노테이션을 사용하면, Spring이 해당 클래스를 자동으로 관리하고 필요한 곳에 주입을 해준다.

@Repository
public class JCFUserRepository{
   ... // Spring이 실행되면 Repository를 자동으로 초기화하고 필요한 곳에서 사용할 수 있도록 해줌.
}

Java Library같은 경우 개발자가 필요할 때 직접 호출하여 사용하는데, 예를 들어서 JSON을 다루기 위해 Jackson 라이브러리를 사용할 경우, ObjectMapper객체를 직접 생성하고 writeValueAsString()를 호출하여 JSON을 파싱한다.

import com.fasterxml.jackson.databind.ObjectMapper; // 라이브러리 호출

public class JSONEx{
	...
    ObjectMapper om = new ObjectMapper();
    User user = new User("kim", 20);
    
	String objectToJson = mapper.writeValueAsString(user);
}

<출처>
https://spring.io/blog/2006/11/09/spring-framework-the-origins-of-a-project-and-a-name

https://www.sencha.com/blog/difference-between-framework-vs-library-snc/

https://ittrue.tistory.com/370

profile
천천히 굴러갑니다!

0개의 댓글