파이썬 모듈: 재사용 가능한 코드의 최소 단위

2026. 7. 6. 20:00·BI&Programming-Tools/Python

모듈이란

파이썬에서 모듈은 함수, 변수, 클래스를 담고 있는 .py 파일 하나를 말합니다.

정의 자체는 단순하지만, 모듈을 제대로 이해하면 코드의 재사용성을 높이고 프로젝트 구조를 훨씬 깔끔하게 만들 수 있습니다.

같은 기능을 여러 파일에 중복으로 작성하지 않아도 되고, 필요한 곳에서 불러다 쓰기만 하면 됩니다.

모듈 이름 짓는 규칙

이름을 어떻게 짓느냐가 나중에 import할 때 가독성에 큰 영향을 줍니다.
파이썬 컨벤션 기준으로 정리하면 이렇습니다.

  • 소문자로 작성합니다. MyModule.py보다 mymodule.py가 맞습니다.
  • 짧고 명확하게 씁니다. calc.py, dataprocessing.py처럼 기능이 바로 읽히는 이름이 좋습니다.
  • 단어 구분이 필요하면 밑줄(_)을 씁니다. data_processing.py, user_management.py처럼 작성합니다.

모듈 import 방법

모듈을 불러오는 방법은 크게 세 가지입니다.

각각 언제 어떻게 쓰는지 직접 비교해보면 차이가 명확하게 드러납니다.

아래처럼 add와 subtract 함수를 담은 mymodule.py가 있다고 가정합니다.

# mymodule.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

방법 1: 모듈 전체를 import

import mymodule

mymodule.add(5, 3)       # 8
mymodule.subtract(5, 3)  # 2

 

함수 앞에 모듈 이름을 붙여야 합니다.

어디서 온 함수인지 명확히 보인다는 장점이 있습니다.

 

방법 2: 특정 함수만 import

from mymodule import add, subtract

add(5, 3)       # 8
subtract(5, 3)  # 2

 

모듈 이름 없이 함수를 바로 쓸 수 있습니다.

필요한 것만 골라서 가져올 수 있어 코드가 간결해집니다.

 

방법 3: 모듈 전체를 한 번에 import (*)

from mymodule import *

 

모듈 안의 모든 것을 가져오지만, 어떤 함수가 어디서 왔는지 추적하기 어려워지기 때문에 큰 프로젝트에서는 권장하지 않는 방식입니다.

세 가지 방법 중 어떤 걸 쓸지는 상황에 따라 다르지만, 개인적으로는 명확성 때문에 방법 1이나 2를 주로 씁니다.

if __name__ == "__main__": 가 필요한 이유

파이썬에서 모든 모듈은 __name__이라는 내장 변수를 가집니다.

이 변수의 값이 상황에 따라 달라집니다.

  • 해당 파일을 직접 실행하면 → __name__이 "__main__"이 됩니다.
  • 해당 파일을 다른 파일에서 import하면 → __name__이 파일 이름(모듈명)이 됩니다.

이게 왜 중요한지는 아래 두 파일을 비교해보면 바로 알 수 있습니다.

 

이 구문 없이 작성한 경우

# mymodule_bad.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

print("Add:", add(5, 3))
print("Subtract:", subtract(5, 3))

 

이 파일을 직접 실행하면 당연히 출력이 잘 됩니다.

문제는 이 모듈을 다른 파일에서 import할 때도 print가 실행된다는 점입니다.

다른 파일에서 단순히 add 함수만 가져다 쓰고 싶었을 뿐인데, 불필요한 출력이 같이 따라옵니다.

 

이 구문을 넣은 경우

# mymodule_good.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

if __name__ == "__main__":
    print("Add:", add(5, 3))
    print("Subtract:", subtract(5, 3))

이렇게 하면 직접 실행할 때만 if 블록 안의 코드가 실행되고, 다른 파일에서 import할 때는 함수 정의만 가져옵니다.

이 구문이 결국 "이 파일이 직접 실행될 때"와 "라이브러리로 불려올 때"를 구분하는 스위치 역할을 한다고 보면 됩니다.

모듈에 변수와 클래스도 담기

모듈 안에는 함수만 넣는 게 아니라 변수나 클래스도 함께 넣을 수 있습니다.

# mymodule2.py
PI = 3.14159

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

class Calculator:
    def __init__(self):
        self.value = 0

    def add(self, amount):
        self.value += amount
        return self.value

    def reset(self):
        self.value = 0
        return self.value

 

이렇게 하면 mymodule2.PI처럼 변수도, mymodule2.Calculator()처럼 클래스도 외부에서 그대로 가져다 쓸 수 있습니다.

다른 디렉토리에 있는 모듈 사용하기

모듈 파일이 같은 디렉토리에 있으면 아무 문제 없이 import됩니다.

그런데 모듈을 별도 디렉토리에 분리해두면 ModuleNotFoundError를 만나게 됩니다.

파이썬이 해당 경로를 모듈 탐색 범위로 알고 있지 않기 때문입니다.

 

파이썬이 모듈을 찾는 범위는 sys.path에 등록된 경로들입니다.

import sys
print(sys.path)  # 파이썬이 모듈을 탐색하는 경로 목록

이 문제를 해결하는 방법은 두 가지입니다.

 

방법 1: 코드 안에서 sys.path에 경로 추가

import sys
import os

sys.path.append(os.path.abspath('mymodules'))
import mymodule3

코드 안에서 직접 경로를 넣는 방식이라 이식성은 좀 떨어지지만 빠르게 테스트할 때 편합니다.

 

방법 2: 환경변수 PYTHONPATH 설정

export PYTHONPATH="경로/mymodules"

셸에서 환경변수로 잡아두면 해당 세션에서는 어디서든 해당 디렉토리 안의 모듈을 바로 import할 수 있습니다.

프로젝트를 체계적으로 관리할 때는 .bashrc에 등록해두는 편이 더 깔끔합니다.

내장 모듈 활용

파이썬 표준 라이브러리에는 별도 설치 없이 바로 쓸 수 있는 모듈들이 많습니다.

자주 쓰이는 것들만 정리하면 이렇습니다.

import math
print(math.sqrt(16))   # 4.0
print(math.pi)         # 3.141592653589793
import datetime
now = datetime.datetime.now()
print(now)   # 현재 날짜와 시간
import sys
print(sys.version)   # 파이썬 버전

 

이 외에도 json, re, collections, itertools 등 표준 라이브러리에만 해도 웬만한 작업은 다 커버됩니다.

외부 패키지를 설치하기 전에 표준 라이브러리에 이미 있는 게 아닌지 먼저 확인하는 습관이 생겼습니다.

서드파티 모듈 설치 및 사용

표준 라이브러리에 없는 기능이 필요하다면 외부 패키지를 설치해서 씁니다. 3편에서 Poetry 환경을 세팅해뒀다면 아래처럼 설치합니다.

poetry add requests

설치 후에는 일반 모듈처럼 import해서 쓰면 됩니다.

import requests

response = requests.get("https://api.github.com")
print(response.status_code)

실행할 때는 Poetry 가상환경 안에서 해야 합니다.

poetry run python script.py
# 또는 가상환경을 직접 활성화 후 실행
source .venv/bin/activate
python script.py
deactivate

'BI&Programming-Tools > Python' 카테고리의 다른 글

Git과 GitHub으로 코드 버전 관리하기  (0) 2026.07.07
패키지로 코드 구조화하기  (0) 2026.07.07
의존성 관리: Poetry로 해결하기  (0) 2026.07.06
파이썬 버전 관리: pyenv  (0) 2026.07.06
생물정보학에서의 프로그래밍, 환경 세팅  (0) 2026.07.06
'BI&Programming-Tools/Python' 카테고리의 다른 글
  • Git과 GitHub으로 코드 버전 관리하기
  • 패키지로 코드 구조화하기
  • 의존성 관리: Poetry로 해결하기
  • 파이썬 버전 관리: pyenv
데이터로 읽는 생명
데이터로 읽는 생명
is-note 님의 블로그 입니다.
  • 데이터로 읽는 생명
    In Silico Note
    데이터로 읽는 생명
  • 전체
    오늘
    어제
    • 분류 전체보기 (190)
      • Bio-Knowledge (16)
        • 분자생물학 & 유전학 기초 (0)
        • 전사체학 & 유전자 발현 (0)
        • 구조생물학 & 단백질 (0)
        • 싱글셀 & 다중오믹스 (0)
        • 임상유전학 & 질환 데이터 (0)
      • Programming (4)
        • API (4)
      • BI&Programming-Tools (111)
        • File Formats (14)
        • Linux & Bash Script (38)
        • Python (35)
        • R (11)
        • 통계 (8)
        • Pipeline Manager (0)
        • Etc (5)
      • Bio Data Analysis (28)
        • 서열분석개론 (6)
        • WGS(Whole Genome Seq) (11)
        • WES(Whole Exome Seq) (2)
        • RNA-Seq (4)
        • Metagenome (2)
        • Non-human Resequencing (1)
        • 임상유전체 분석 (1)
        • Multi-Omics (1)
      • Bio-Trends & Tech (1)
      • 코딩테스트 연습 (30)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    fasta
    생물정보학
    wgs
    분자생물학
    FASTQ
    리눅스
    통계
    유전체분석
    R
    리눅스기초
    파이썬
    코딩테스트
    bioinformatics
    파일포맷
    파이썬기초
    GATK
    데이터분석
    R기초
    파이썬연습
    ngs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
데이터로 읽는 생명
파이썬 모듈: 재사용 가능한 코드의 최소 단위
상단으로

티스토리툴바