분류 전체보기 (24) 썸네일형 리스트형 TCP connection에 관하여 보호되어 있는 글입니다. [Kafka] producer 동작 원리(kafka advertised_listener, kafka dns lookup) 현업에서 Kafka client와 broker를 연결하기 위해 알아야 할 점들에 대해 살펴본다. 설명을 돕기 위해 kafka go client 중 Shopify/sarama 라이브러리를 사용하였다. 1. Kafka cluster에 대한 metadata 요청. brokers := []string{"1.2.3.4:9092", "1.2.3.5:9092"} config := sarama.NewConfig() producer, _ := sarama.NewAsyncProducer(brokers, config) 보통 위와 같이 broker 및 config에 대한 정보를 설정하고 NewProducer를 통해 metadata를 가져온다. kafka client는 전달받은 brokers slice를 순차적으로 탐색하며 m.. 후기 보호되어 있는 글입니다. Unicode vs UTF-8 차이점 및 golang rune이란? 쉽게 이해하기 Unicode vs UTF-8 비교는 도커 vs VM 만큼 바보같은 비교이다. 이는 Unicode, UTF-8에 대해 제대로 이해하지 못하고 있다는 증거이며 인코딩에 대한 개념이 부족한 것이다. 이와 관련하여 설명해 본다. 우선, Unicode는 모든 문자를 정리해두고 이 문자에 순번을 매겨둔 표이다. ASCII가 영어만을 고려해서 1Byte로 만들었다면 Unicode는 4Byte로 훨씬 넓은 범용성을 제공한다. 또한 ASCII에 대한 하위호환성을 유지한다. (무슨 뜻이냐면 ASCII에는 '김'에 해당하는 순번이 없지만 Unicode에는 있음.) 이에 반해 UTF-8은 인코딩, 디코딩 방식이다. 인코딩에 대한 사전적인 정의는 정보의 형태나 형식을 변환하는 처리나 처리 방식이라고 나와있는데, 쉽게 생각하면.. Prepared statment란? (golang) 서버에서 db에 쿼리를 할 때 일반 statement와 prepared statement의 차이점에 대해 설명한다. 기본적으로 db에 쿼리가 도착하면 db에서는 분석, 컴파일, 실행 3가지 과정이 일어난다고 한다. 그리고 이 실행을 하고 난 뒤 db cache에 해당 정보를 저장해두고 사용하는데 cache hit 기준은 쿼리 문자열이 100% 일치하였는가이다. 예를 들어, select name from test where no=30; 이 구문과 select name from test where no=31; 이 구문은 다르게 인식 되기 때문에 같은 유형의 쿼리임에도 불구하고 cache hit이 되지 않는다. 이 cache hit을 시키기 위해 사용하는 것이 바로 prepared statement 이다. 따.. [Network] VPN / Forward Proxy / Reverse Proxy 차이 Forward Proxy vs Reverse Proxy Forward Proxy는 client의 ip가 변경되는 것, Reverse Proxy는 server의 ip가 변경되는 것이라고 생각하면 된다. 유튜브나 네이버 스포츠 영상을 볼 때 해외에서 접속하면 서비스 대상 국가가 아니라고 나오면서 영상을 못보는 경우가 많은데, (사용할 수 있는 ip가 국가별로 고정되어 있고, 이 고정된 ip 정보를 가진 테이블로 필터링) 이를 우회하기 위해 사용하는 것이 Forward Proxy이다. 즉, 우리나라에서 1.1.1.1 ~ 1.1.1.10까지 총 10개의 ip만 사용할 수 있다고 가정을 해보자. 내가 접속하려는 사이트 www.a.com의 ip는 1.1.1.10인데, 이 서비스는 해외에서는 접속할 수 없어야 하는 .. [Data Structure] HashMap이란? 자료구조 뿐만 아니라 어떤 개념에 대해 이해할 때 탄생 배경을 아는 것, 그리고 정확하지는 않더라도 개인적으로 추측해보는 과정이 제일 중요하다고 생각한다. HashMap의 탄생 배경은 배열이다. 배열은 데이터를 하나의 논리적인 개념으로 묶어 사용할 수 있도록 편의성을 제공하지만 한 가지 큰 단점이 있는데, 바로 인덱스와 저장된 데이터 사이의 관계가 전혀 없다는 것이다. 즉, 배열에서 데이터를 활용하기 위해서는 배열의 모든 데이터에 접근해야 하는 것이다. 따라서 이 인덱스와 저장된 데이터 사이에 관계를 만들어 배열의 모든 데이터에 접근할 필요 없이 바로 해당 데이터가 저장된 위치를 알아낼 수 있도록 한 것이 바로 HashMap이다. 간단하게는 데이터를 HashCode라는 함수를 통해 int형으로 변환한 뒤.. [Network] bps vs pps, 필요 대역폭 계산하는 방법 대용량 데이터 파이프라인에서 필요 대역폭을 계산하는 것은 반드시 필요하다. 사실 가장 좋은 방법은 미리 넉넉한 네트워크 대역폭을 확보 및 실제 운영 환경에서 예상되는 peak 시간 대의 데이터를 발생시킨 뒤 모니터링 툴에 나오는 대역폭으로 설정을 하면 되긴 하지만 이런 인프라적인 요소가 갖춰지지 않았을 경우 직접 계산해보는 것도 좋은 방법이다. 30개의 운영 서버에서 하루에 총 1TB의 데이터가 생성되고, 모든 데이터는 서버마다 설치된 수집 agent를 통해 Kafka cluster로 유입이 된다고 가정하자. 1TB / 24(시간) / 60(분) / 60(초) = 약 11MB가 나온다. 즉, 평균 1초에 11MB의 데이터가 전송되는 것이며 이를 bit 단위로 변환하면 88Mbps가 된다. 최근에는 가정용.. [ElasticSearch] Replica에 관하여 ElasticSearch Cluster를 검토해보고 사용할 때 정말 많은 사람들이 아무 생각 없이 Replica를 사용하고 있는데, 이는 굉장히 중요한 개념이므로 사용 목적에 대해 깊게 고민해보아야 한다. Replica는 말 그대로 데이터의 복제본이다. 이를 사용하는 근본적인 이유는 당연히 하드디스크 즉, 물리장치의 장애가 발생했을때 데이터가 유실되는 것을 방지하기 위해 같은 내용의 데이터를 복사하여 다른 물리장치에 저장해두는 것이다. 이 목적이 Replica라는 개념이 나오게 된 이유이자 가장 근본적인 목적이기 때문에 elasticsearch cluster에서도 yellow라는 status를 따로 만들어 primary shard와 replica shard를 클러스터에 노드가 단 하나가 있더라도 절대 같.. [Kubernetes] ConfigMap 사용 이유 컨테이너에 사용되는 이미지는 dev부터 prd까지 동일한 형상을 가져야하며 이를 위해 컨테이너에서 필요한 환경 설정 내용을 컨테이너와 분리하여 사용해야 한다. 위 설명은 configmap을 사용하는 이유에 대해 검색하면 나오는 가장 흔한 답변인데, 내용 자체는 틀리지 않았지만 configmap을 사용하는 이유에 대한 답변은 될 수 없다. configmap을 사용하는 가장 핵심 이유는 의존성 제거이다. configmap을 사용하지 않을 경우 도커파일안에 설정파일을 COPY하는 과정이 필요하다. COPY를 하더라도 서비스가 동작하는데 아무런 문제가 없고, 무엇보다 dev에서부터 prd까지 하나의 컨테이너 형상으로 동작하는 것이 가능하다.(deployment에서 cmd 동작 값을 변경시켜주면서 실행) 그런데 .. 이전 1 2 3 다음