들어가기 전 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 통신은 다음과 같이 진행된다. 서버는 자신의 공개키 / 개인키를 만든다. 서버는 인증서에 자신의 공개키를 담아서 배포한다. 클라이언트는 인증서에서 서버의 공개키를 획득한다. 클라이언트는 서버의 공개키를 이용해 랜덤하게 세션키를 생성한 후, 서버에게 전송한다. 서버는 공개키로 암호화된 세션키를 서버의 개인 키로 복호화한다. (서버의 개인키로만 복호화 할 수 있다) 클라이언트 / 서버는 둘다 '세션키'를 가지고 있다. 이제 '암호화 통신'을 할 때, 이 세션키를 이용해 각각 암호화 / 복호화를 하게 된다. 비대칭키..
3.2 메모리 CPU의 클록 속도는 증가함. CPU 클록 속도만큼 데이터를 빠르게 가져오지 못함. 메모리 성능이 좋지 못함. 메모리 성능 문제를 극복하기 위해 CPU에 캐시 메모리가 추가됨. 멀티 코어에서는 캐시 메모리의 일관성을 잘 처리하기 위해 Cache Consistencty Protocol을 함. MESI 프로토콜 멀티 프로세서가 동시에 메모리를 Hit 하고 변경하는 경우라면, 다른 프로세서 관점에서 캐시는 invalid(무효)가 되어서 다시 처리됨. touchEveryItem() / touchEveryLine()은 i++ vs i += 16이기 때문에 16배의 일을 많이 할 것이라고 생각하지만, 실제 소요 시간은 거의 동일함. 캐싱 환경이기 때문에 이렇게 동작함. 이미 캐시에 모두 로딩되어 있기..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 43. Assertions 추가하기 (Introduce Assertion) 문제 상황 종종 코드로 표현하지 않았지만 기본적으로 가정하고 있는 조건들이 있다. 그런 조건은 알고리즘으로 추론하거나 주석을 읽으면서 확인할 수 있다. 전제조건 / 후처리 조건은 Assertion을 사용해서 보다 명시적으로 나타낼 수 있다. (런타임에는 영향 없음) Assertions 추가하기 Assertions은 if / switch 문과 달리 '항상' True이길 기대하는 조건을 표현할 때 사용한다. 프로그램이 Assertion에서 실패한다면 프로그래머의 실수로 생각할 수 있다. Assertion이 없어도 프로그램이 동작해야 한다. (자바에서는 ..