분류 전체보기
-
[Kafka 101] 카프카 프로듀서 (Kafka Producer)개발자 라이프/카프카 2020. 3. 15. 15:45
들어가며 카프카는 메시지를 생산, 발송하는 프로듀서(Producer)와 메시지를 소비, 수신하는 컨슈머(Consumer), 그리고 프로듀서와 컨슈머 사이에서 메시지를 중개하는 브로커(Broker)로 구성됩니다. 이번 글은 메시지 흐름의 시작인 프로듀서에 대해 전반적으로 설명합니다. 카프카 프로듀서 프로듀서는 보통 카프카 프로듀서 API와 그것으로 구성된 애플리케이션을 말합니다. 그리고 프로듀서는 브로커에 특정 토픽(혹은 파티션 영역까지)을 지정하여 메시지를 전달하는 역할을 담당합니다. 프로듀서를 통해 전달되는 메시지의 구조는 다음과 같습니다. 토픽 (Topic) 토픽 중 특정 파티션 위치 (Partition) 메시지 생성 시간 (Timestamp) 메시지 키 (Key) 메시지 값 (Value) 프로듀서 ..
-
[Kafka 개발] 큰 사이즈의 메시지를 발행-소비하는 방법에 관한 예제 (How to Pub-Sub the large size message like a image)개발자 라이프/카프카 2020. 2. 28. 19:57
들어가며 카프카는 메시지 발행-소비에 있어 한번에 요청하는 용량을 정할 수 있습니다. 프로듀서의 경우 `max.request.size`로 단일 send 요청의 크기를 정하고, 컨슈머의 경우 `fetch.max.bytes`로 단일 fetch 요청의 최대 크기를 정할 수 있습니다. 만약 단일 메시지의 크기가 이 설정들보다 클 경우 메시지를 Pub-Sub할 수 없습니다. 또한, 설정 값을 증가시켜 발행-소비를 가능하게 하더라도, 메시지 크기가 어느 정도에 이르면 성능이 하락하게 됩니다. 이때 우리는 메시지를 쪼개서 보내는 방법을 생각할 수 있습니다. 이번 글은 단일 요청에 대한 설정보다 메시지 크기가 큰 경우, 메시지 내용을 쪼개서 보내는 방법에 관하여 작성된 예제 코드를 설명합니다. 예제 코드는 깃헙에서 확..
-
[Kafka 101] 카프카 메시지와 토픽과 파티션 (Kafka Message, Topic and Partition)개발자 라이프/카프카 2020. 2. 25. 16:03
들어가며 카프카 브로커는 프로듀서로부터 메시지를 전달받고, 다시 이를 컨슈머로 전달하는 역할을 담당합니다. 이번 글은 카프카를 통해 흘러가는 메시지에 대해 알아보고, 나아가 카프카의 요소인 토픽과 파티션에 대해 개념적으로 살펴봅니다. 카프카의 메시지 카프카의 메시지는 Key(키)와 Value(값)로 구성됩니다. 먼저, 메시지의 키는 해당 메시지가 카프카 브로커 내부에 저장될 때, 저장되는 위치와 관련된 요소입니다. 프로듀서가 메시지를 브로커로 전달할 때, 프로듀서 내부의 파티셔너(Partitioner)가 저장 위치를 결정하는데, 이때 키의 값을 이용하여 연산하고 그 결과에 따라 저장되는 위치를 결정합니다. 메시지의 값은 메시지가 전달하고자 하는 내용물을 의미합니다. 값은 단순한 문자열이 될 수도 있고, ..
-
글또 4기 시작하며김김 라이프 2020. 2. 18. 13:19
글또 3기를 지나 4기 시작을 눈 앞에 두고 있다. 4기는 어떻게 진행하며, 어떤 글을 써야 할까 고민해본다. 단단한 지식을 만드는 글 올해의 목표는 말랑말랑한 지식들을 더욱 단단한 지식으로 만드는 것이다. 특히, 주요 업무로하고 있는 카프카와 그 근간이 되는 CS, Linux에 관련된 것들을 단순히 아는 것이 아닌 글로 정리하고 설명할 수 있는 수준으로 만들고 싶다. 그렇기 때문에 모르거나 애매한 지식뿐만 아니라 이미 아는 지식이라도 잘 설명할 수 있도록 정리하는 것이 글또 4기 목표 중 하나다. 계획된 글 글또 3기에서 스스로 가장 아쉬웠던 것은 특별한 목표 없이 마구잡이로 글을 썼던 것이다. 물론 다양한 주제, 재밌는 주제도 좋지만 돌이켜보면 큰 맥락 없이 따로 노는 글들이었다. 그래서 이번 글또 ..
-
X.500과 LDAP 정리개발자 라이프 2020. 2. 16. 17:50
들어가며 이번 글은 X.500과 LDAP이 무엇인지 알아봅니다. 디렉터리 액세스 프로토콜(Directory Access Protocol; DAP) X.500과 LDAP은 디렉터리에 저장된 데이터에 접근하기 위한 프로토콜입니다. 즉, 디렉터리 형태로 데이터가 저장된 서버와 그 것에 접근하는 클라이언트 간의 통신 규약입니다. 클라이언트는 각각의 프로토콜을 이용하여 서버에 저장된 데이터를 조회, 수정, 삭제와 같은 작업을 할 수 있습니다. 계층적인 형태인 디렉토리 구조는 간단하고 확장이 용이하며, 조직적인 관리가 가능하므로 인증과 같은 다양한 곳에서 사용됩니다. X.500 이란? X.500은 OSI 레이어를 기반으로 구성된 프로토콜입니다. 이 프로토콜의 클라이언트는 DUA(Directory User Agent..
-
[노션] Export 할 때, 폰트 크기가 변경되는 현상 해결개발자 라이프 2020. 2. 14. 19:17
들어가며 노션은 PDF, HTML, Markdown 으로 Export(익스포트) 할 수 있습니다. 이번 글은 동일한 문서라도 익스포트 과정에서 폰트 크기가 확연하게 달라지는 현상의 원인과 해결 방법에 대해 설명합니다. 현상 원인 폰트 크기가 달라지는 주된 원인은 문장이 페이지를 넘어가는 경우입니다. 저는 다음과 같이 코드 블럭을 통해 이 현상을 겪었습니다. 이런 현상을 가진 페이지와 아닌 페이지를 각각 동일하게 PDF로 출력하면 다음과 같이 출력됩니다. 결론 이처럼 동일한 내용을 가진 문서라도 적절하게 작성되지 않으면 출력 과정에서 동일한 포맷을 유지할 수 없습니다. 그러므로 최대한 페이지 내용이 페이지 전체 크기를 넘지 않도록 작성하는 것이 좋습니다.
-
로또는 한 번호로만 뽑는 게 나을까??김김 라이프 2020. 1. 26. 09:30
저는 매주 로또를 삽니다. 아주 희박한 확률이지만, 0%와 0.00000000001%로는 다르기 때문이죠! 또 투자 대비 가장 이익이 많은 투자라고 생각합니다. 아무튼 오늘도 로또 추첨에 대비해 5천 원을 질렀는데, 문득 궁금증이 생겼습니다. 한 번호로 쭉 계속 뽑는 게 나을까? 아니면 계속 다른 번호로 뽑는 게 나을까? 그래서 후다닥 코드를 짜서 실험을 해봤습니다. 실험 시나리오 모든 추첨에서 동일한 번호를 사용하는 고정 번호 리스트와 매 번 추첨마다 달라지는 동적 번호 리스트가 있습니다. 각각의 번호 리스트는 5개의 번호 집합을 가지고 있습니다. 즉, 로또 5천원 어치라는 것이죠. 그리고 1000번의 케이스로 각각 고정과 동적 번호 리스트가 각각 정확히 1등이 당첨될 때까지의 반복 횟수를 구하고 비교..
-
해시 함수 그리고 소금과 후추 (Hash Function & Salt & Papper)개발자 라이프 2020. 1. 22. 00:15
TL; DR 해시 함수(Hash Function)는 암호화 방식이 아님. 해시 함수는 입력 값에 대한 유일 값을 반환하는 함수. 해시 함수의 결과 값은 고정 길이를 가짐. 해시 함수의 결과 값은 입력 값으로 다시 복원할 수 없음. (단방향) 해시 함수는 비밀번호 저장에 사용됨. 해시 함수의 입력 값에 따라 출력 값이 정해져 있어 해킹을 당할 수 있음. 해시 함수 입력 값에 별도의 값을 더하는 것이 소금(Salt)와 후추(Papper). 소금은 각 입력 값마다 임의로 생성된 값 (즉, 각각 다른 임의의 값). 후추는 모든 입력 값에 공통으로 적용되는 값 (즉, 모두 같은 정적 값). 소금은 저장소에 같이 저장되고, 후추는 저장되지 않음. 결국, (입력 값 + 소금 + 후추)를 해시 함수에 적용하고 그 결과..