프레임워크 vs 라이브러리

양성준·2025년 3월 10일

스프링

목록 보기
2/49

프레임워크

"소프트웨어 개발을 위한 뼈대(기반 구조)를 제공하는 도구로, 애플리케이션의 전체적인 제어 흐름을 관리하는 역할"

  • 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 기능을 갖추고 있는 골격, 뼈대를 제공
  • 앱/서버 등의 구동, 메모리관리 등 공통된 부분은 프레임워크가 관리하고, 사용자는 프레임워크가 정해준 방식대로 클래스, 메소드를 구현
  • 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합
  • 개발자가 코드를 작성하고 프레임워크가 실행
    => 개발자는 프레임워크의 규칙을 따라야만 한다. (제어의 흐름을 프레임워크에 위임)

대표적인 프레임워크에는 Spring, Spring boot, Django, React, Vue.js 등이 있다.

라이브러리

"특정 기능을 수행하는 코드의 모음으로, 개발자가 필요할 때 직접 호출하여 사용"

  • 개발자들이 이미 만들어놓은 기능을 제공
    ex) List 자바 표준 라이브러리에서는 get, add, remove 등의 다양한 기능이 이미 구현되어 있어, 가져다 쓰기만 하면 됨
  • 단순 활용가능한 도구들의 집합
  • 미리 작성된 코드, 변수, 함수, 클래스가 포함된다.
  • 개발자가 코드를 실행하는 과정에서 필요한 기능을 직접 호출

대표적인 자바 표준 라이브러리에는 Math, File, Buffer, List, String 등이 있다.

제어의 흐름 주체와 사용 방식

1) 프레임워크의 제어의 흐름과 사용 방식

  • 개발자가 프레임워크의 규칙을 따라야 하며, 제어 흐름을 프레임워크가 관리함.
  • 프레임워크는 애플리케이션의 실행 흐름을 결정하고, 개발자는 필요한 코드를 구현하여 등록하는 방식.
  • 즉, 개발자가 작성한 코드를 프레임워크가 호출하는 구조. (IoC: Inversion of Control, 제어의 역전 적용)
  • 개발자는 프레임워크가 제공하는 애플리케이션의 구조를 기반으로 코드를 구현해야 한다.

제어의 역전(IoC)
: 개발자가 작성한 객체나 메서드의 제어를 개발자가 아니라 외부에 위임하는 설계의 원칙

2) 라이브러리의 제어의 흐름과 사용 방식

  • 개발자가 필요할 때 직접 호출하여 사용하는 코드 모음으로, 제어 흐름은 개발자가 직접 관리함 (IoC 적용 X)
  • 개발자가 원하는 기능을 제공하는 라이브러리를 직접 호출하고, 실행 흐름을 직접 결정함.
  • 프레임워크와 달리, 개발자가 애플리케이션 구조를 따를 필요가 없으며, 필요할 때 선택적으로 호출

예시

1) Spring Framework

  • Spring Framework는 IoC(제어의 역전) 원칙을 적용하여 애플리케이션의 실행 흐름을 관리함.
  • 개발자는 Spring이 제공하는 규칙을 따르며, Spring 컨테이너가 객체의 생성과 주입을 담당함.

Spring의 DI (IoC 컨테이너가 의존성을 주입해줌)

@Repository
public class SimpleRepository {
    public String getMessage() {
        return "Hello, Spring!";
    }
}

@Service
public class SimpleService {
    private final SimpleRepository repository;

    // 생성자 주입 
    public SimpleService(SimpleRepository repository) {
        this.repository = repository;
    }

    public String fetchMessage() {
        return repository.getMessage();
    }
}
  • Spring이 SimpleService 객체를 생성할 때, IoC 컨테이너가 SimpleRepository를 자동으로 주입하여 생성한다.
  • 즉, 개발자가 객체를 직접 생성하지 않고, 프레임워크가 제어 흐름을 담당!
  • DI는 IoC를 구현하는 방법 중 하나이다.

2) 자바 표준 라이브러리

public class MathExample {
    public static void main(String[] args) {
        int a = 30;
        int b = 50;
        int maxValue = Math.max(a,b); // 필요할 때 직접 호출하여 사용
        System.out.println(maxValue);
    }
}
  • 개발자가 필요할 때 Math.max()을 직접 호출하여 사용함.
  • 제어 흐름을 개발자가 직접 관리하며, 필요할 때만 라이브러리를 호출!

결론

  • 프레임워크는 애플리케이션의 실행 흐름을 관리하며 (IoC), 개발자는 프레임워크의 규칙을 따름.
  • 라이브러리는 특정 기능을 제공하며, 개발자가 필요할 때 호출하여 사용함.
  • Spring Framework는 IoC를 적용하여 객체 생성과 실행 흐름을 제어하며, 일반 Java 라이브러리는 개발자가 직접 제어해야 함.

참고 - https://sharonprogress.tistory.com/169
https://idkim97.github.io/2022-08-16-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%20vs%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC/#google_vignette

profile
백엔드 개발자를 꿈꿉니다.

0개의 댓글