
파이썬 프로그램이 커질수록 코드의 재사용성·유지보수성·구조화 능력이 중요해진다.
이때 핵심이 되는 기능이 바로 모듈(Module) 과 패키지(Package) 이다.
모듈(Module): .py 파일 하나를 의미하며 함수·변수·클래스가 포함된다.
패키지(Package): 여러 모듈을 폴더 단위로 묶은 구조이다.
이 글에서는 모듈 생성·사용부터 패키지 구조, 그리고 주요 파이썬 표준 라이브러리까지 정리한다.
초급에서 중급으로 넘어갈 때 반드시 짚고 가야 하는 구조화 개념이다.
1. 모듈(Module)
모듈은 여러 기능을 하나의 .py 파일에 묶어 관리하는 단위이다.
다음과 같은 장점이 있다.
코드 재사용성 증가: 자주 사용하는 기능을 독립된 파일로 재사용 가능
유지보수 향상: 기능별로 파일을 나누면 수정·확장이 쉬움
네임스페이스 충돌 방지: 파일마다 독립된 이름 공간 유지
대규모 프로젝트에서는 기능 단위 모듈화가 필수적인 구조 관리 기법이다.
✔ 모듈 파일에서 여러 함수를 정의해 하나의 기능 단위로 묶은 코드 예시.
import 키워드로 모듈을 불러옴
✔ 별도 모듈을 import하여 함수·변수를 가져와 사용하는 기본 예시.
import) 방법기본 import
별칭(alias) 사용
특정 함수만 가져오기
전체 가져오기 (비권장)
✔ 기본 import, alias, 부분 import 등 다양한 모듈 가져오기 방식 비교.
실습1. 계산기 모듈 만들어보기
[문제 설명]
calc.py라는 파일을 생성하여 사칙연산 함수(덧셈, 뺄셈, 곱셈, 나눗셈)를 각각 구현하세요.
함수명: add(a, b), subtract(a, b), multiply(a, b), divide(a, b)
같은 폴더에 main.py파일을 생성하고, calc 모듈을 import해서 각 함수의 결과를 출력하세요.
나눗셈 함수에서는 0으로 나누는 경우 "0으로 나눌 수 없습니다."를 출력하고 None을 반환 할 것
✔ 사칙연산 함수를 정의한 calc.py 모듈 구현 예시.
✔ calc 모듈을 import해 각 연산 함수를 호출하는 main.py 예시.
2. 패키지(Package)
패키지는 여러 모듈(.py)을 폴더 단위로 묶는 구조를 말한다.
대규모 프로젝트, 라이브러리 제작 시 사용
Python 3.3 이후에는 __init__.py없이도 패키지로 인식하지만, 초기화 코드 작성·명확한 패키지 구분을 위해 포함하는 것이 일반적이다.
✔ 폴더와 모듈 파일로 구성된 파이썬 패키지 구조 개념을 도식화한 그림.
operations.py
호출 코드
서브모듈 호출
✔ 패키지 내부에서 제공하는 연산용 operations.py 모듈 코드 예시.
✔ 패키지에 포함된 모듈을 import하여 함수를 호출하는 코드 예시.
✔ 서브모듈을 점 표기법으로 가져와 사용하는 패키지 import 예시.
3. 파이썬 표준 라이브러리(Standard Library)
✔ 파이썬 표준 라이브러리 구성을 한눈에 정리한 개요.
math 모듈수학적 연산에 사용되는 모듈
주요 기능: 수학 상수, 삼각함수, 로그, 제곱근 등
✔ math 모듈의 상수와 주요 수학 함수 사용법을 보여주는 코드 목록.
실습2.
math모듈 사용해보기
두 점 (x1, y1), (x2, y2)의 좌표를 입력받아 두 점 사이의 실제 거리를 소수 둘째 자리까지 출력하세요.
math.sqrt(), math.pow() 활용
✔ 두 점의 좌표로 실제 거리를 계산하는 math 모듈 활용 예제 코드.
어떤 학급에 학생이 18명, 선생님이 24명 있습니다.
두 집단이 모두 공평하게 나눠 가질 수 있는 최대의 간식개수(최대공약수)
포장 단위별로 동시에 맞게 나누어 떨어지는 최소 간식 개수(최소공배수)를 구하는 코드를 작성하세요.
math.gcd(), math.lcm() 활용
✔ 최대공약수·최소공배수를 math.gcd, math.lcm으로 구하는 예제 코드.
random 모듈랜덤 값(난수) 생성 시 사용
주요 기능: 난수, 임의 선택, 섞기
✔ random 모듈의 난수 생성 및 임의 선택 관련 주요 코드 목록.
실습3.
random모듈 사용해보기
1 ~ 45 까지의 수 중에서 랜덤으로 6개의 숫자를 뽑는다.
6개의 숫자 중 중복되는 숫자가 없도록 한다.
오름차순으로 정렬한 결과를 출력한다.
✔ 1~45 사이 랜덤 로또 번호 6개를 생성하고 정렬하는 예제 코드.
컴퓨터는 "가위", "바위", "보" 중 하나를 무작위로 선택합니다.
사용자는 키보드로 "가위", "바위", "보" 중 하나를 직접 입력합니다.
둘의 결과를 비교해 승, 무, 패를 판단하여 출력하세요.
요구사항:
random 모듈의 함수를 사용할 것
사용자 입력은 input()으로 받을 것
승패 판정(비교) 로직은 if / elif / else로 직접 구현할 것
✔ random 모듈과 조건문으로 가위바위보 게임을 구현한 예제 코드.
datetime 모듈날짜와 시간의 생성, 조작, 형식 변환과 같은 시간 관련 기능을 제공
주요 기능: 현재 날짜 / 시간, 시간 차이 계산, 포맷 변환
✔ datetime 모듈로 현재 날짜·시간을 생성하고 다루는 코드 목록.
✔ 날짜·시간 간 차이를 계산하는 예제 코드.
✔ datetime 객체를 문자열로 포맷·파싱하는 strftime/strptime 사용 예제.
실습4. 다음 생일 까지 남은 날짜 계산하기
사용자로부터 생일(월-일, 예: 07-25)을 입력 받으세요.
오늘 날짜를 기준으로 올해 또는 내년의 생일까지 남은 날짜(일 수)를 계산해서 출력하세요.
요구사항: 날짜 연산에는 반드시 datetime 모듈을 사용할 것
✔ 사용자의 생일을 입력받아 다음 생일까지 남은 날짜를 계산하는 코드.
calendar 모듈날짜와 달력 관련 다양한 기능을 제공
주요 기능: 달력(캘린더) 생성, 요일 계산, 윤년 판별
✔ calendar 모듈로 특정 연·월의 달력을 출력하는 코드 목록.
time 모듈시간의 측정, 지연, 변환과 같은 시간 관련 기능을 제공
주요 기능: 현재 시간, 대기(sleep), 시간 측정
✔ time 모듈로 현재 시간을 확인하고 실행 지연을 주는 주요 코드 목록.
✔ time.time()을 이용해 코드 실행 소요 시간을 측정하는 예제 코드.
실습5. 타자 연습 게임 만들기
영단어 리스트 중 무작위로 단어가 제시됩니다.
사용자는 해당 단어를 정확히 입력해야 다음 문제로 넘어갈 수 있습니다.
10문제를 모두 맞히면, 게임이 종료되고 총 소요 시간이 출력됩니다.
틀린 경우에는 "오타! 다시 도전!" 메시지를 출력하고, 같은 문제를 다시 도전하게 합니다.
게임이 시작되기 전, 엔터키를 누르면 시작합니다.
요구 사항
단어는 미리 주어진 리스트에서 random.sample()로 무작위 선택
input()으로 사용자 입력
time.time()으로 시작 ~ 종료 시간 측정, 소요 시간 계산
문제마다 번호가 함께 출력
통과 / 오타 메시지, 총 타자 시간까지 출력
✔ random과 time 모듈을 활용한 영단어 타자 연습 게임 구현 예시.
sys 모듈파이썬 인터프리터와 관련된 다양한 기능을 제공
주요 기능: 입출력, 인자 처리, 환경 정보, 종료 등
✔ sys 모듈을 사용해 명령행 인자를 처리하는 주요 코드 목록.
✔ sys.argv 등 인터프리터 제어 기능을 사용하는 예제.
✔ sys.exit 등 인터프리터 제어 기능을 사용하는 예제.
os 모듈운영체제와 상호작용 할 수 있도록 도와주는 기능 제공
주요 기능: 파일·디렉터리 관리, 환경 변수, 시스템 정보 등
✔ os 모듈로 파일·디렉터리를 생성·삭제·조회하는 주요 코드 목록.
✔ 작업 디렉터리와 환경 변수를 확인·변경하는 os 모듈 활용 예제.
4. 실무 예시
여러 분석 파일에서 공통적으로 사용하는 계산 로직은 별도의 모듈로 분리하면 코드 재사용성과 유지보수성이 크게 향상된다.
아래 예시는 전기요금 계산 로직을 billing.py로 분리한 형태다
📁 디렉터리 구조
project/
├── billing.py
└── main.py
📌 billing.py
✔ 전기요금 단가와 구간별 요금을 계산하는 billing.py 모듈 코드.
📌 main.py
✔ billing 모듈을 불러와 사용량에 따른 최종 전기요금을 출력하는 main.py.
✔ 핵심 포인트
공통 로직을 한곳에서 관리 → 수정 비용 ↓
여러 스크립트의 코드 중복 제거
실제 전력/요금 계산에서도 동일한 패턴으로 활용 가능
건물 에너지 관리 시스템(BEMS)에서는 전력·온도 등 종류별 센서를 패키지 단위로 구조화하는 방식이 많이 사용된다.
📁 디렉터리 구조
bems_demo/
├── main.py
└── sensors/
├── __init__.py
├── power.py
└── temperature.py
📌 sensors/power.py
✔ 실시간 전력 값을 읽어오는 PowerMeter 클래스를 정의한 power.py 예시.
📌 sensors/temperature.py
✔ 온도 값을 읽어오는 TemperatureSensor 클래스를 정의한 temperature.py 예시.
📌 sensors/__init__.py
✔ PowerMeter 클래스와 TemperatureSensor 클래스를 import하는 __init__.py 예시.
📌 main.py
✔ sensors 패키지를 import해 전력·온도 센서를 동시에 사용하는 main.py 예시.
✔ 핵심 포인트
센서별 클래스/로직을 개별 파일로 관리
패키지 형태로 묶어 구조가 명확해짐
실제 BEMS 시스템에서 많이 사용하는 구조 패턴
데이터 로딩 ⇒ 전처리 ⇒ 통계 계산 ⇒ 리포트
이런 흐름 단위 구조는 모듈 / 패키지로 나눌 때 가장 효과가 크다
📁 디렉터리 구조
energy_project/
├── main.py
└── analytics/
├── __init__.py
├── loader.py
├── stats.py
└── report.py
📌 analytics/loader.py
✔ 에너지 데이터 파일을 불러오고 전처리하는 loader.py 모듈 코드.
📌 analytics/stats.py
✔ 불러온 데이터의 통계를 계산하는 stats.py 모듈 구현 예시.
📌 analytics/report.py
✔ 분석 결과를 리포트 형식으로 정리·출력하는 report.py 모듈 코드.
📌 main.py
✔ analytics 패키지의 로딩·통계·리포트 기능을 순서대로 호출하는 main.py 예시.
✔ 핵심 포인트
역할 단위로 분리된 구조(로더/통계/리포트)
유지보수가 쉽고 협업에 강함
실제 데이터 분석 프로젝트의 표준 패턴
5. 모듈 한눈에 보기
🔹 모듈(Module)
.py 파일 하나
관련 기능(함수·클래스)을 한 파일에 묶어 관리
예: preprocess.py, sensors.py
목적: 코드 재사용 · 중복 제거 · 유지보수 향상
사용:
import 모듈명
from 모듈명 import 함수
🔹 패키지(Package)
모듈들을 묶어놓은 디렉터리 단위 구조
구성 요소: 디렉터리, __init__.py, 여러 .py 파일
예:
analytics/
├── __init__.py
├── preprocess.py
└── loader.py
목적: 기능 단위 분리 · 대규모 프로젝트 구조화
사용:
import 패키지명
from 패키지명.module import 함수
🔹 왜 필요한가?
프로젝트 규모가 커질수록 파일 구조를 모듈/패키지로 나눠야 함
협업 시 충돌 줄이고 역할 분명해짐
분석 / 서비스 / 자동화 로직 재사용이 쉬워짐
유지보수 기준이 명확해져 품질 상승
🔹 한 줄 요약
모듈 = 기능이 담긴 파일 하나
패키지 = 모듈을 묶어 체계화한 디렉터리 구조
6. 아웃트로
이 장에서는 파이썬 코드의 규모가 커질수록 중요성이 커지는 모듈(Module)과 패키지(Package) 개념을 정리했다.
작은 단계에서는 하나의 파일에 모든 코드를 작성해도 문제가 없지만,
기능이 늘어나고, 여러 사람이 함께 작업하는 시점이 되면 파일(모듈) 단위, 디렉터리(패키지) 단위 설계가 필수가 된다.
모듈은 “관련 있는 기능을 하나의 파일로 묶는 단위”이고,
패키지는 “여러 모듈을 기능별로 묶어낸 디렉터리 단위 구조”다.
실무에서는
공통 유틸리티 모듈,
기능 단위 패키지,
명확한 디렉터리 구조를 미리 잡아두는 것만으로도 프로젝트 전체 품질과 유지보수성이 크게 달라진다.
다음 단계에서는
이러한 모듈·패키지를 실제 프로젝트에서 어떻게 배포하고,
가상환경·외부 라이브러리와 함께 사용하는지까지 연결해 나가면 좋다.