BEB 07 8-5

Donghun Seol·2022년 11월 4일
0

코드스테이츠 BEB 07

목록 보기
32/39

coplit

Callback을 인수로 받는 정렬

  1. 정렬함수의 매개변수로 callback을 선언한다.
  2. 해당 콜백함수가 인자로 들어오지 않을때도 정상 작동해야하므로 default 값을 지정해줘야 한다.
  3. default는 해당 값을 그대로 반환해주는 함수로 한다.
  4. 재귀적으로 호출할때도 callback을 그대로 넣어줘야함을 잊지 말기
const sort(arr, callback = (elem) => elem) {
  /* some logics */
}

분산원장 1

알아야 할 내용

분산DB, 분산원장, 세그윗, 머클트리

분산 데이터베이스와 분산 원장에 대해 이해할 수 있다.

  • 분산 데이터베이스의 특징과 장단점을 이해할 수 있다.
  • 분산 데이터베이스의 대표적 기술인 클러스터링, 레플리케이션, 샤딩을 이해할 수 있다.
  • 분산 데이터베이스와 블록체인의 차이점을 이해할 수 있다.
  • 분산 원장 기술에 대해 이해할 수 있다.

세그윗의 동작 방식을 이해할 수 있다.

  • 세그윗이 등장한 배경을 이해할 수 있다.
  • 세그윗이 어떤 문제를 해결했는지 이해할 수 있다.

머클트리의 동작 방식을 이해할 수 있다.

  • 블록체인에서 머클트리가 어떻게 동작하는지 이해할 수 있다.

분산DB와 분산원장

분산 데이터베이스

분산 DB의 특징, 투명성(Transparency)

블록체인과 유사하지만 엄밀히는 다르다.

  • 물리적으로 분산된 노드들을 마치 하나의 시스템인 것 처럼 사용할 수 있게 해주는 시스템

투명성(Transparency) 제공

투명성의 종류는 다음과 같다.

  • 병행 : 다수의 트랜잭션의 결과가 일관됨
  • 장애 : 장애 발생의 원자성
  • 지역사상 : 지역과 관계없이 접근 가능
  • 위치 : 스토리지상의 물리적 저장위치가 아닌 논리적 입장에서 데이터에 접근 가능
  • 중복 : 물리적으로 중복 저장된 데이터도 처리 가능
  • 분할 : 물리적으로 분할저장된 데이터를 하나의 논리적 단위로 사용 가능

분산 데이터베이스의 대표적 기술

클러스터링, 레플리케이션, 샤딩

클러스터링

  • DB 스토리지 앞단의 서버를 다중화 하는 기술
  • 성능 및 가용성 증가
  • 스토리지단의 병목발생 가능, 서버 운용에 추가적인 비용

레플리케이션

  • 서버와 스토리지를 다중화 하는 방식
  • Master/Slave를 구분하여 master는 write, slave는 read만 처리하는 것으로 운용가능
  • 읽기/쓰기 성능이 향상됨.
  • master 노드는 단일 장애점, 노드간 동기화 문제 발생

샤딩

  • 검색성능을 향상시키기 위해 테이블을 분할하는 기술
  • 서버의 수평적 확장이 가능, 쿼리 지연시간의 단축
  • 부적절한 분할은 성능을 저하시킴, unsharding은 어렵다.

샤딩의 종류

  1. 해시 샤딩 : 단순 해싱을 통한 재배치, 단순하지만 확장성이 떨어지며 효율성이 보장되지 않음.
  2. 다이나믹 샤딩 : Locator 서비를 활용해서 샤딩, Locator 유지의 오버헤드, 단일 장애점
  3. 엔티티 그룹 샤딩 : 트랜잭션과 DB의 특성을 고려하여 연관성이 높은 데이터끼리 그룹핑해 샤딩

분산 데이터베이스의 장단점

투명한 분산구조, 투명한 트랜잭션

분산 데이터베이스의 특징(요구사항)

  • 투명한 분산 : 사용자 입장에서 마치 분산되어 있지 않은 것처럼 시스템이 동작해야 함. 따라서 구현이 복잡하다.
  • 투명한 트랜잭션 : 트랜잭션이 하나의 노드에만 진행되는 것 처럼 그 결과가 모든 노드들에 대해 동일하게 적용되어야 한다. 당연히 알고리즘이 복잡해진다.

장점

  • 조직 구조 반영 가능
  • 중요한 데이터의 DR 가능, 단일 장애지점의 제거
  • 설계에 따라 성능 향상됨
  • 모듈화

단점

  • 하드웨어와 DBMS의 설계가 복잡하여 구현 및 관리비용 비쌈
  • 분산 DB간 네트워크 보안도 고려해야 함.
  • 불완전하고 미성숙해 아직 표준이 없으며 실 사용 사례가 적다.
  • 동시성 제어가 매우 중요하다.

분산 데이터베이스와 (퍼블릭)블록체인의 차이점

악의적 사용자, 거버넌스의 주체, 단일 노드의 영향력

악의적인 사용자

  • 악의적인 사용자란 네트워크의 장애를 유발하기 위해 유효하지 않거나 조작된 트랜잭션을 실행하는 사용자를 말한다.
  • 분산DB는 성능향상을 위해 악의적인 사용자의 참여를 전제하지 않는다.
  • 블록체인의 경우 누구나 네트워크에 참여가능하므로 악의적인 사용자를 가정한다. 대신 악의적 행위에도 네트워크가 정상 작동할 수 있는 합의 알고리즘을 채택하여 이를 방지한다.

네트워크 운영의 단일 주체

  • 분산DB는 정부, 기업, 컨소시엄등 특정 단체의 정책이나 규칙에 종속적이다. 분산DB 운영의 의사결정은 분산되어있지 않다.
  • 블록체인은 특정 노드가 네트워크에서 이탈해도 네트워크는 다른 노드에 의해 정상적으로 작동해야 한다.

요약 : 블록체인은 특수한 조건을 만족하는 분산DB(또는 원장)의 일종이다.


분산원장 기술

중앙집중형 원장, TTP, 분산원장, 합의 알고리즘

Centralized Ledger

  • 일반적인 저장방식, 중앙 서버에 모든 기록을 보관한다.
  • 신뢰할 수 있는 제 3의 기관(TTP)이 거래내역을 관리, 사용자는 TTP를 신뢰
  • TTP에 무한종속적, TTP 유지에 대한 비용으로 사용자는 수수료 지불

Distributed Ledger(Shared Ledger)

  • 거래 정보를 P2P 네트워크의 모든 참여자가 공동으로 기록, 저장, 갱신함
  • 모든 참여자는 원장을 갱신할 수 있는 권한과 책임 있음

DLT 장점

  • 효율성 : TPP 유지에 따른 오버헤드 없음
  • 보안성 : 중앙 서버가 없어 해킹으로부터 안전
  • 안정성 : 단일 실패점 없음
  • 투명성 : 모든 거래기록이 보존됨

DLT 단점

  • 악의적인 참여자의 행위를 방지할 수 있는 알고리즘이 필요
  • 비트코인 등장 이전까지 합의 알고리즘의 부재로 실제 구현될 수 없었음.

세그윗

세그윗이란?

세그윗, 비트코인 개선방안, 블록생성주기, 하드포크

등장배경

  • 비트코인의 블록생성주기는 10분
  • 거래를 완료하기 위해서는 6개의 블록이 생성되어야 됨. 따라서 60분이 지나야 거래가 완료됨
  • 비트코인의 블록용량은 1MB에 불과해 블록당 삽입되는 트랜잭션의 양이 제한적
  • 따라서 비트코인의 속도와 확장성을 증가시키기 위한 시도가 있었음

속도와 확장성 개선 방안들

  1. 블록의 크기 또는 가용용량 늘리기
  2. 블록체인 기술 도입 (샤딩 등)
  3. 블록체인 외부와 연계 (레이어2 솔루션)
  4. 합의알고리즘 재설계
  • 세그윗은 1번을 시도한 것

세그윗

  • 블록용량의 75%를 차지하는 서명데이터를 분리하여 블록의 가용용량을 늘리는 것.
  • 확보된 가용용량에 더 많은 트랜잭션을 담을 수 있음
  • 블록내부에 머클루트 형태로 저장된 서명을 별도의 저장공간에 보관하게 됨
  • 2017년 8월 소프트포크 형식으로 세그윗 진행
  • 세그윗에 반대하는 세력이 블록크기를 8MB로 늘리면서 하드포크한 코인이 비트코인 캐시

세그윗의 특징

확장성, 거래 가변성 문제, 버전 호환, 소프트 포크

거래속도와 확장성

  • VISA 24,000 TPS vs Bitcoin 7 TPS
  • 실생활에 사용하기 어려울 정도로 느린 비트코인 네트워크의 속도를 향상시키기 위해 도입

거래 가변성 문제

  • TXID만 변경해서 새로운 거래를 만들어 낼 수 있는 일종의 버그
  • 세그윗 이후 서명이 트랜잭션 데이터의 일부가 아니므로 서명조작이 불가능해짐.

하위 호환성 보장

  • 소프트웨어의 업그레이드 하지 않아도 세그윗 이전과 이후 버전을 모든 노드에서 활용가능
  • 소프트포크

결론

  • 디지털 서명 데이터 분리를 통해 블록의 실질크기 4MB
  • 블록에 저장되는 트랜잭션이 많아지므로 TPS 증가
  • 서명과 트랜잭션을 분리함으로써 트랜잭션 가변성 문제 해결함.

머클트리

머클트리와 무결성 보장

머클트리, 머클루트, 무결성, 충돌저항성

정의

  • 개별 데이터를 의미하는 리프 노드로부터 트리를 거슬러 올라가면서 단계적으로 해시함수를 적용해서 머클루트인 단 하나의 해시값을 만들어내는 자료구조
  • 쉽게 말해 리듀스가 적용된 해싱
  • 이진트리만 가능한가?

작동방식

  • 해시함수의 충돌저항성이란 다른 입력값에 대해 동일한 출력값을 가지지 않음을 의미
  • 아래처럼 계층적 해싱하면 해시함수의 충돌저항성으로 인해 d1~d4 중 조금만 변화해도 결과가 크게 달라진다.
  • 이러한 성질로 머클루트의 값을 비교함으로써 데이터 무결성을 확인할 수 있다.
const merkleRoot= hash(
						hash(hash(d1), hash(d2)),
  						hash(hash(d3), hash(d4)),
				  )
  • 그림으로 표현한 모습

블록체인에서 머클트리를 사용하는 방법

  • 아래 수식을 이해하면 됨.
블록 = 블록해시 + 블록헤더 + 트랜잭션들
블록해시 = sha256(블록헤더)
블록해더 = 이전블록해시 + 버전 + 난이도 + 타임스탬프 + 논스 + 머클루트
머클루트 = sha256(sha256(sha256(tx1), sha256(tx2)) + sha256(sha256(tx3) + sha256(tx4)))
  • 참고로 새로운 블록은 다음과 같이 생성됨
  • 이런 식으로 특정 블록에 들어있는 트랜잭션을 단 하나라도 변경하는 경우, 블록은 체인처럼 모두 연결되어 있기 때문에 해당 블록 이후에 연결된 블록을 모두 수정해야 합니다.
  • 하지만 트랜잭션이 들어간 블록 이후 6개 정도의 블록이 추가로 생성되어야 해당 블록의 트랜잭션이 finalize 된다. 그래서 거래가 완료(최종승인)되기까지 60분이 걸린다.
  • 블록의 논스값을 찾는 데 10분정도 걸리기 때문에, 트랜잭션을 하나 수정하기 위해서는 연결된 모든 블록의 논스값을 다시 찾는 것은 매우 비용이 많이 들 것입니다. 따라서 블록체인에 올라간 데이터를 수정하는데 많은 비용이 들기 때문에, 위변조를 하기 매우 어렵습니다.

머클 패트리샤 트리

  • 이더리움에서 사용함.
  • 나중에 공부~
profile
I'm going from failure to failure without losing enthusiasm

0개의 댓글