# 파이썬 라이브러리에서 Deprecation 경고가 효과가 없는 이유와 해결 방안 (50~60자)

---

# # 서론 – “왜 Deprecation 경고가 무시될까?

파이썬 개발자를 하다 보면 **“DeprecationWarning”** 이라는 메시지를 마주하게 됩니다.

하지만 실제 프로젝트에서 이 경고가 무시되거나 눈에 띄지 않아, 오래된 API가 그대로 사용되는 경우가 종종 발생합니다.

이 글에서는 **“Deprecations via warnings don’t work for Python libraries”** 라는 레딧 토론을 바탕으로, 파이썬 라이브러리에서 경고가 제대로 전달되지 않는 원인과, 초보자도 바로 적용할 수 있는 해결 방법을 단계별로 정리합니다.

> **핵심 키워드**: `Python 경고`, `Deprecation`, `라이브러리 호환성`

---

# # 1️⃣ Deprecation 경고가 왜 필요한가?

- **코드 유지보수**: 오래된 함수·클래스를 사용 중단하고 새로운 인터페이스로 전환하도록 유도합니다.

- **버전 호환성**: 다음 메이저 릴리즈에서 해당 API가 제거될 때, 사용자에게 사전 경고를 제공해 갑작스러운 오류를 방지합니다.

- **커뮤니티 신뢰**: 라이브러리 개발자는 투명하게 변화 과정을 공유함으로써 사용자와의 신뢰를 유지합니다.

하지만 **경고가 표시되지 않으면** 위와 같은 이점이 사라지고, 결국 **버그와 보안 위험**이 늘어나게 됩니다.

---

# # 2️⃣ 왜 Deprecation 경고가 눈에 띄지 않을까? – 흔히 발생하는 3가지 상황

| 상황 | 설명 | 결과 |

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

| **① 기본 설정에서 경고가 숨김** | 파이썬 인터프리터는 기본적으로 `DeprecationWarning`을 **표시하지** 않도록 설계되었습니다. (`-W default` 옵션이 필요) | 개발자는 경고를 전혀 보지 못함 |

| **② 라이브러리 내부에서 경고를 억제** | `warnings.filterwarnings('ignore')` 혹은 `warnings.simplefilter('ignore')`를 사용해 전역적으로 무시하게 함 | 사용자는 라이브러리 업데이트 시점에 경고를 놓침 |

| **③ 테스트·CI 환경에서 경고가 로깅되지 않음** | `pytest -q` 같은 옵션은 경고를 캡처하고 출력하지 않을 수 있음 | CI 결과만 보고 문제를 인지 못함 |

이 세 가지가 결합되면 **“Deprecations via warnings don’t work”** 라는 현상이 발생합니다.

---

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

## # 3-1. 인터프리터 옵션 활용

```
bash

python -Wd your_script.py   # 모든 경고를 표시

python -Wdefault your_script.py   # 기본 수준 경고만 표시

```

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

## # 3-2. 코드 레벨에서 경고 필터링

```
python

import warnings

# DeprecationWarning을 항상 표시

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

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

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

```

## # 3-3. `pytest`와 같은 테스트 프레임워크에서 경고 확인

```
bash

pytest -ra  # 실패·스킵·경고를 모두 요약해서 보여줌

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

```

또는 `conftest.py`에 아래 코드를 추가해 전역 적용:

```
python

def pytest_configure(config):

    import warnings

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

```

## # 3-4. 라이브러리 개발자가 할 일

1. **`warnings.warn` 사용**

   
```
python

   warnings.warn(

       'my_function() is deprecated, use new_function() instead',

       DeprecationWarning,

       stacklevel=2

   )

   
```

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

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

---

# # 4️⃣ 실제 사례 분석 – 레딧 토론 요약

레딧 스레드에서는 다음과 같은 실제 사례가 공유되었습니다.

1. **NumPy**: 오래된 `np.asscalar` 함수가 `DeprecationWarning`을 발생시키지만, 기본 설정에서는 보이지 않아 사용자들이 여전히 사용.

2. **Pandas**: `DataFrame.append`가 deprecated 되었음에도, 경고가 억제돼 테스트에서 놓친 사례.

3. **Requests**: `urllib3` 경고가 라이브러리 내부에서 `warnings.filterwarnings('ignore')` 로 숨겨져 있었음.

이러한 사례는 **경고가 숨겨진 채 배포**될 경우, 라이브러리 사용자는 최신 API 전환을 놓치게 된다는 점을 강력히 보여줍니다.

---

# # 5️⃣ 베스트 프랙티스 체크리스트

| 체크 항목 | 수행 여부 |

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

| `DeprecationWarning`을 **표시**하도록 환경 설정 | ✅ |

| 라이브러리 코드에 `warnings.warn(..., DeprecationWarning)` 사용 | ✅ |

| 문서에 deprecation 일정·대체 API 명시 | ✅ |

| CI/테스트 파이프라인에서 경고를 **실패**로 전환 (`-Werror`) | ✅ |

| 주요 릴리즈마다 **마이너 버전** 두 번 이상 경고 유지 | ✅ |

위 체크리스트를 프로젝트에 적용하면 **“Deprecation 경고가 작동하지 않는다”**는 문제를 근본적으로 해결할 수 있습니다.

---

# # 결론 – 지금 바로 적용해 보세요!

파이썬 라이브러리에서 **Deprecation 경고**가 무시되는 상황은 설정 실수와 라이브러리 설계 부족에서 비롯됩니다.

하지만 **인터프리터 옵션**, **코드 레벨 필터링**, **테스트 환경 구성**만 올바르게 하면 누구나 쉽게 경고를 눈에 띄게 만들 수 있습니다.

> **행동 유도**

> 1. 현재 프로젝트에 `warnings.filterwarnings('default', category=DeprecationWarning)` 코드를 추가해 보세요.

> 2. CI 파이프라인에 `-Werror` 옵션을 넣어 경고를 오류로 전환하세요.

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

이제 여러분의 코드는 **미래 호환성**을 보장하고, **버그와 보안 위험**을 사전에 차단할 수 있습니다. 오늘 바로 적용해 보시고, 깨끗한 파이썬 생태계를 함께 만들어 갑시다! 🚀
