Tech K8S Deployment가 생성하는 파드 이름의 해시값 충돌 가능성과 TSID로의 적용 과정 TSID는 Twitter Snowflake와 비슷하게 시간을 기반으로 고유한 값을 생성하며, 분산 환경에서의 Primary-Key 채번 등에 사용됩니다. TSID는 총 64비트로 구성되며, 그 구조는 다음과 같습니다. * 시간: 42비트, 2020년 1월 1일부터 채번 시점까지 경과된 ms단위 시간 * 노드 번호: 10비트, 지정할 수 있는 노드 번호 (10비트 기본값에서는 0~1023 까지) * 카운터: 12비트, 1ms당 생성할
Tech Kotlin Kotlin의 Annotation use-site target와 Spring Bean Validation에서의 Null-Safe 처리 코틀린을 시작한지 3일정도 되었는데, 자바를 쓰다 넘어가니 확실히 처음 자바를 배울 때 보다는 수월한 것 같습니다. 코틀린과 자바는 전반적으로 비슷하지만 그럼에도 차이가 있는 부분이 존재하는데, 이번 글에서 다룰 Spring Bean Validation에서의 차이가 그 중 하나일 것 같습니다. 이번 글에서는 배경 지식인 코틀린에서의 use-site targets을 먼저 살펴본 뒤 Spring의 Bean Validation을
Thoughts 우연인가 필연인가 작년 늦가을, 동갑 친구가 "너가 분명히 좋아할 거야" 라고 추천해준 학교 앞 휘경동의 한 카페에서 시작된 인연이 제주도 까지 이어졌다. 어느새 아지트가 된 이 곳을 운영하는 사장님, 이 곳에서 만났던 사장님의 친구이신 형과 떠난 제주도 여행은 '이보다 더 할 수 없다'라는 짧은 문장으로 요약된다. 무계획
Tech Kafka Kafka Selector: 컨슈머에 활용 지난 5편의 Selector 글에서 과정 자체는 대략적으로 설명하였으나, 여전히 ‘이걸 어떻게 활용할 수 있을까?’라는 의문이 존재합니다. 이번 글에서는 이 의문에 대한 답을 위해 다음의 내용을 다뤄볼 예정입니다. 1. Spring Kafka가 아닌 직접 구현한 Consumer를 이용하여 이전 4편에서의 가설에 대한 테스트를 진행합니다. 2. Selector의 poll() 과정에서 기록되는 몇 가지 메트릭을
Thoughts 잊고 있던 소중함 오늘은 예비군을 다녀왔다. 지난 3월에 받은 3박4일 동미참 훈련과 달리 오늘은 단 하루만 하는 학생 예비군 훈련이기에 이제는 하루라는 시간조차 아깝지만 그래도 동미참보단 낫지... 라는 생각으로 별생각 없이 갔다. 유일한 흠은 내 자취방인 강북구 수유동에서 남양주 금곡 훈련장까지 편도 1시간 30분 정도가 걸린다는 것이다. 별생각 없이 간 것이지 그다지 좋은
Thoughts 모든 것은 생각하기 나름 정말 오랜만에 친구들(정확히는 동생들이지만..)과 술을 마셨다. 맥주는 집에서 가끔 한 캔씩 마셨으니 정확히는 소주를 마신 것이고, 3주 만에 만나서 마시는 거니 '정말 오랜만'이라고 할 정도는 아니라고 할 수 있으나 한창때는 주에 2번은 새벽까지 마셔댔으니 정말 오랜만이라고 할 법하다. 학교라는 비슷한 일상을 살아가던 예전과 달리, 한
Tech Kafka Kafka Selector: Poll Selector 과정을 이해하는 것이 어떤 도움을 줄 수 있을까요? 지난 글에서 다룬 소켓 버퍼의 크기 등을 제외하면, 사실 사용자가 크게 수정할 부분이 없기는 합니다. 그럼에도 Selector의 과정을 공부하며 제가 느꼈던 것은, 프로듀서와 컨슈머의 이해도를 높일 수 있고, 카프카의 구현 방법 자체에서 아이디어를 얻어간 것이 있다는 것입니다. 아이디어를 얻어간 예시 중
Tech Kafka Kafka Selector: NetworkReceive / Application Buffer for SSL 카프카 클라이언트를 사용할 때, 모든 메시지를 평문(PlainText)로 전송하는 것은 인증이나 추가적인 Handshake에서 오는 오버헤드를 줄일 수 있어 성능 면에서는 유리할 수 있으나, 보안이 필요한 곳에서는 PlainText가 아닌 SSL이나 SASL 방식을 사용할 것입니다. Selector에서 마지막으로 다뤄볼 poll() 과정에서는 keysWithBufferedRead 라는 SelectionKey 컬렉션 필드를 사용하고 있고, 이 컬렉션에 데이터가 있는지로
Tech Kafka Kafka Selector: Connection / KafkaChannel 카프카의 프로듀서, 컨슈머는 내부적으로 각각 Sender와 KafkaConsumer에서 NetworkClient를 호출하고, 실제 네트워크 I/O 작업은 NetworkClient가 Selector를 호출하면서 시작됩니다. 정확히는, 컨슈머는 ConsumerNetworkClient를 호출하고 여기서 NetworkClient를 호출합니다. 카프카에서는 기존의 NIO Selector와 SelectionKey를 기반으로 자체 구현한 Selector와, SocketChannel을 기반으로 자체 구현한 KafkaChannel을 사용합니다. 위 그림을 보면 SelectionKey와 SocketChannel은 얼핏 보면 순환참조처럼 느껴지는 것
Tech Kafka Kafka Selector: Java NIO 하나의 시스템이 자체적으로 모든 작업을 수행할 수 있다면 좋겠으나, 대부분의 시스템은 외부와 데이터를 주고받으며 동작합니다. 물론, 하나의 시스템을 여러 컴포넌트로 구성할 수 있겠으나 이 경우 특정 컴포넌트가 SPOF(Single Point Of Failure)가 될 위험이 존재합니다. 따라서 장애 발생을 대비하기 위해 이 컴포넌트들을 분리하는 것이 필요하며, 이렇게 분리된 각 컴포넌트들이
Tech Kafka Kafka Selector: Buffer / TCP 카프카는 비동기적으로 작동하고, 사용자가 코드를 작성하는 부분은 실제 전송보다 ‘전송 요청’에 가깝습니다. 즉 프로듀서와 컨슈머를 정확하게 이해하고, 모니터링과 최적화 포인트를 잡기 위해서는 눈에 보이는 부분과 보이지 않는 부분을 이해할 필요가 있겠습니다. 이번 Selector 시리즈에서는 카프카에서의 네트워크 I/O 작업이 이뤄지는 카프카의 Selector 클래스를 알아볼 예정이며, 이번 글과 다음 글에서는
Thoughts 론 뮤익이 표현하는 삶 전시는 평균적으로 한 달에 한 번정도는 보러 갔던 것 같다. 전시는 내가 예술적인 인간이라서가 아니라, 하나의 피사체를 다양한 각도에서 관찰하고, 정답보다는 다양한 생각을 하며 생각의 폭을 넓혀간다는 관점에서 좋아 하고, 그래서 혼자 가는 것을 선호한다. 하지만 삶이 바쁘고 여유가 없을 때 가장 내려놓기 쉬운 취미생활은 아마도 '문화 / 예술'
Tech Alloy Grafana Alloy: 쿠버네티스에서의 초기 배포부터 개선까지 이번 글에서는 지난 글의 내용을 바탕으로 쿠버네티스에서의 설정 방법을 알아보겠습니다. 공식 문서에 있는 가장 기본적인 설정 방법부터 시작하여 제가 느낀 불편과 그 개선 방안을 작성합니다. 따라서 이 글은 지난 두 개의 글보다 제 주관이 더더욱 담겼다는 것, 즉 이 글의 내용은 Best-Practice가 아니라는 것을 참고해주시면 감사하겠습니다. alloy-configurationGrafana Alloy 설정 파일상돌허브pricelees
Tech Alloy Grafana Alloy: 컴포넌트 설정 적용 이번 글에서는 만들어진 컴포넌트를 설정에 반영하는 방법과, Alloy UI에서 이를 확인하는 방법을 알아봅니다. 컴포넌트는 지난 글에서 만들었던 아래 코드의 내용을 그대로 사용하며, 이름만 기존 "abcde"에서 조금 더 의미 있는 이름으로 수정하였습니다. discovery.kubernetes "kube_system_pods" { role = "pod" namespaces { names = ["kube-system"
Tech Alloy Grafana Alloy: 컴포넌트 구조 로그 저장소로 Grafana Loki를 사용하시는 분들은 대부분 Promtail과 함께 사용하시는 것 같습니다. 하지만 Promtail의 지원 기간이 얼마 남지 않았고, Grafana에서는 Alloy로의 마이그레이션을 지원하는 만큼 Alloy의 사용도 점차 많아질 것이라 생각됩니다. Promtail agent | Grafana Loki documentationHow to use the Promtail agent to ship logs to LokiGrafana Labs 저는 이번에 개인용 서버의
Thoughts Eden 네이버 MYBOX 에서는 가끔 '특정 시기의 추억을 확인해 보세요' 와 같은 알림을 보내는데, 작년 말쯤 온 10년 전이라는 까마득한 과거의 순간을 확인해 보라는 알림을 보고 들어간 곳에는 2013년 말 ~ 2014년 초의 사진들이 있었다. 당시를 회상해 보면 고등학교 시절에 사진작가라는 꿈을 가졌었는데, 하필 3학년 진학을 앞둔 시점에 카메라를 구입해