분류 전체보기 60

CODE ch.5 다른 방법을 찾아봅시다

이번글은 할스 펫졸드님의 책 CODE를 김현규 님이 번역한 책의 다섯 번째 챕터에 대해 제가 이해하고 느낀 점에 대한 겁니다. 4장에선 전기에 대해 배웠죠. 그럼 이제 이걸 써먹어 봅시다. 4장 이전엔 저희가 친한 친구와 통신하고 있었죠?(모스부호 말이에요) 그런데 가장 친했던 그 친구가 이사를 갔다고 합니다. 이제 그럼 두 번째로 친했던 옆집에 사는 친구가 가장 친한 친구가 됐네요. 근데 그 친구와는 옆집이긴 하지만 방의 창문이 마주 보고 있지 않네요. 그럼 손전등으론 통신을 할 수 없겠군요. 그럼 서로 집에 이전 장에서 배운 걸 이용해 회로를 짜봅시다. 위와 같이 짜면 내 방에서 친구방으로 모스부호를 보낼 수 있겠네요! 뭐 친구도 보내려면 똑같이 하나를 두면 되겠죠. 그러면 전선이 좀 많이 필요하겠네..

cs 2023.01.15

kafka의 기본 구성요소들 broker, topic, partition

kafka는 다음과 같은 기본 구성요소들이 있습니다. 1. producer(publisher, source application) 2. consumer(subscriber, target application) 3. broker 4. topic 5. partition 이번글에선 broker,topic,partition에 대해 알아보겠습니다. broker broker는 실제 컴퓨터 한대의 논리적인 단위입니다. producer와 consumer bootstrap.server설정에 넣던 주소가 broker의 주소인 것이죠 broker는 보통 고가용성을 위해 최소 3대 이상 구동됩니다. broker들의 한 묶음이 kafka 클러스터 입니다. topic topic은 직역하면 주제입니다. topic은 데이터를 나누는..

분산처리 2023.01.14

CODE ch.4 전등을 분해해 봅시다

이번글은 할스 펫졸드 님의 책 CODE를 김현규 님이 번역한 책의 네 번째 챕터에 대해 제가 이해하고 느낀 점에 대한 겁니다. 챕터 4부터는 본격적으로 하드웨어적인 그중 전기에 대해 이야기합니다. 전기라 해서 지레 겁먹을 필요 없이 챕터 4에서 이야기하는 전기는 중학교 수준정도입니다. 전지, 전구, 스위치, 전선으로만 이루어진 가장 기초적인 회로그림과 함께 설명하는데, 전기가 일어나는 방식에 대해 이야기합니다. 전기 관련 사진을 보신 적이 있다면 -기호가 그려진 동그라미를 보셨을 겁니다. 네 음전하(전자)죠. 전기는 이 음전하가 이동함에 따라 일어나게 됩니다. 그러면 언제 음전하가 이동하는지 알아봐야겠죠. 일반적으로 한 원자에서 음전하의 개수는 양전하의 개수와 동일합니다. 또 동일할 때 가장 안정적인 상..

cs 2023.01.13

CODE ch.3 점자와 이진 부호

이번글은 할스 펫졸드 님의 책 CODE를 김현규 님이 번역한 책의 세 번째 챕터에 대해 제가 이해하고 느낀 점에 대한 겁니다. 챕터 2를 스킵한 이유는 총 8페이지로 책 챕터들 중 가장 짧은 분량이고 챕터 1과 거의 같은 내용이라서입니다. 물론 저자님은 다른 생각이 있으셔서 나누셨을 수도 있지만, 제 짧은 식견으론 별 차이가 없어 보였습니다. 챕터 3은 시각 장애인들을 위한 부호 점자를 만들어낸 한 사람의 얘기를 하며 시작합니다. 사실 독서록을 쓰기엔 챕터내용이 현재 점자의 시초, 현재 통상적으로 쓰이는 점자의 규칙이 전부라 쓸게 별로 없네요. 현재 통상적인 점자의 규칙에 대해 애기 좀 해보면 점자는 3x2 크기의 행렬 안에 점이 튀어나와 있거나 평평하거나(이 역시 binary 하네요)로 나눠집니다. 그..

cs 2023.01.12

CODE ch.1 친한친구와의 대화

이번글은 할스 펫졸드 님의 책 CODE를 김현규 님이 번역한 책의 첫 번째 챕터에 대해 제가 이해하고 느낀 점에 대한 겁니다. 제가 느낀 바론 챕터 1에서 말하고자 한건 컴퓨터가 0과 1로만 통신하는걸 80년대 미국에서 밤에 친구끼리 원거리로 통신하는 걸 예시로 들어 이야기한 겁니다. 아마 미국 문화에 관심이 많거나 영화를 많이 보신 분들이 라면 밤에 아이들은 아직 더 친구와 떠들고 싶지만 부모님이 얼른 가서 자라 하는 장면이 연상되실 겁니다. 이때 아이들은 손전등을 통해 통신하는 장면도 아마 떠오르실 겁니다. 손전등으로 밤에 통신하는 법은 많죠. 빛으로 직접 글자를 적는 것, 빛을 깜빡이는 것 등등 이중 빛을 깜빡이는 것이 가장 좋은 방법이었나 봅니다. 모스부호로 선택된 걸 보면 말이죠. 모스부호는 인..

cs 2023.01.11

그리디 알고리즘

그리디 알고리즘(greedy algorithm)을 직역하면 탐욕 알고리즘입니다 말그대로 현재 상황에서 가장 최적의 해라고 생각되는 것을 선택해 나가는 방식의 알고리즘 입니다. 따라서 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않습니다. 그리디 알고리즘은 사실 특정 알고리즘이라고 한정 짓기에는 범위가 상당히 방대하다 따라서 floyd warshall 또는 dijkstra와 같은 암기를 하거나 팀노트를 준비하는 식의 방법으로는 문제를 전부 풀 수는 없습니다. 범위가 방대한만큼 사전 지식 없이도 풀 수 있는 문제(예시로 많이드는 거스름돈 문제)도 있지만 여러 유형을 접해보고 문제를 풀어보며 훈련해야합니다. 그럼 같이 기초문제를 먼저 풀어보겠습니다. 1이 될 때까지 어떠한 수 n이 1이 될 때까지 다..

algorithm 2023.01.11

kafka의 기본 구성요소들 consumer

kafka는 다음과 같은 기본 구성요소들이 있습니다. 1. producer(publisher, source application) 2. consumer(subscriber, target application) 3. broker 4. topic 5. partition 이번글에선 consumer에 대해 알아보겠습니다. old/new consumer에는 old/new consumer가 있습니다. 두 consumer의 가장 큰 차이는 zookeeper의 유무 입니다. kafka를 공부해보신분들이라면 최근들어 kafka가 zookeeper를 사용하지 않는다는 걸 들어보셨을겁니다. 왜 사용안하는지 검색하러 가실분들을 위해 간단하게 설명드리면 ZooKeeper stores persistent cluster metad..

분산처리 2023.01.10

kafka의 기본 구성 요소들 producer

kafka는 다음과 같은 기본 구성요소들이 있습니다. 1. producer(publisher, source application) 2. consumer(subscriber, target application) 3. broker 4. topic 5. partition 이글에선 producer에 대해 알아보겠습니다. producer producer는 publisher또는 source application이라고도 합니다. producer가 하는 역할은 다음과 같습니다. 1. topic에 보낼 메세지 생성 2. topic으로 메세지 전송(publish) 3. 전송 성공여부 확인/재시도 producer가 topic으로 데이터를 보낼때는 1. 직렬화 2. 파티셔닝 3. 압축 4. 배치 5. 전달 순으로 진행 됩니다..

분산처리 2023.01.09

Kafka를 사용하는 이유

kafka의 탄생 kafka는 링크드인에서 근무하던 제이 크렙스(현 confluent ceo), 준 라오, 네하 나크헤데가 링크드인 서비스 내에서 발생하는 이슈들을 해결하기 위해 만들었습니다. 그럼 링크드인 내의 이슈들을 무엇이 있었을까요? 대표적으로 데이터 파이프라인의 확작성, 이기종 간의 호환성, 고성능 기반의 실시간 데이터처리에 대한 어려움이 있었습니다. 기존 링크드인은 데이터 파이프라인 처리를 위해 redis, rabbitMQ등 여러 애플리케이션을 사용했고 각각의 특징이 뚜렷하여 파편화가 심했습니다. 파편화는 같은 기능 애플리케이션을 만들어도 개발자가 각각에 호환되는 소프트웨어(redis, rabbitMQ가 이에 속하죠)를 만들게 했습니다. 이러한 파편화는 유지보수를 어렵게 했고 이는 비즈니스를 ..

분산처리 2023.01.09

Heap sort 힙정렬

힙 정렬은 기본적으로 힙 자료구조를 기반으로 한다. 간단히 힙 자료구조에 대해 알아보면 힙은 '최솟값 또는 최댓값을 빠르게 찾아내기 위해 완전이진트리 형태로 만들어진 자료구조'이다. 최솟값 or 최댓값을 빠르게 찾아내는 것이 힙의 핵심이다. 위 사진은 heap tree를 시각화한 것이다. 하지만 트리의 인덱싱을 아는 사람이라면 위 사진이 무엇인가 이상해 보일 거다. 바로 형제 노드 간의 정렬은 되어있지 않다는 점이다. 이를 weak heap, 반정렬 상태 등등이라 부른다. "아니 그러면 어떻게 정렬을 하나요?" 위에서 힙의 핵심은 최솟값 or 최대값을 빠르게 찾아내는 것이라 했다. 힙의 root node는 항상 우선순위가 1등이다. 즉 최소값 또는 최댓값이란 것이다. 이를 이용해 root node를 삭제..

algorithm 2023.01.07