Deprecation 경고가 '양치기 소년'이 되는 것을 방지하기
PHPStan이 메서드를 deprecated로 표시하면, 보통은 대체할 수 있는 메서드를 찾습니다. 하지만 대체할 메서드가 없다면 어떻게 해야 할까요?
Shopware는 새로운 선택적 매개변수(optional parameter)를 추가하는 것과 같은 계획된 변경 사항을 알리기 위해 @deprecated 태그를 사용해 왔습니다. 하지만 정적 분석 도구들은 이 태그를 실제 사용 중단(deprecation)으로 간주하여 모든 호출에 대해 경고를 띄웠습니다. 경고가 너무 많아지자 개발자들은 이를 무시하기 시작했고, 결국 경고의 가치가 사라졌습니다. 이것이 전형적인 '양치기 소년'의 사례입니다.
Shopware 6.7.14.0에서는 이 신호들을 분리했습니다.
@deprecated– 사라지거나 교체될 API를 위해 남겨두세요. 코드를 반드시 마이그레이션해야 합니다.- BC-change attributes – 새로운 선택적 매개변수나 변경된 반환 타입처럼, API를 유지하면서 계획된 미세 조정을 수행할 때 사용하세요.
새로운 어트리뷰트는 Shopware\Core\Framework\Deprecation\BCChange에 정의되어 있습니다. 이 어트리뷰트는 무엇이 변경되는지, 그리고 어떤 부분에 영향을 미치는지 정확히 알려줍니다.
다음과 같이 두 그룹으로 나누었습니다:
- CallSiteCompatibilityChange – 메서드를 호출하는 코드에 영향을 미칩니다.
- ExtenderCompatibilityChange – 메서드를 확장(extend)하거나 재정의(override)하는 클래스에 영향을 미칩니다.
이제 다음 메이저 릴리스가 나오기 전에 Shopware 6.8에 맞춰 확장을 미리 준비할 수 있습니다.
예시: 메서드에 새로운 선택적 매개변수가 추가될 예정입니다. 오늘 미리 재정의(override) 코드에 해당 매개변수를 추가해 두세요. 그러면 현재 버전과 미래 버전 모두에서 코드가 정상적으로 작동합니다.
이번 변경을 통해 deprecation 경고에 대한 신뢰를 회복할 수 있습니다.
개발자를 위한 세 가지 단계
@deprecated는 필수 수정 사항으로 간주하세요. 해당 API는 사라질 것입니다.- 실제 문제를 숨길 수 있는 광범위한 ignore 패턴을 제거하세요.
- BC-change 어트리뷰트를 주시하고, 나중에 대규모 마이그레이션을 하는 대신 지금 작고 안전한 업데이트를 적용하세요.
Source: https://dev.to/shopware/when-deprecated-cries-wolf-making-shopwares-next-major-upgrades-easier-983
