본문 바로가기
08.개발&프로그래밍/1.파이썬

14. Python MemoryError & OverflowError(메모리/산술 오버플로우) 완벽 가이드

by JWJ Family 2025. 7. 18.
728x90

이 글에서는 Python에서 메모리가 부족하여 발생하는 MemoryError와 산술 연산 결과가 너무 커서 표현할 수 없을 때 발생하는 OverflowError의 정의와 주요 원인, 대표 실습 예제 및 해결 방법을 단계별로 상세히 다룹니다. 대용량 데이터 처리 및 복잡 수치 계산 상황에서 오류를 예방하고 디버깅하는 실질적인 팁을 제공합니다.

1. 개념 및 정의

MemoryError는 Python 인터프리터가 메모리 할당 요청을 충족할 수 없을 때 발생하는 내장 예외입니다. 이는 시스템의 RAM이 부족하거나 현재 프로세스가 사용할 수 있는 최대 메모리를 초과할 때 런타임 단계에서 탐지됩니다.

OverflowError는 산술 연산 결과가 부동소수점 또는 내부 표현이 허용하는 범위를 벗어날 때 발생하는 예외입니다. 일반적으로 정수 연산은 거의 무한대 정밀도를 제공하지만, 일부 수치 연산(특히 math.exp 같은 함수 호출)에서 범위를 벗어나면 OverflowError가 발생합니다.

2. 주요 발생 원인

  • 대용량 데이터 로드: Pandas, NumPy 등으로 전체 데이터셋을 한 번에 메모리에 올릴 때 발생할 수 있습니다.
  • 32비트 인터프리터 사용: 32비트 Python은 주소 공간이 제한되어 큰 데이터 처리 시 MemoryError를 초래합니다.
  • 무한 루프 및 과도한 재귀: 반복문이나 재귀 호출이 끝없이 이어지면 메모리가 고갈됩니다.
  • 지수 연산 과도: math.exp(1000) 또는 큰 factorial 계산 등에서 OverflowError가 발생할 수 있습니다.
  • 부동소수점 오버플로우: C 라이브러리 기반 부동소수점 구현이 허용 범위를 벗어날 때 발생합니다.

3. 실습 예제

아래 코드를 실행하면 MemoryError와 OverflowError 발생 상황을 확인할 수 있습니다.

# 예제 1: 대용량 리스트 생성으로 인한 MemoryError
try:
    data = ['x' * 1024 * 1024] * (1024 * 1024)
except MemoryError as e:
    print("MemoryError 발생:", e)

# 예제 2: 지수 연산으로 인한 OverflowError
import math

try:
    val = math.exp(1000)
except OverflowError as e:
    print("OverflowError 발생:", e)

4. 실행 결과 및 설명

MemoryError 발생: 
OverflowError 발생: math range error

첫 번째 예제는 1GiB 크기의 문자열 리스트를 생성하려다 메모리가 부족해 MemoryError가 발생합니다. 두 번째 예제는 math.exp(1000)이 표현 범위를 벗어나 OverflowError가 발생함을 보여줍니다.

5. 해결 방법 & 디버깅 팁

  1. 배치 처리 적용
    데이터를 작은 청크로 나눠 처리하고, 처리 후 delimport gc; gc.collect()로 메모리를 해제합니다.
  2. 제너레이터 사용
    리스트 대신 제너레이터(yield)를 활용해 메모리에 로드되는 객체 수를 최소화합니다.
  3. 64비트 인터프리터 활용
    64비트 Python을 사용해 더 큰 주소 공간을 확보하거나, 필요 시 가상 메모리 스왑 설정을 조정합니다.
  4. Decimal 모듈 활용
    decimal.Decimal을 이용해 임의 정밀도 계산을 수행하고 OverflowError를 예방합니다.
  5. 예외 처리 구문
    try-except MemoryErrortry-except OverflowError로 사용자에게 구체적 안내 메시지를 제공하고 대체 로직을 실행합니다.

6. 정리 및 다음 단계

이번 챕터에서는 MemoryErrorOverflowError의 정의, 주요 원인, 실습 예제 및 해결 방법을 살펴보았습니다. 대용량 데이터 처리와 복잡 수치 계산 시 배치 처리, 제너레이터, 예외 처리 기법을 적극 활용해 오류를 예방하세요. 다음 챕터에서는 로직 오류 (Logical Errors): 예상과 다른 결과 문제를 다룰 예정입니다. 많은 기대 부탁드립니다!

반응형