라이브러리와 프레임워크의 차이는 제어권에 있다.

라이브러리는 내가 호출하는 코드로 개발자가 필요할 때 불러서 사용하는 도구이다.
Math.random(), axios.get() 등과 같은 코드들은 개발자가 작성한 코드 안에서 라이브러리를 호출하는 것이다.
List<String> list = new ArrayList<>();
Collections.sort(list); // 직접 메서드 호출
정해진 틀 안에 개발자가 코드를 넣으면 실행 흐름은 프레임워크가 관리하게 된다. 즉, 제어의 주체가 개발자가 아닌 프레임워크라고 볼 수 있다.
Spring, Django 등을 보면 개발자가 전체의 흐름을 짜는게 아닌, 각 프레임워크의 규칙, 패턴에 따라 코드를 짜고 동작한다.
// Spring Framework
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello Spring";
}
}
// 여기서 내가 직접 main을 돌리지 않아도 Spring이 이 컨트롤러를 호출함
| 구분 | 라이브러리 | 프레임워크 |
|---|---|---|
| 제어 흐름 | 개발자가 직접 호출함 | 프레임워크가 전체 실행 흐름을 제어함 (IoC, 제어의 역전) |
| 구조 제공 여부 | 도구나 기능 제공 중심 | Spring Batch 처럼 Job, Step, Reader/Processor/Writer 등 구조 자체를 제공 |
| 역할 | 필요한 기능만 가져다 씀 | 애플리케이션의 실행 흐름을 관리 |