INFLEARN

[스프링 핵심 원리 - 기본편] 3. 프레임워크 vs 라이브러리

ch010104 2026. 3. 12. 20:23

1. 결정적인 차이: 제어의 흐름 (Inversion of Control)

  • 라이브러리: '나'가 주체가 됩니다. 내가 필요할 때 라이브러리를 직접 호출해서 사용합니다. (내가 도구를 골라 쓰는 것) - 제어의 흐름을 개발자가 가짐
  • 프레임워크: '프레임워크'가 주체가 됩니다. 프레임워크가 정해준 규칙대로 코드를 작성하면, 프레임워크가 내 코드를 대신 실행 (틀 안에 내가 들어가는 것) - 제어의 흐름을 프레임워크가 가짐

비유로 이해하기

  • 라이브러리는 '연장'. 내가 집을 짓다가 망치가 필요하면 망치를 꺼내 쓰고, 드릴이 필요하면 드릴을 꺼내 씁니다. 언제 어떤 도구를 쓸지는 전적으로 가 결정합니다.
  • 프레임워크는 '모델하우스'. 이미 거실, 안방, 주방의 위치(틀)가 정해져 있습니다. 나는 그 안에서 벽지의 색깔을 고르거나 가구(코드)를 채워 넣을 뿐입니다. 실제 집이 돌아가게 하는 시스템은 모델하우스의 규칙을 따릅니다.

2. 예시 비교

라이브러리 (Library)

  • Java의 Math 클래스: 삼각함수나 제곱근 계산이 필요할 때 내가 직접 부릅니다.
  • Jackson (JSON 라이브러리): 객체를 JSON으로 바꿀 때 내가 메서드를 호출합니다.
  • Lombok: 반복되는 Getter/Setter를 자동으로 만들어주지만, 결국 내가 코드를 작성할 때 보조 도구로 씁니다.

프레임워크 (Framework)

  • Spring (자바): 우리가 방금 공부한 AppConfig처럼, 내가 객체를 직접 new 하지 않아도 스프링이 알아서 생성하고 조립하고 실행까지 해줍니다.
  • JUnit (테스트): 내가 main 메서드를 실행하는 게 아니라, @Test 어노테이션만 붙여놓으면 JUnit이라는 프레임워크가 내 메서드를 직접 실행합니다.
  • Android: 앱이 켜질 때 실행되는 생명주기(Lifecycle)가 이미 정해져 있고, 개발자는 그 단계에 맞는 코드만 채워 넣습니다.

3. 비교표

구분 라이브러리 (Library) 프레임워크 (Framework)
제어권 사용자(나)가 가짐 프레임워크가 가짐 (IoC)
호출 관계 내가 라이브러리를 호출함 프레임워크가 내 코드를 호출함
자유도 높음 (필요한 것만 골라 씀) 낮음 (정해진 규칙을 따라야 함)
목적 특정 기능을 수행하는 부품 애플리케이션의 전체적인 틀