본문 바로가기

IT∙테크∙프로그래밍

라이브러리와 프레임워크, 이렇게 구분하세요.

an illustration of library
an illustration of library

라이브러리와 프레임워크

라이브러리(library)프레임워크(framework)는 모두 소프트웨어 개발에서 자주 사용되는 용어입니다. 그러나 라이브러리와 프레임워크는 목적과 사용 방식에서 차이가 있습니다.

라이브러리는 재사용 가능한 코드의 집합으로, 특정 기능을 수행하는 함수, 클래스, 메서드 등으로 구성됩니다. 프로그래머는 필요에 따라 라이브러리의 특정 기능을 호출하여 사용할 수 있습니다. 라이브러리는 개발자가 원하는 대로 사용될 수 있으며, 보통은 특정 작업을 수행하기 위해 필요한 기능을 제공하는 것이 주된 목적입니다. 예를 들어, 데이터베이스 연결, 파일 처리, 그래픽 처리 등의 기능을 제공하는 라이브러리를 사용할 수 있습니다.

프레임워크는 라이브러리와 비슷한 개념이지만, 애플리케이션의 구조와 흐름을 제어하기 위한 뼈대를 제공합니다. 프레임워크는 개발자가 제공한 코드를 호출하고, 개발자가 정의한 규칙과 패턴을 따르도록 제어합니다. 프레임워크는 애플리케이션의 전체적인 아키텍처를 정의하고, 개발자는 그 안에서 자신의 코드를 작성하여 동작시킵니다. 주로 웹 개발 프레임워크에서 볼 수 있는 것처럼, 프레임워크는 특정 도메인이나 플랫폼에서 애플리케이션을 개발하는 데 필요한 구조와 기반을 제공합니다.

요약하자면, 라이브러리는 개발자가 필요에 따라 선택적으로 사용할 수 있는 기능의 모음이며, 프레임워크는 개발자가 프레임워크의 규칙과 패턴을 따라 애플리케이션을 작성하는 데 사용되는 구조적인 뼈대입니다.

라이브러리와 프레임워크의 예시

라이브러리와 프레임워크의 예시를 각각 들어보겠습니다.

라이브러리의 예시

  1. NumPy: 수치 계산을 위한 라이브러리로, 배열과 행렬 연산, 선형 대수, 푸리에 변환 등 다양한 수학적 기능을 제공합니다.
  2. Requests: HTTP 요청을 보내고 받는 기능을 제공하는 라이브러리로, 웹 애플리케이션과의 통신에 사용됩니다.
  3. Matplotlib: 데이터 시각화를 위한 라이브러리로, 그래프와 차트를 생성하고 다양한 스타일과 옵션을 적용할 수 있습니다.

프레임워크의 예시

  1. Django: 웹 애플리케이션 개발을 위한 프레임워크로, 데이터베이스 연동, URL 라우팅, 세션 관리 등의 기능을 제공하며, 애플리케이션의 구조와 흐름을 관리합니다.
  2. Ruby on Rails: Ruby 기반의 웹 애플리케이션 프레임워크로, MVC(Model-View-Controller) 아키텍처를 기반으로 한 개발 방법론을 제공합니다.
  3. TensorFlow: 기계 학습과 딥러닝을 위한 프레임워크로, 신경망 구축, 모델 훈련, 추론 등의 기능을 제공하며, 알고리즘과 데이터 흐름을 관리합니다.

이러한 예시들은 각각 라이브러리 또는 프레임워크로 분류되며, 개발자는 자신의 프로젝트에 필요한 기능과 요구사항에 맞게 선택하여 사용할 수 있습니다.

라이브러리와 프레임워크, 이렇게 구분하세요

프레임워크와 라이브러리를 구분하는 것이 헷갈릴때는 아래의 질문들을 체크해보면서 파악할 수도 있습니다.

1. 내가 코드를 작성하고 실행하는가?

  • 내가 코드를 작성하고 실행하며 필요한 기능을 호출하는 경우: 라이브러리
  • 내가 작성한 코드가 프레임워크에 의해 호출되는 경우: 프레임워크

2. 제어 흐름을 누가 가지고 있는가?

  • 개발자가 제어 흐름을 가지고 있는 경우: 라이브러리
  • 프레임워크가 제어 흐름을 가지고 있는 경우: 프레임워크

3. 확장성과 구조의 역할은 어디에 있는가?

  • 개발자가 확장성과 구조를 정의하고 구현하는 경우: 라이브러리
  • 프레임워크가 확장성과 구조를 정의하고 개발자는 그 안에서 구현하는 경우: 프레임워크

위의 기준에 따라 생각해보면, 개발자가 직접 코드를 작성하고 호출하여 사용하며 제어 흐름을 가지고 있다면 라이브러리일 가능성이 큽니다. 반면에 개발자가 프레임워크의 규칙에 따라 코드를 작성하고, 프레임워크가 그 코드를 호출하여 제어 흐름을 가지는 경우에는 프레임워크로 구분할 수 있습니다.

제어의 역전(Inversion of Control, IoC)

프레임워크와 라이브러리를 쉽게 구분하는 방법 중 하나는 제어의 역전(Inversion of Control, IoC) 개념을 살펴보는 것입니다. 제어의 역전은 어떤 코드의 흐름을 제어하는 주체가 개발자가 작성한 코드가 아니라 프레임워크 또는 컨테이너에 의해 결정된다는 의미입니다.

라이브러리의 사용은 개발자가 필요한 기능을 호출하여 사용하는 방식입니다. 개발자는 자유롭게 라이브러리를 선택하고 필요한 기능을 호출하여 자신의 코드에 통합합니다. 이는 개발자가 제어 흐름을 가지고 있고, 필요한 시점에 라이브러리의 기능을 사용할 수 있다는 것을 의미합니다.

반면에 프레임워크는 개발자의 코드가 프레임워크에 의해 호출되는 형태입니다. 개발자는 프레임워크가 제공하는 규칙과 패턴에 따라 코드를 작성하고, 프레임워크에게 제어 흐름을 위임합니다. 프레임워크는 개발자의 코드를 호출하고 필요한 시점에 개발자가 작성한 코드를 실행합니다.

요약하자면, 라이브러리는 개발자가 필요한 기능을 호출하여 사용하며, 개발자가 제어 흐름을 가지고 있습니다. 프레임워크는 개발자의 코드가 프레임워크에 의해 호출되며, 제어 흐름을 프레임워크가 결정합니다. 이러한 제어의 역전 개념을 살펴보면 라이브러리와 프레임워크를 쉽게 구분할 수 있습니다.

반응형