래퍼는 원래 함수의 이름을 가릴 수 있어
그냥 감싸면 __name__, 문서 문자열, 어노테이션, 시그니처가 래퍼의 것으로 보여. 디버거와 문서 도구, inspect.signature는 원래 계약을 잃어버려.
wraps가 메타데이터와 통로를 남긴다
래퍼에 @functools.wraps(fn)를 붙이면 중요한 메타데이터를 복사하고 __wrapped__로 원래 함수를 가리켜. 여러 데코레이터가 겹쳐도 검사 도구가 안쪽 함수까지 따라갈 수 있어.
원칙: 함수를 감싸는 모든 데코레이터는 특별한 이유가 없으면 wraps를 기본으로 써.