오늘은 분산시스템속 어떤 브로드캐스트 알고리즘이 있는지 알아보고 어떤 것을 코드에 적용해볼까 선택할려고 한다.오늘 설정할 브로드캐스트 목표는 새로운 Peer가 등장할시 어떻게 새로운 Peer를 다른 Peer가 인식하도록 할까이다. 1. Flooding (플러딩)Flooding은 모든 Peer가 새로운 Peer에 대한 정보를 모든 이웃 피어에게 전송하는 방법이다.새로운 Peer A가 네트워크에 들어오면 -> Peer A는 자신의 정보를 인접 피어 B, C, D에게 전송 -> B, C, D는 연결된 피어에게 전송한다.장점 : 단순한 구현단점 : 네트워크 트래픽이 많아질 수 있다.인접한 피어는 또 어떻게 구할것인가? 문제가 있는 거 같다. 2. Gossip Protocl(가십 프로토콜)가십 프로토콜은 Peer..
주소 결정 프로토콜(Address Resolution Protocol, ARP)는 네트워크 상에서 IP주소를 물리적 네트워크(MAC Address)주소로 연결하기위해 사용되는 포로토콜이다. ARP는 L3(OSI Layer3) IP를 L2 MAC 주소로 바꿔주는 L3의 프로토콜이다. 반대의 경우 L2 MAC 주소를 L3 IP로 바꿔주는 RARP(Reverse Address Resolition Protocol)도 존재한다. Hardware Type : L2에서 사용하는 Protocol Type ex)이더넷 프로토콜 Protocol Type : ex) IPv4 Hard Add Len : MAC Address Length Proto Add Len : IP Address Length Operation Code :..
프로세스란? 쉽게 말하면 프로세스는 코드로 작성된 프로그램이 메모리에 올라가서 사용가능한 상태가 된 것 스레드란? 스레드란 프로세스내에서 실제로 작업을 수행하는 것 모든 프로세스에서는 한 개 이상의 스레드가 존재하고 작업을 수행한다 두 개 이상의 스레드를 가지는 프로세스 -> 멀티스레드 프로세스 그렇다면 과연 멀티 프로세스와 멀티 스레드의 차이는 뭘까 사진을 보면서 이해해보자 멀티 프로세스란? - 여러개의 프로세스가 서로 협려해서 일을 처리한다 - 여러개의 프로세스가 작업을 병렬적으로 처리한다 - 각 프로세스간 메모리 구분 또는 독립된 주소 공간을 가져야 할 때 사용한다 장점 - 독립된 구조이기 때문에 안정성이 높다 (다른 프로세스랑 충돌이 발생하기 어렵다) - 하나의 프로세스가 죽는다고 해도 문제가 되..
데이터베이스의 탐색 성능을 좌우하는 인덱스. 인덱스를 사용하는 이유? 대부분의 속도 저하는 바로 Select문 특히 조건 검색 Where절에서 발생하는데 가장 먼저 생각해 볼 수 있는 대안으로 Index가 존재 그렇다면 왜 B-Tree자료구조를 사용할까? 먼저 자료구조에서 트리란 무엇인가에 대하여 알아보자. Tree는 평균적으로 시간 복잡도 O(logN)을 가진다. 하지만 최악의 경우 한 쪽으로 쏠려버린 트리다 최악의 탐색 시간 O(N)을 가지게 되어버린다. 이걸 방지하기 위해 밸런스 트리(Balanced Tree)를 이용하기도 한다. 밸런스 트리(Balanced Tree)란? 트리의 노드가 한 방향으로 쏠리지 않도록, 노드 삽입 및 삭제 시 특정 규칙에 맞게 재정렬되어 왼쪽과 오른쪽 자식 양쪽 수의 밸..
들어가기에 앞서 웹을 공부하면서 또는 프레임워크를 쓰면서 Log란 것을 듣기도하고 보기도하며 쓰기도 해보았다 하지만 정작 그렇게 중요하다는 생각까지는 하지 않았다 그냥 오류가 뜨면 Log를 뜨게하고 대충은 안다고 생각했기 때문이다 그래서 오늘은 분산 서비스를 구축하고자 하는 목적을 이루고자 로그란 무엇인에 대하여 짚고 넘어갈려고 한다 (본 글은 https://brunch.co.kr/@sangjinkang/22을 보고 정리한 내용입니다) 로그란 무엇인가? 쉽게 정리하자면 로그란 IT인프라에서 발생하는 모든 상황의 데이터이다 그렇다면 로그는 어떻게 생겼을까 로그는 정해진 규칙에 따라 Key-Value 형태 혹은 정해진 Key 순서에 맞게 Value값으로 보통 표현된다 ex) 로그의 찍힌 값의 순서 타임스탬..
들어가기에 앞서 protobuf에 대해 공부하면서 기존 백에서 작성하던Rest API(Get, Post) 대신 proto Request Proto Response를 쓰는 것을 보았다 근데 정작 나는 Rest란 무엇인가에 대해서도 잘 알지 못하는 거 같아 Rest에 대해 정리하기로 했다 해당 글은 밑에 블로그를 보고 작성한 글입니다 https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html REST란 “Representational State Transfer” 의 약자 - 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다. - 자원: 해당 소프트웨어가 관리하는 모든 것( 문서, 그림, 데이터) 상태(정보) 전..
오늘은 gRPC에 대해 공부하던중 Protobuf(프로토컬 버퍼)란 말이 많이 등장하는데 얕게나마 이해를 하고 넘어가고 싶어서 정리하게 되었습니다 Protobuf란 Protocol Buffers는 Google에서 개발한 데이터 직렬화 방식 줄여서 protobuf, 더 줄여서 pb라고도 불립니다 protobuf -> pb는 다른 IDL(XML, JSON...)에 비해 더 작은 용량(이진 형식)으로 데이터를 저장할 수 있기 때문에 네트워크 연결을 통해 더 빠르게 전송할 수 있습니다 인터페이스 정의 언어 (Interface Description Language 또는 Interface Definition Language, IDL) 는 소프트웨어 컴포넌트의 인터페이스 를 묘사하기 위한 명세 언어 이다. IDL은 ..
진행하던 토이 프로젝트에 Spring Security + JWT를 이용해서 로그인을 구현했었는데 이번에는 단순 구현뿐 아니라 JWT에 대하여 좀더 공부해보고 하는 생각으로 글을 씁니다. 먼저 가장 중요한 JWT의 정의에 대하여 알아보아야 겠죠? JWT란 JWT(Json Web Token)의 약자로 Json 기반의 Web Token입니다. 발급된 토큰값을 Json 객체로 변환 그 후 Clien에게 전송해주는 것을 말하는데요 음 그런데 Jwt가 무엇인지는 대충 알겠는데 왜 JWT를 쓰는 걸까요? 그 전에 Token을 발급해주는 이유는 무엇일까요? 그냥 DB에 ID/PW만 저장하고 Login할 때마다 확인해주면 안될까? 그러면 DB가 해킹당하면.. 큰 문제가 발생하고 또 로그인을 유지하려면 사용자가 API를 ..