# 파이썬 라이브러리에서 Deprecation 경고가 작동하지 않는 이유와 해결 방법

**SEO 키워드**: `Python 경고`, `Deprecation`, `라이브러리 업데이트`

---

# # 서론 – “왜 DeprecationWarning 은 보이지 않을까?”

파이썬을 사용하면서 **`DeprecationWarning`** 이라는 메시지를 본 적이 있나요?

이 경고는 **“해당 함수·클래스는 곧 사라질 예정이니 새로운 API로 옮겨라”** 라는 뜻을 담고 있어, 라이브러리 개발자와 사용자 모두에게 중요한 정보를 제공합니다.

그런데 실제 프로젝트에서는 **경고가 화면에 전혀 나타나지 않아** 오래된 코드를 그대로 사용하게 되는 경우가 많습니다. 레딧의 토론 *“Deprecation via warnings don’t work for Python libraries”* 은 바로 이 현상을 짚어보며, 왜 파이썬 경고가 무시되는지, 그리고 초보자도 바로 적용할 수 있는 **해결책**을 제시합니다.

이 글에서는 파이썬 경고가 보이지 않는 대표적인 원인 3가지와, **환경 설정·코드 수정·CI 파이프라인**에 적용할 수 있는 구체적인 방법을 단계별로 정리합니다.

---

# # 1️⃣ Deprecation 경고가 기본적으로 숨겨지는 이유

파이썬 인터프리터는 **`DeprecationWarning`** 을 기본 설정(`-W default`)에서 **표시하지 않도록 설계**되었습니다. 이는 개발 단계가 아닌 일반 사용자에게 불필요한 경고를 보여주지 않기 위한 선택이었지만, 라이브러리 개발자 입장에서는 **버전 업그레이드 시점에 중요한 신호**가 사라지는 단점이 있습니다.

```
bash

# 기본 실행 – DeprecationWarning 은 보이지 않음

python my_script.py

```

따라서 **경고를 눈에 보이게 하려면 명시적으로 옵션을 바꿔야** 합니다.

---

# # 2️⃣ 경고가 보이지 않는 주요 상황 3가지

| 상황 | 설명 | 발생하는 문제 |

|------|------|--------------|

| **① 인터프리터 옵션 미설정** | `-W default` 혹은 `-Wd` 옵션을 주지 않음 | 모든 `DeprecationWarning` 은 무시 |

| **② 라이브러리 내부에서 경고 억제** | `warnings.filterwarnings('ignore')` 혹은 `simplefilter('ignore')` 를 호출 | 라이브러리 자체가 경고를 숨김 |

| **③ 테스트·CI 환경에서 경고가 캡처** | `pytest -q` 등은 경고를 출력하지 않음 | CI 로그에 경고가 나타나지 않아 업데이트를 놓침 |

이 세 가지가 겹치면 **“Deprecation via warnings don’t work”** 라는 현상이 그대로 재현됩니다.

---

# # 3️⃣ 초보자를 위한 경고 활성화 방법

## # 3‑1. 커맨드 라인에서 옵션 지정

```
bash

# 모든 경고를 표시

python -Wd my_script.py

# 기본 수준(Warning, Deprecation 등)만 표시

python -Wdefault my_script.py

```

> **Tip**: `-Werror` 옵션을 사용하면 경고를 **예외** 로 전환할 수 있어, 테스트 단계에서 바로 실패하도록 만들 수 있습니다.

## # 3‑2. 코드 레벨에서 필터링 설정

```
python

import warnings

# DeprecationWarning 을 항상 표시

warnings.filterwarnings('default', category=DeprecationWarning)

# 특정 모듈에만 적용하고 싶다면

warnings.filterwarnings('default', module='my_lib.*')

```

이 코드를 **프로젝트의 진입점(`__main__` 혹은 `settings.py`)** 에 넣으면, 실행 시점부터 모든 Deprecation 경고가 콘솔에 출력됩니다.

## # 3‑3. pytest·unittest 에서 경고 확인

### # pytest

```
bash

# -ra 옵션은 실패·스킵·경고를 모두 요약해 보여줍니다

pytest -ra

# -W default 로 경고를 기본 수준으로 출력

pytest -W default

```

`conftest.py` 에 아래 코드를 추가하면 모든 테스트에 자동 적용됩니다.

```
python

def pytest_configure(config):

    import warnings

    warnings.filterwarnings('default', category=DeprecationWarning)

```

### # unittest

```
python

import unittest

import warnings

class MyTest(unittest.TestCase):

    @classmethod

    def setUpClass(cls):

        warnings.filterwarnings('default', category=DeprecationWarning)

```

## # 3‑4. 라이브러리 개발자가 지켜야 할 베스트 프랙티스

1. **`warnings.warn` 사용** – `DeprecationWarning` 을 명시적으로 지정한다.

   
```
python

   import warnings

   warnings.warn(

       'old_func() is deprecated, use new_func() instead',

       DeprecationWarning,

       stacklevel=2

   )

   
```

2. **문서에 명시** – `CHANGELOG` 와 `README` 에 deprecation 일정과 대체 API 를 기록한다.

3. **버전 정책** – 최소 2개의 마이너 버전 동안 경고를 유지하고, 그 이후에 제거한다.

---

# # 4️⃣ 실제 사례 – 레딧 토론에서 언급된 라이브러리 3가지

| 라이브러리 | 문제점 | 해결 후 효과 |

|-----------|--------|--------------|

| **NumPy** | `np.asscalar` 가 deprecated 되었지만, 기본 설정에서는 경고가 안 보임 | `python -Wd` 로 실행하면 경고가 표시돼, 사용자들이 `np.ndarray.item()` 으로 전환 |

| **Pandas** | `DataFrame.append` 가 deprecated 되었으나, 내부에서 `warnings.filterwarnings('ignore')` 로 억제 | 프로젝트 전역에 `warnings.filterwarnings('default')` 를 추가해 경고가 나타나고, 코드 리팩터링이 진행 |

| **Requests** | `urllib3` 경고가 라이브러리 내부에서 억제돼, 보안 업데이트를 놓침 | `pip install -U requests` 후 `-Wdefault` 옵션을 적용하면 최신 보안 패치를 바로 확인 가능 |

이 사례들은 **경고가 숨겨진 채 배포**될 경우, 사용자는 오래된 API를 계속 사용하게 되고, 결국 **버그·보안 위험**에 노출된다는 점을 명확히 보여줍니다.

---

# # 5️⃣ 체크리스트 – 지금 바로 적용해 보세요

| 체크 항목 | 완료 여부 |

|----------|-----------|

| `warnings.filterwarnings('default', category=DeprecationWarning)` 를 프로젝트 진입점에 추가 | ☐ |

| CI 파이프라인에 `-Werror` 혹은 `-Wdefault` 옵션을 적용 | ☐ |

| `CHANGELOG` 에 deprecation 일정과 대체 API 를 기록 | ☐ |

| 주요 라이브러리(NumPy, Pandas 등)의 최신 버전 사용 여부 확인 | ☐ |

| 테스트 프레임워크(pytest, unittest)에서 경고가 출력되는지 확인 | ☐ |

---

# # 결론 – “Deprecation 경고를 무시하지 말자”

파이썬 경고는 **버전 호환성**과 **보안 유지**에 필수적인 신호입니다. 하지만 기본 설정이 경고를 숨기고, 일부 라이브러리가 의도적으로 억제하기 때문에 **“Deprecation via warnings don’t work”** 라는 문제가 발생합니다.

위에서 소개한 **커맨드 라인 옵션**, **코드 레벨 필터링**, **테스트·CI 설정**을 적용하면 어느 환경에서도 경고를 눈에 띄게 만들 수 있습니다.

> **행동 유도**

> 1. 현재 작업 중인 파이썬 프로젝트에 `warnings.filterwarnings('default', category=DeprecationWarning)` 를 삽입하고, 스크립트를 다시 실행해 보세요.

> 2. CI 파이프라인에 `-Werror` 옵션을 추가해 경고가 발생하면 빌드가 바로 실패하도록 설정합니다.

> 3. 사용 중인 주요 라이브러리의 `CHANGELOG` 를 확인하고, deprecation 일정에 맞춰 코드를 리팩터링하세요.

이제 **Deprecation 경고를 놓치지 않고, 안전하고 지속 가능한 파이썬 코드를 작성**할 준비가 되었습니다. 오늘 바로 적용해 보세요! 🚀
