-
모듈, 패키지, 라이브러리, 그리고 프레임워크python 2026. 1. 13. 15:01
파이썬을 공부하다 보면 비슷한 듯 다른 용어들이 등장합니다. 이들의 포함 관계(규모)와 역할의 차이를 명확히 정리해 봅니다.
크기로 보는 포함 관계 (계층 구조)
가장 작은 단위인 모듈부터 가장 거대한 구조인 프레임워크까지의 관계는 다음과 같이 표현할 수 있습니다.
$$\text{Module} \subset \text{Package} \subset \text{Library} \subset \text{Framework}$$점점 더 큰 개념이 작은 개념을 포함하는 구조입니다.
- 모듈 (Module)
- .py 확장자를 가진 파일 하나입니다.
- 변수, 함수, 클래스 같은 작은 부품들이 들어 있습니다.
- 비유: 레고 블록 한 조각
- 패키지 (Package)
- 모듈 여러 개를 모아놓은 폴더(디렉토리)입니다.
- 관련 있는 모듈끼리 묶어 관리하며, __init__.py 파일을 포함하는 경우가 많습니다.
- 비유: 레고 블록 세트 (성 만들기 세트)
- 라이브러리 (Library)
- 여러 패키지와 모듈을 모아둔 도구의 집합입니다.
- 특정 기능을 수행하기 위한 도구(함수, 클래스)들을 미리 만들어 놓은 것입니다. (예: pandas, requests)
- 비유: 레고 매장
- "모듈과 패키지는 '저장 방식'이고, 그것을 남들이 쓰기 좋게 정리해서 배포하면 '라이브러리'가 된다."
- 프레임워크 (Framework)
- 프로그램을 만들기 위한 기본 뼈대와 구조(틀)입니다.
- 라이브러리보다 더 큰 개념으로, 개발에 필요한 라이브러리, 규칙, 설계 패턴 등을 모두 포함하고 있습니다.
- 비유: 모델하우스 또는 건물의 철골 구조 (이미 방의 구조와 배관이 잡혀 있음)

How to use
# [방법 1] 일반적인 방식 (매장 이름.부품) # 전체를 가져오기 import math print(f"math.pow 사용: {math.pow(2, 3)}") # 8.0 (실수) #현업에서 비추천, 메모리 낭비, 이름충돌, readibility 문제 from math import * ceil(6.3) # [방법 2] 부품만 쏙 가져오기 # 해석: "math 매장에서 pow라는 도구만 꺼내와서 내 책상 위에 둬." from math import pow # 이제 매장 이름 없이 바로 씁니다. print(f"그냥 pow 사용: {pow(2, 3)}") # 8.0 (실수)위에 코드는 다 메모리에 math를 가져옴
핵심 차이: Package vs Library
- 모듈 = 책 한 권
- 패키지 = 책장 (관련된 책들의 묶음)
- 라이브러리 = 도서관 (모든 책과 책장의 총합)
우리가 pip install로 내려받는 것들은 엄밀히 말하면 '배포판(Distribution)'입니다. 하지만 사용자 입장에서는 해당 기능을 쓰기 위해 가져오는 도구 모음이므로 통칭하여 라이브러리라고 부릅니다.
- 배포 전: 내가 만든 "모듈"이나 "패키지"
- 배포 후: 남들이 가져다 쓰는 "라이브러리" (예: Pandas, Requests, Numpy)
- 사용할 때: import를 통해 물리적인 "패키지"를 내 코드로 불러옴
즉, 사용하는 사람의 관점에서는 그것이 파일 하나(모듈)이든 폴더(패키지)이든 상관없이, 내 코드에 기능을 추가해주는 도구라면 라이브러리라고 부르는 것이 일반적입니다.
왜 배포할 때 "패키지"라고 강조할까?
파이썬 공식 생태계의 이름 자체가 PyPI (Python Package Index)이기 때문입니다.
우리가 pip install로 내려받는 것은 엄밀히 말해 '배포 패키지(Distribution Package)'입니다.
- 배포 전: 내가 만든 "모듈"이나 "패키지"
- 배포 후: 남들이 가져다 쓰는 "라이브러리" (Pandas, Numpy 등)
- 특징: 여러 개의 패키지를 묶어 배포하더라도 결국 하나의 큰 상자(배포 패키지)에 담겨 나갑니다.
결국 이 둘은 같은 대상을 어떤 관점에서 보느냐의 차이입니다.
- 물리적 실체 (패키지): "내 컴퓨터에 깔린 폴더 그 자체"
코드에서 가져올 땐 "패키지를 불러온다(import)"고 하는 것이 기술적으로 가장 정확합니다. - 개념적 역할 (라이브러리): "그 안에 든 기능들의 모음"
도구를 빌려 쓰듯 "라이브러리를 활용한다"고 관용적으로 표현합니다.
💡 한 줄 요약 파이썬에서 패키지는 배포되는 '상자'이고, 라이브러리는 그 안의 '도구'입니다. 설치할 땐 패키지, 사용할 땐 라이브러리라고 불러도 모두 맞습니다!
프레임워크(Framework)란 정확히 무엇인가?
프레임워크의 사전적 정의는 '뼈대', '골조', '하부 구조'입니다.
소프트웨어 개발에서 프레임워크는 "개발자가 소프트웨어를 개발할 때, 코드를 작성하는 기본적인 틀과 규칙을 제공하는 환경"을 말합니다.
- 역할: 개발자는 프레임워크가 제공하는 가이드라인(규칙)에 맞춰 빈칸을 채우듯 코드를 작성하면 됩니다. 기본적인 설계나 배관 공사 같은 어려운 부분은 프레임워크가 미리 해두었기 때문에, 개발자는 핵심 기능 구현에만 집중할 수 있습니다.
- 대표 예시: Django (웹 개발), Fast API (웹 개발), Spring Boot(자바 웹 개발)
핵심 차이: 라이브러리 vs 프레임워크
이 둘을 구분하는 가장 중요한 기준은 '제어의 역전(IoC: Inversion of Control)', 즉 "누가 누구를 부르는가?"입니다.
구분 라이브러리 (Library) 프레임워크 (Framework) 주도권 개발자 (나) 프레임워크 작동 방식 내가 코드를 짜다가 필요할 때 라이브러리를 부른다. 프레임워크가 정해진 규칙에 따라 내 코드를 부른다. 자유도 높음 (내 마음대로 배치 가능) 낮음 (정해진 규칙을 따라야 함) 비유 내가 가구를 사와서 내 방에 배치함 이미 지어진 집에 들어가서 삶 요약하자면:
라이브러리: 내가 필요할 때 꺼내 쓰는 도구 (내가 주체)
프레임워크: 내가 들어가서 일하는 작업장 (프레임워크가 관리자), 제어권은 프레임워크가 있다.

'python' 카테고리의 다른 글
가변 인자와 Packing/Unpacking의 원리 (0) 2026.01.13 제너레이터(Generator) 활용 예제 (0) 2026.01.11 Closure, 도대체 왜 쓰는 걸까? (0) 2026.01.09 Iterable ? Iterator? Generator? (0) 2026.01.09 - 모듈 (Module)