[파이썬 100강] 09강. 모듈 import와 표준 라이브러리 사용하기

[파이썬 100강] 09강. 모듈 import와 표준 라이브러리 사용하기

파이썬을 어느 정도 쓰기 시작하면 파일이 길어지고, 같은 유틸 함수를 여러 스크립트에서 반복해서 붙여 넣는 순간이 옵니다. 이때 필요한 개념이 모듈(module) 입니다. 모듈은 코드를 파일 단위로 나누고, 필요한 기능만 가져와 재사용하게 해 줍니다. 여기에 파이썬이 기본으로 제공하는 표준 라이브러리(standard library) 를 결합하면, 웹 요청을 제외한 꽤 많은 실무 작업을 외부 패키지 없이 처리할 수 있습니다.

이번 강의에서는 import 문법의 핵심, 표준 라이브러리 사용 패턴, 그리고 초보자뿐 아니라 실무에서도 자주 겪는 import 관련 함정을 정리합니다.


핵심 개념

모듈 학습에서 가장 중요한 축은 세 가지입니다.

  • 모듈: 파이썬 코드가 담긴 .py 파일
  • 패키지: 여러 모듈을 폴더 단위로 구성한 코드 묶음
  • import: 다른 파일(모듈)의 코드에 접근하는 방법

import는 단순히 “가져오기”가 아니라, 이름 공간(namespace)을 어떻게 관리할지 결정하는 설계 도구입니다.

>>> import math
>>> math.sqrt(81)
9.0
>>> math.pi
3.141592653589793

위 예제에서 sqrt를 바로 쓰지 않고 math.sqrt라고 쓰는 이유는, 어떤 함수가 어디에서 왔는지 명확하게 보여주기 위해서입니다.


기본 사용

1) import 기본 형태

가장 기본은 모듈 전체를 가져오는 방식입니다.

>>> import datetime
>>> now = datetime.datetime(2026, 2, 17, 1, 44)
>>> now.strftime("%Y-%m-%d %H:%M")
'2026-02-17 01:44'

장점은 충돌이 적고 출처가 명확하다는 점입니다.

2) from ... import ...

특정 이름만 가져오면 호출이 짧아집니다.

>>> from random import randint
>>> randint(1, 6)  # 주사위 시뮬레이션
4

짧고 편하지만, 이름 충돌 가능성이 커집니다. 팀 코드에서는 남용하지 않는 편이 안전합니다.

3) alias 사용 (as)

긴 모듈 이름은 별칭으로 줄여 가독성을 높일 수 있습니다.

>>> import statistics as stats
>>> scores = [82, 91, 77, 95, 88]
>>> stats.mean(scores)
86.6
>>> stats.median(scores)
88

실무에서 import pandas as pd처럼 자주 보이는 패턴도 같은 원리입니다.

4) 실무형 표준 라이브러리 예제

(a) 파일 경로 다루기: pathlib

>>> from pathlib import Path
>>> base = Path("./data")
>>> (base / "logs" / "app.log").as_posix()
'data/logs/app.log'

운영체제마다 경로 구분자가 달라도 안전하게 처리할 수 있습니다.

(b) JSON 처리: json

>>> import json
>>> payload = {"user": "gunwoo", "active": True, "score": 97}
>>> text = json.dumps(payload, ensure_ascii=False)
>>> text
'{"user": "gunwoo", "active": true, "score": 97}'
>>> json.loads(text)["score"]
97

API 응답 저장, 설정 파일 처리 등에서 가장 자주 쓰는 기본 도구입니다.

(c) 날짜 계산: datetime, timedelta

>>> from datetime import datetime, timedelta
>>> start = datetime(2026, 2, 17, 9, 0)
>>> end = start + timedelta(days=7)
>>> end.strftime("%Y-%m-%d")
'2026-02-24'

리마인더, 만료일 계산, 리포트 기간 계산에 매우 자주 쓰입니다.


자주 하는 실수

실수 1) 파일명을 표준 라이브러리와 같은 이름으로 짓기

예를 들어 현재 폴더에 random.py를 만들어 두면, 원래 표준 라이브러리 random 대신 내 파일이 import되어 예상치 못한 오류가 납니다.

  • 피해야 할 파일명 예: json.py, datetime.py, random.py
  • 해결: 파일명 변경 + __pycache__ 정리

실수 2) from module import * 남용

와일드카드 import는 “어떤 이름이 들어왔는지” 추적이 어려워 디버깅이 힘들어집니다.

  • 권장: import module 또는 필요한 이름만 명시적으로 import

실수 3) 순환 참조(circular import)

a.pyb.py를 import하고, b.py가 다시 a.py를 import하면 초기화 순서 문제로 에러가 납니다.

  • 해결 전략: 공통 코드를 common.py로 분리, 함수 내부 import로 임시 회피

실수 4) 실행 경로에 따라 import가 깨짐

터미널 위치(working directory)에 따라 모듈 탐색 경로가 달라져 “내 컴퓨터에서는 되는데 서버에서는 안 되는” 문제가 생깁니다.

  • 패키지 구조를 명확히 만들고, 프로젝트 루트에서 실행하는 습관이 중요합니다.

오늘의 결론

모듈과 표준 라이브러리는 파이썬 생산성을 끌어올리는 핵심 레버입니다.

  1. import 방식은 단순 취향이 아니라 가독성·충돌·유지보수성의 균형 문제다.
  2. pathlib, json, datetime, statistics 같은 표준 라이브러리만 잘 써도 실무 작업의 많은 부분을 해결할 수 있다.
  3. 파일명 충돌, 와일드카드 import, 순환 참조 같은 문제는 초기에 습관으로 예방하는 것이 가장 싸다.
  4. 코드를 모듈로 나누는 순간, 재사용성과 테스트 가능성이 크게 올라간다.

다음 강의에서는 파일 입출력과 예외처리를 결합해, 실제 데이터 처리 스크립트를 실패에 강하게 만드는 방법을 다룹니다.


연습문제

  1. math 모듈을 사용해서 반지름이 7인 원의 넓이를 계산하고, 소수점 둘째 자리까지 출력해보세요.
  2. datetimetimedelta를 사용해 오늘 기준 100일 뒤 날짜를 구해보세요.
  3. json 모듈로 사용자 정보 딕셔너리를 문자열로 직렬화한 뒤, 다시 파이썬 객체로 역직렬화해 name 값을 출력해보세요.

이전 강의 정답 (08강 연습문제)

  1. 두 수 중 큰 수 반환
>>> def max_of_two(a, b):
...     return a if a > b else b
...
>>> max_of_two(17, 42)
42
  1. 문자열 리스트 길이 합
>>> def total_length(words):
...     return sum(len(w) for w in words)
...
>>> total_length(["python", "is", "fun"])
11
  1. 주문 총액/할인/최종 결제액 딕셔너리 반환
>>> def checkout_summary(items, discount_rate=0.1):
...     total = sum(price for _, price in items)
...     discount = int(total * discount_rate)
...     final = total - discount
...     return {"total": total, "discount": discount, "final": final}
...
>>> orders = [("A", 12000), ("B", 8000), ("C", 5000)]
>>> checkout_summary(orders)
{'total': 25000, 'discount': 2500, 'final': 22500}

실습 환경/재현 정보

  • 실행 환경: conda env python100 (Python 3.11.14)