웹 개발을 하다 보면 프레임워크(Framework) 와 라이브러리(Library) 라는 용어를 자주 접하게 된다.
이 둘은 모두 개발을 도와주는 도구이지만, 근본적인 차이점이 존재한다.
✔ 프레임워크(Framework): 애플리케이션의 전체적인 구조와 흐름을 제공하는 도구
✔ 라이브러리(Library): 특정 기능을 제공하며, 개발자가 직접 제어하는 코드 모음
| 구분 | 프레임워크 (Framework) | 라이브러리 (Library) |
|---|---|---|
| 제어 흐름 | 제어의 역전(Inversion of Control) → 프레임워크가 전체 흐름을 결정 | 개발자가 직접 코드 흐름을 제어 |
| 사용 방식 | 프레임워크의 규칙과 구조를 따라야 함 | 필요할 때 호출하여 사용 |
| 예시 | Next.js, Angular, Vue.js, Spring | React, Lodash, Axios, Moment.js |
| 유연성 | 프레임워크가 전체 구조를 관리 → 제한적 유연성 | 개발자가 원하는 대로 활용 가능 |
✔ 핵심 차이점: 제어의 흐름(Control Flow)을 누가 가지느냐에 따라 구분된다.
✔ 프레임워크는 "우리 코드가 프레임워크에 의해 실행"되지만,
✔ 라이브러리는 "우리가 직접 라이브러리를 호출하여 실행"하는 방식이다.
export default function Home() {
return <h1>Hello, Next.js!</h1>;
}
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: '<h1>Hello, Angular!</h1>'
})
export class AppComponent {}
✔ 프레임워크를 사용하면 개발 속도가 빨라지지만, 자유도가 낮아진다.
✔ 정해진 방식으로 코딩해야 하므로 일관성이 높아지는 장점이 있다.
import React from "react";
function App() {
return <h1>Hello, React!</h1>;
}
export default App;
import axios from "axios";
axios.get("https://jsonplaceholder.typicode.com/posts")
.then(response => console.log(response.data));
✔ 라이브러리는 특정 기능을 수행하며, 개발자가 원하는 방식으로 활용할 수 있다.
✔ 제한이 없으므로 자유도가 높지만, 프로젝트 구조를 개발자가 직접 관리해야 한다.
프레임워크와 라이브러리는 프로젝트의 코드 흐름을 제어하는 방식에서 차이를 보인다.
import React, { useState } from "react";
function App() {
const [count, setCount] = useState(0);
return (
<div>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>증가</button>
</div>
);
}
export default App;
✔ React는 UI를 관리하는 라이브러리이므로, 프로젝트의 흐름을 개발자가 직접 결정해야 한다.
✔ 라우팅, 상태 관리, API 호출 등을 추가해야 한다.
import { useState } from "react";
export default function Home() {
const [count, setCount] = useState(0);
return (
<div>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>증가</button>
</div>
);
}
✔ Next.js는 React 기반 프레임워크로, 프로젝트 구조와 실행 방식을 제공한다.
✔ 서버 사이드 렌더링(SSR), API 라우트 등을 내장하고 있어 별도의 설정이 필요 없다.
✔ 프로젝트의 일관성이 중요할 때
✔ 팀 협업이 필요할 때
✔ 빠르게 개발하고 싶을 때
✔ 대규모 프로젝트에서 코드 유지보수를 쉽게 하고 싶을 때
👉 예시: Next.js, Angular, Vue.js
✔ 자유롭게 커스텀하고 싶을 때
✔ 프로젝트의 구조를 직접 관리하고 싶을 때
✔ 작은 규모의 프로젝트를 만들 때
✔ 특정 기능만 추가하고 싶을 때
👉 예시: React, Lodash, Axios