들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item51 요약 클래스 데코레이터는 class 인스턴스를 파라미터로 받아서 이 클래스를 변경한 클래스나 새로운 클래스를 반환해주는 간단한 함수다. 준비 코드를 최소화하면서 클래스 내부의 모든 메서드나 어트리뷰트를 변경하고 싶을 때, 클레스 데코레이터가 유용하다. 메타 클래스는 서로 쉽게 합성할 수 없지만, 여러 클래스 데코레이터를 충돌 없이 사용해 똑같은 클래스를 확장할 수 있다. 클래스 전체적으로 데코레이터 사용하는 방법 클래스 함수마다 필요한 데코레이터 붙이기 가독성에 문제 있음 / 데코레이터 실수로 놓칠 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item47 요약 인스턴스 어트리뷰트에 접근(hello.value, hasattr 등)하면 항상 __getattribute__() 메서드가 호출됨. __getattribute__()를 호출했을 때, 어트리뷰트가 없으면 AttributeError가 발생함. 이 때, __getattr__() 메서드가 호출됨. 인스턴스 어트리뷰트에 값을 대입(예시, a.hello = 10)하면, __setattr__()이 항상 호출됨. __getattribute__, __getattr__, setattr__에서 무한 재귀 문제를 막기..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item39 요약 파이썬 클래스에서는 생성자가 __init__ 메서드 뿐이다. @classmethod를 사용하면 클래스에 다른 생성자를 정의할 수 있다. 클래스 메서드 다형성을 활용하면 여러 구체적인 하위 클래스의 객체를 만들고 연결하는 제네릭한 방법을 제공할 수 있다. Effective Python Item 39. 객체를 제네릭하게 구성하려면 @classmethod를 통해 클래스 다형성을 활용하라 다형성은 객체, 클래스가 같은 '인터페이스를 제공'하는 경우에 서로 다른 기능을 제공할 수 있는 성질을 의미한다. 파..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item38 요약 Hook 등에 함수를 전달해야할 때, 상태없는 함수의 경우는 함수를 정의해서 사용하는 것이 좋음. 만약 클로저를 이용해 상태있는 함수를 사용해야 한다면, 함수 대신 클래스를 정의해서 사용하는 것이 좋음. (가독성 문제)( 이런 용도로 사용되는 클래스는 '__call__()'을 구현한 Callable 객체를 전달하는 것이 가독성이 좋음. 클래스의 __call__() 메서드를 구현하면 인스턴스를 호출할 수 있음. Effective Python Item 38. 간단한 인터페이스의 경우 클래스 대신 함..
들어가기 전 istio를 사용할 때 VHOST와 SNI 키워드가 많이 나왔었다. 그런데 내가 이것들에 대해서 정확히 잘 모르고 있어서, 이 부분을 조금 보충해보고 싶어 글을 작성한다. 가상 호스트 (Virtual Host) 가상 호스트는 하나의 서버를 이용해 여러 서비스를 제공하고자 사용하는 개념이다. 이 때 서버는 Physical Machine 1대가 될 수도 있고, Pod 1개가 될 수도 있고, 컨테이너 1개가 될 수도 있다. SNI(Server Name Indicator) SNI는 서버 이름을 알려주는 TLS 프로토콜의 Extention이다. 그런데 왜 SNI는 필요한 것일까? 다음 경우를 가정해보자. 한 서버가 여러 도메인에 대해 서비스를 하고 있다. (https://a.com, https://b..