본문 바로가기

전체 글

(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 이다. 따..