들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : 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..
들어가기 전 어제 회사에서 세미나를 듣는데 DNS의 CNAME, A Record 키워드가 나왔다. 그런데 어떤 내용인지 정확히 알지 못하기 때문에 부족한 지식을 보충하고자 이 글을 작성한다. DNS IP는 192.0.0.1 같은 형식의 숫자 조합이다. 특정 서버의 주소를 의미하는 값이지만, 연관관계 없는 숫자가 나열되어 있는 형식이기 때문에 사람이 외우기 쉽지 않다. IP 주소를 기억하기 쉽도록 이름을 붙여주는 것을 도메인이라고 한다. DNS 서버는 도메인과 IP 주소 정보를 쌍으로 저장하고 있는 서버를 의미한다. 도메인 IP naver.com 223.130.200.107 google.com 142.250.206.238 이렇게 Key / Value 형식으로 저장되는 값 한 줄을 DNS Record라고 한..
들어가기 전 mTLS는 kubernetes, istio 같은 것들을 이용할 때 많이 등장하는 키워드다. 그런데 정확히 어떤 내용인지 모르기 때문에 간략히 배경 지식을 알아보자. TLS 통신 TLS 통신은 다음과 같이 진행된다. 서버는 자신의 공개키 / 개인키를 만든다. 서버는 인증서에 자신의 공개키를 담아서 배포한다. 클라이언트는 인증서에서 서버의 공개키를 획득한다. 클라이언트는 서버의 공개키를 이용해 랜덤하게 세션키를 생성한 후, 서버에게 전송한다. 서버는 공개키로 암호화된 세션키를 서버의 개인 키로 복호화한다. (서버의 개인키로만 복호화 할 수 있다) 클라이언트 / 서버는 둘다 '세션키'를 가지고 있다. 이제 '암호화 통신'을 할 때, 이 세션키를 이용해 각각 암호화 / 복호화를 하게 된다. 비대칭키..
% 두 코드는 같은 패턴 매칭을 의미함. % 즉, ';'는 'orelse'로 동작 sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-> sol(_, _, I1, I2, DP) when I1 == 0; I2 == 0-> % 두 코드는 같은 패턴 매칭을 의미함. % 즉, ','는 'andalso'로 동작 sol(_, _, I1, I2, DP) when I1 == 0 andalso I2 == 0-> sol(_, _, I1, I2, DP) when I1 == 0, I2 == 0->