[Python]

[python] 모듈, 패키지, 라이브러리, 프레임워크 차이

quokkalover 2022. 5. 8. 21:56

 

파이썬 입문자에게는 정말 헷갈리는 용어들이 있다. 모듈, 패키지, 라이브러리, 프레임워크가 대표적인 예고, 정확하게 이들을 어떻게 구분해야 하는지 헷갈릴 수 있다. 다 import해서 쓰는데 뭐가 라이브러리고 뭐가 프레임워크인지 헷갈리는 것이다.

 

따라서 본 글에서는 Modular Programming이 무엇인지 간단히 알아보고 모듈, 패키지, 라이브러리, 프레임워크의 차이를 간단하게 정리해보도록 하겠다.

 

Modular programming

 

Modular programming을 이해하기 앞서 모듈이 무엇인지 이해해보자. 모듈이란 프로그램을 구성하는 구성요소로, 쉽게 말해 프로그램의 기능의 일부분을 분리한 코드 덩어리를 모듈이라고 한다. 예를 들어 계산기와 관련된 함수들을 구현하고, 이를 한 곳에 모아놓았다면 계산기 모듈이 된다.

 

그렇다면 Modular programming이란 위와 같이 필요한 기능들을 분리해서 모듈화가 된 프로그램을 구현하는 것을 의미한다. 그럼 왜 Modular programming을 해야 할까? 프로그램을 구현할 때, 모든 코드를 하나의 파일에 모아둔다면, 다른 사람이 읽거나 혹은 미래의 내가 읽었을 때 가독성이 매우 떨어진다. 뿐만 아니라 코드의 유지보수와 재사용이 매우 어렵다. 이때 필요한게 바로 Modular programming이다. 필요한 기능들을 묶어서 나누어 두면 오류의 범위를 최소화할 수 있을 뿐 아니라 시스템을 구조적으로 알아보기 편리하고, 추상화를 통해 프로그램의 효율적인 관리 및 성능 향상이 가능하다.

 

자 이제 Module과 Modular programming이 무엇인지 간단히 알아보았으니 언어 자체에서 모듈을 제공하는 언어인 파이썬에서 모듈을 어떻게 활용할 수 있는지 살펴보자.

 

파이썬에서 Module이란?

파이썬에서 .py 확장자로 생성된 파일은 모두 모듈이라고 할 수 있다. 이 파일 안에 변수, 함수, 클래스 등을 저장할 수도 있고, 모듈 자체적으로 실행가능한 코드를 구현할 수도 있다.

 

자 한번 간단한 계산기 모듈을 구현해보자 calculator.py라는 파일을 생성해서 아래 코드를 작성하자.

# calculator.py

def add(a, b):
    return a + b

이제 위와 같이 모듈을 구현했으면 더하기 연산을 수행해야 하는 다른 코드에서 이 모듈을 가져다가 쓰기만 하면된다. 파이썬에서 위와 같이 모듈에 정의된 함수를 사용하려면 크게 세가지 방법이 있다.

 

(1) 해당 모듈을 import하고, module.function()syntax를 따라 호출.

import calculator
calculator.add()

(2) from statement를 사용해 모듈 import

#from [module] import [function or value]
from calculator import add
add()

(3) import 후 alias를 사용

import calculator as c
c.add()

 

파이썬에서 모듈을 사용하면 다음의 장점이 있다.

 

1) 단순화(simplification) :

코드를 모듈화하기 때문에, 개발할 때 프로그램 전체가 아닌 특정 부분에 집중할 수 있다. 뿐만 아니라 에러가 발생했을 때 어떤 모듈에 문제가 있는지 확인하면 되기 때문에 분석에 용이하다.

2) 협업 :

여러명의 프로그래머가 함께 개발할 때 서로에게 독립적인 기능을 개발하면 되기 때문에 협업에 용이하다.

3) 중복 방지 :

모듈에 정의된 코드를 재사용하면 되기 때문에 중복된 코드를 방지할 수 있다.

4) namespace 분리:

개발을 하다보면 동일한 이름의 함수를 정의해야할 때가 있다. 그때 모듈로 분리하면 함수 이름끼리의 충돌을 방지할 수 있다.


파이썬에서 Package란?

규모가 큰 어플리케이션을 개발하다보면 모듈만으로는 관리가 어려워진다. 이때 모듈을 grouping하고 organize해주는 package가 필요하다. 파이썬에서 대표적인 패키지는 아래가 있다.

  • numpy
  • pandas
  • pytest

파이썬에서 패키지란 모듈을 모아놓은 특정 디렉토리다. 패키지를 사용하면 모듈의 namespace를 계층적인 구조로 구성할 수 있다. 일반적으로 폴더 안에 폴더를 사용해 파일들을 분리하는 방식과 동일하게 모듈을 분리할 수 있다. 하지만 일반 디렉토리가 아닌 패키지임을 인식하기 위해서는 각 폴더마다 __init__.py 라는 파일을 생성해야 한다.

한번 예를 들어보겠다.

 

위 다이어그램은 여러개의 기능들을 구현해놓은 모듈을 패키딩한 util 패키지의 구조다.

위와 같이 util패키지를 구현해두고, 4칙연산을 수행해야 하는 코드가 모여있는 arithmetic 모듈에서 add함수를 불러오려면 아래와 같이 import할 수 있다.

 

import util.calculator.arithmetic

arithmetic.add()

혹은

from util.calculator.arithmetic import add

add()

위와 같이 여러 개의 모듈을 모아두고 하나의 util패키지로 구성하는 등 모듈이 점점 많아진다면 패키지로 패키징해서 organize하면 매우 깔끔하게 어플리케이션을 구현할 수 있다.


파이썬에서 Library란?

파이썬에서 library란 python package와 자주 interchangeably사용되는 용어다. 물론 패키지도 sub 패키지를 가지라 수 있지만 패키지는 모듈의 집합체라면 라이브러리는 패키지의 집합체의 의미를 가진다.

 

파이썬의 가장 큰 장점중 하나가 많은 개발자들이 커뮤니티에 재사용한 코드를 모아둔 라이브러리가 풍부하다는 점이다. 무언가를 개발할 때 처음부터 다 다시 구현하는게 아니라 라이브러리를 import해서 사용할 수 있다. 파이썬에서 대표적인 라이브러리는 아래가 있다.

  • Matplotlib: Python용 데이터 시각화 라이브러리
  • Requests : Python용 HTTP라이브러리
  • Beautiful Soup : Python용 HTML 파싱 라이브러리

위에서 pandas와 numpy를 패키지로 분류해두었지만 사실 pandas와 numpy가 하는 기능은 워낙 다양하기 때문에 이들을 library로 분류해도 무방하다.


파이썬에서 프레임워크란?

프레임워크는 프로그래머가 원하는 기능을 개발할 수 있게 일정한 형태와 기능을 갖추고 있는 골격, 뼈대를 의미한다. 프레임워크의 사전적 정의는 다음과 같다.

프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임

라이브러리와 매우 비슷하게 프레임워크 또한 여러개의 재사용가능한 모듈과 패키지를 모아둔 코드 집합체다. 하지만 라이브러리와 프레임워크를 구분짓는 가장 큰 차이점은 프로그래밍할 때 규칙이 정해져 있다는 것이다. 프레임워크는 프로그래머가 프레임워크에 정해둔 틀 안에 필요한 코드를 작성하고, 라이브러리는 사용자가 필요한 상황에 가져다 쓴다.

다시 말해서 라이브러리는 특정 operation을 수행할 수 있는 패키지들을 모아두고 프로그래머가 필요할 때 가져다 쓴다면 프레임워크는 어플리케이션의 아키텍처와 어플리케이션 동작의 기본적인 flow까지 포함하고 있다. 예를 들어 django를 사용하면 DB연동과 같은 기능을 구현하기 위한 뼈대를 제공하고, 개발자는 이 뼈대를 기반으로 어플리케이션을 개발한다. 일반적으로 우리가 django, flask, bottle같은 것들을 라이브러리라고 부르지 않고 프레임워크라고 부르는 이유는 이렇게 프레임워크에 미리 정해져있는 구조를 따라서 우리의 목적에 맞게 코드를 작성하고 어플리케이션 코드가 프레임워크에 의해 사용되기 때문이다.

 

 

자 이렇게 모듈, 패키지, 라이브러리, 프레임워크가 무엇인지 차례대로 알아보았다.

 

다음으로는 간단하게 패키지를 구현해보고, 이들을 어떻게 호출해서 사용할 수 있는지 실제 사용예시와 흔히 만나게되는 에러를 알아보도록 하겠다.

 

 

 

 

 

참고자료

https://cocoon1787.tistory.com/745

https://learnpython.com/blog/python-modules-packages-libraries-frameworks/

https://www.programiz.com/python-programming/package

https://careerkarma.com/blog/python-import/

https://www.digikey.com/en/maker/projects/micropython-basics-loading-modules/9560902ac9654f7e91f098e723d097ad

https://alex.dzyoba.com/blog/python-import/