프레임워크 vs 라이브러리, 제어 흐름과 IoC로 명확히 이해하기
📌 Intro
프로그래밍을 하다 보면 자주 마주치는 용어가 있다. 바로 프레임워크(Framework)와 라이브러리(Library)다.
두 용어 모두 개발을 편리하게 해주는 도구지만, 그 차이는 단순한 기능의 차원이 아니라 "제어 흐름(Control Flow)"의 주체에 있다.
이 글에서는:
- 프레임워크와 라이브러리의 개념
- 제어 흐름(Control Flow) 차이
- Inversion of Control(IoC)
- React는 왜 라이브러리이고 Spring은 왜 프레임워크인가?
를 예시와 함께 정리해보려고 한다!
1. Framework란?
프레임워크는 어플리케이션 개발의 뼈대(골격)를 제공하는 구조다.
프레임워크가 프로그램의 흐름을 제어하기 때문에
개발자는 프레임워크가 제공하는 정해진 틀과 규칙에 따라 코드를 작성하기만 하면 된다.
특징
- 기본 구조 제공: 컨트롤러, 서비스 계층 등 구성 요소의 설계가 정해져 있음
- 공통 기능 내장: DB 연동, 보안, 예외 처리 등 미리 구현되어 있음
- IoC 적용: 제어 흐름을 프레임워크가 가지고 있음
예시
기술 | 설명 |
Spring | Java 서버 개발의 대표적인 프레임워크 |
Django, Flask | Python 기반 웹 프레임워크 |
Android | 안드로이드 앱 개발을 위한 프레임워크 |
Angular, Vue.js | 구조 중심의 프론트엔드 프레임워크 |
2. Library란?
라이브러리는 특정 기능을 수행하는 도구들의 집합이다.
개발자가 필요할 때 직접 가져다 써야 하며, 전체 프로그램의 흐름은 개발자가 직접 제어한다.
특징
- 기능 단위 모듈화 (예: 문자열 처리, 수학 계산 등)
- 코드 흐름은 개발자가 결정
- 단독 실행 불가
예시
기술 | 설명 |
Pandas, Tensorflow | Python의 데이터 분석/딥러닝 라이브러리 |
STL | C++의 표준 템플릿 라이브러리 |
jQuery, React | HTML 조작, UI 구성에 사용 |
Math, Arrays.sort | Java의 내장 유틸리티 |
3. 핵심 차이: 누가 "제어 흐름"을 가지고 있는가?
항목 | 프레임워크 | 라이브러리 |
제어 흐름 | 프레임워크가 제어 (IoC 적용) | 개발자가 직접 제어 |
사용 방식 | 구조 안에서 코드 작성 | 필요한 기능만 호출 |
코드 호출 | 프레임워크 ⇒ 내 코드 | 내가 ⇒ 라이브러리 코드 |
목적 | 애플리케이션 전반 구성 | 특정 기능 처리 |
예시 | Spring, Django, Angular | React, Pandas, Math |
IoC(Inversion of Control; 제어의 역전)란?
IoC란,
애플리케이션의 흐름을 개발자가 직접 구성하지 않고,
프레임워크가 제어 흐름을 가지고 있으며,
필요한 시점에 개발자의 코드를 호출하는 구조이다.
전통적인 라이브러리 중심의 구조는 흐름의 주체가 개발자였다. 개발자는 프로그램 메인 흐름과 함수 호출을 직접 구성한다. `Math.max()`나 `Arrays.sort()`처럼 필요한 메소드도 직접 호출한다.
하지만 프레임워크 중심인 IoC 구조에서는 흐름의 주체가 프레임워크이다. 프레임워크가 전체 흐름을 구성하고, 필요할 때 개발자의 코드를 호출한다.
// Spring이 주입하고 호출
@Controller
public class MyController {
@GetMapping("/")
public String home() {
return "hello";
}
}
4. React는 왜 라이브러리이고, Spring은 왜 프레임워크인가?
두 기술은 모두 대규모 애플리케이션 개발에 많이 사용되지만,
제어 흐름의 주체와 구조 제공 범위에 따라 성격이 전혀 다르다.
React는 왜 라이브러리인가?
React는 UI 구성에 초점을 둔 View Library다. 즉, "사용자 인터페이스(UI)를 어떻게 그릴지"를 다루는 데 집중한다.
💡 핵심 이유: 제어 흐름이 개발자에게 있다
- React는 UI를 그리는 함수(컴포넌트)만 제공한다.
- 애플리케이션의 구조, 예를 들면 라우팅, 상태관리, API 요청 방식 등은 개발자가 직접 선택하고 구성해야 한다.
- 필요할 때 `ReactDOM.render()`를 호출해 시작점을 만들어야 하며, 앱 전체의 흐름을 개발자가 설계한다.
즉, “필요할 때 호출하는 도구”이기 때문에, 라이브러리다.
항목 | 설명 |
제어 흐름 | 개발자가 직접 제어 |
구조 제공 | ❌ 없음 (라우팅, 상태관리 직접 구성) |
IoC 적용 여부 | ❌ 없음 |
사용 방식 | 원하는 시점에 직접 호출 |
function App() {
return <h1>Hello, React</h1>;
}
// 어디서 실행할지는 개발자가 결정
React는 구조를 제공하지 않는 UI 도구이므로, 라이브러리로 분류된다.
Spring은 왜 프레임워크인가?
Spring은 Java 기반 백엔드 전체 구조를 설계하고 통제하는 프레임워크이다.
Spring Boot까지 포함하면 서버 구동, 의존성 주입, API 구성, 보안, 데이터 연동까지 모든 구성요소가 하나의 틀 안에 있다.
💡 핵심 이유: 제어 흐름을 Spring이 쥐고 있다
- Spring은 서버 구동부터 요청 처리, 의존성 관리, 트랜잭션 처리 등 전체 흐름을 프레임워크가 주도한다.
- 개발자는 `@Controller`, `@Service`, `@Autowired` 등 정해진 규칙에 따라 코드를 작성하고,
Spring이 이를 실행하는 구조이다. - 즉, 프레임워크가 개발자 코드를 호출한다. ( ⇒ IoC 적용)
이는 전형적인 프레임워크 패턴이다.
항목 | 설명 |
제어 흐름 | 프레임워크가 제어 (IoC 적용) |
구조 제공 | ✅ (Controller, Service, Bean 등 명확한 계층 제공) |
IoC 적용 여부 | ✅ 있음 (DI, AOP 등 활용) |
사용 방식 | 정해진 구조에 따라 코드 작성 |
@Controller
public class MyController {
@GetMapping("/")
public String home() {
return "hello";
}
}
// Spring이 이 메서드를 실행시켜 줌
Spring은 앱 전체의 흐름을 관리하고, 개발자 코드를 제어하는 주체이므로 프레임워크이다.
5. 정리
항목 | 프레임워크 | 라이브러리 |
제어 흐름 주체 | 프레임워크 (IoC) | 개발자 |
사용 방식 | 정해진 틀에 따라 구현 | 기능 필요 시 직접 호출 |
제공 범위 | 전체 앱 구조와 기능 제공 | 특정 기능 구현에 집중 |
예시 | Spring, Django, Angular | React, Pandas, Gson |
대표 구성 | `@Controller`, `@Service`, `@Bean` 등 | 컴포넌트, 훅 |
✏️ 마무리
프레임워크와 라이브러리는 단순히 기능의 집합이냐, 구조를 제공하느냐의 차이를 넘어
“제어 흐름(Control Flow)”과 “IoC(Inversion of Control)”의 적용 여부로 구분할 수 있다.
- React는 개발자가 흐름을 설계하고 호출하는 도구이므로 라이브러리이며,
- Spring은 정해진 구조와 흐름 속에서 개발자 코드를 제어하므로 프레임워크이다.
📎 참고자료
- Spring 공식 문서 - Beans & IoC
- https://webclub.tistory.com/458
- https://velog.io/@leehyewon0531/React%EB%8A%94-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%9D%B8%EA%B0%80%EC%9A%94-%EC%95%84%EB%8B%88%EB%A9%B4-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EC%9D%B8%EA%B0%80%EC%9A%94
💫React는 라이브러리인가요? 아니면 프레임워크인가요?💦
cs 면접 스터디를 준비하던 중에 만난 질문... 👀 라이브러리와 프레임워크의 차이에 대한 설명은 잘 나와 있는데, 그렇다면 React는 왜 라이브러리인가에 대한 내 궁금증을 시원하게 해결해 주는
velog.io
프레임워크와 라이브러리의 차이점
Framework Vs Library 프레임워크와 라이브러리의 정확한 차이점은 무엇일까요? 대중 알것 같지만 정확히 어떠한 차이점이 있는지 모르고 있는 경우가 많을지도 모릅니다. 프레임워크는 단지 미리 만
webclub.tistory.com
Introduction to the Spring IoC Container and Beans :: Spring Framework
This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) principle. Dependency injection (DI) is a specialized form of IoC, whereby objects define their dependencies (that is, the other objects they work with) only through
docs.spring.io