블록체인

[블록체인 기술 1] 분산원장 내용 정리 1

dlwltn98 2023. 5. 2. 11:48

분산 데이터베이스 (Distributed Database)

- 분산된 저장소(노드)들이 네트워크를 통해 연결되어 작동하는 하나의 데이터베이스 관리 시스템(DBMS)

- 물리적으로는 여러 위치에 분산 저장하고 흩어져 있지만 논리적으로는 하나인 것 처럼 활용

   ** 물리적으로 떨어져 있는 저장소(노드)들은 네트워크를 통해 연결됨

   ** 노드들은 투명성 확보가 가장 중요함

 

 

분산 데이터베이스에서 목표로 하는 투명성의 특징

 

종류 내용 특징
병행 다수의 트랜잭션 실행 시 결과가 일관성 유지 자원처리 양 및 속도 개선
장애 장애 발생이 All or Nothing 유지 (원자성 유지) 데이터 일관성
지역사상 개별 지역의 물리적 이름과 관계없이 접근 가능 확장성 확보
위치 데이터를 물리적 저장 위치가 아닌 논리적 입장에서 접근 생산성, 활용성 강화
중복 데이터를 지역별로 중복으로 저장하여도 처리 가능 병목현상 제거
분할 물리적 구조가 여러 단편으로 분할 저장되어 논리적 사용 성능 향상

 

 

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

 

장점 단점
- 시스템의 가용성 확보
- 지역 업무에 특화된 서비스 제공
- 시스템 확장 및 적응성
- 장애에 대한 신뢰성 증진
- 지역별 자원 활용 및 확장성 용이
- 트랜잭션에 대한 처리 알고리즘이 복잡함
- 관리가 복잡하여 비용 증대
- 통신망 장애 시 부가적 피해 가능성
- 잠재적 오류 내재 가능성
- 설계 및 구현의 어려움

 

 

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

  ** 데이터베이스를 물리적으로 여러개로 만들고 관리하기 위한 기술 

  ** 일반적인 데이터베이스 

      → 서버(데이터 요청을 처리), 스토리지(실제 데이터를 저장)가 각 1개씩 있음

 

클러스터링 (Clustering)

 - DB 서버를 여러개 두어 서버 한 대가 죽었을 때 대비할 수 있는 기법

장점 단점
- 성능 유리 - 병목 현상
- 비용 증가

1. Active - Active

출처 : 코드스테이츠 BEB - Active - Active

  - 클러스터를 항상 가동하여 가용할 수 있는 상태로 두는 구성 방식

  - 2개의 DB 서버를 모두 활성화 시킴

 

2. Active - Standby

출처 : 코드스테이츠 BEB - Active - Standby

  - 일부 클러스터는 가동하고, 일부 클러스터는 대기 상태로 구성하는 방식 

  ** 하나의 Active 서버만을 사용하다가 DB 서버에 문제가 생기면 failover를 통해 Stand by 서버가 Active가 되고, 기존 Active는 Stand by 상태로 전환함으로서 장애에 대응함

  - Active - Active의 단점을 보완한 것 

 

** failover 

  - 데이터베이스의 클러스터의 일부 노드에 장애가 발생해서 해당 노드가 서비스를 제공할 수 없는 상태가 되었을 때, 다른 노드가 그 역할을 대신 수행하여 서비스의 지속성을 보장하는 과정 

  - 단일 노드 시스템보다 더 높은 가용성과 신뢰성 제공 가능 

 

레플리케이션 (Replication)

 - 데이터베이스 스토리지를 여러개로 하는 방식

 - 단순 백업 방식과 부하 분산 방식이 있음

장점 단점
- DB Read(SELECT) 성능을 높일 수 있음
- 지연시간 거의 없음
- 각 노드 간의 데이터 동기화 보장 어려움
- Master 노드가 다운되면 복구 및 대처가 어려움 

출처 : 코드스테이츠 BEB - 단순 백업 방식 / 부하 분산 방식

- 최소 구성 : Master/Slave 구성

 

 1. Master

    - 웹 서버로부터 등록/ 수정/삭제 (CUD)의 요청을 담당

    - 요청 처리 후 즉시, Slave DB 서버에 변결된 데이터를 전달

 2. Slave  

    - Master로 부터 받은 데이터를 반영

    - 주로 읽기(R)에 대한 요청을 담당 (부하 분산 방식)

     ** 많은 서비스에서 읽기(R) 요청의 비율이 60%~70% 정도를 차지한다고 함 

 

샤딩 (Sharding) (참고하면 좋음)

 - 테이블을 나누어 데이터를 저장하는 방식

장점 단점
- 서버의 수평 확장 가능
- 질의 반응 속도 빨라짐
- 한번 분리한 뒤에는 합치기 어려움
- 데이터를 적절히 분리하지 못하면 오히려 비효율적일 수 있음

 

1. Hash Sharding

출처 : 코드스테이츠 BEB - 해시샤딩

  - 해시 함수를 사용해 샤드 키를 나누는 방식

  - 샤드의 수만큼 해싱하면 되기때문에 구현이 간단함

  - 샤드가 늘어나면 해시 함수가 달라져야해서 확장성이 떨어짐

  - 각 샤드별 공간에 대한 효율을 고려하지 않음

 

2. Dynamic Sharding

출처 : 코드스테이츠 BEB - 다이나믹 샤딩

  - Locator Service를 통해 샤드키를 구성하는 방식

  - 샤드가 하나 더 추가되어도 Locator Service에 샤드키만 추가하면되기 때문에 확장성 유연함

  - Locator Service에 종속

      → 데이터 재배치 시 Locator Service 역시 동기화 요구됨

      → Locator Service 에 문제가 생기면 DB에도 문제가 전이됨

 

3. Entity Groups Sharding

출처 : 코드스테이츠 BEB - 엔티티 그룹 샤딩

  - 관계가 되어 있는 엔티티를 같은 샤드내에 구성하는 방식

  - 단일 샤드 내 쿼리가 효율적이고 강한 응집도를 보임

  - 다른 샤드의 엔티티가 연관 되는 쿼리를의 경우 효율이 떨어짐 

 

 

분산 데이터베이스 VS 블록체인 (퍼블릭)

 

퍼블릭 블록체인

 - 악의적인 사용자를 전제하고 만들어진 시스템 (합의 알고리즘)

  ** 합의 과정을 통해 악의적인 사용자의 공격을 방지함 

 - 운영 주체가 사라져도 시스템 유지 가능 (거버넌스)

  ** 합의 알고리즘에 따라 특정 조건을 만족시키는 노드가 블록을 생성하지만, 탈중앙화가 되어 있기 때문에 해당 노드가 네트워크를 떠나도 다른 노드들에 의해 운영이 지속됨 

 

분산 데이터베이스 

 - 재해 복구, 백업, 성능상의 이점을 고려하여 만들어졌기 때문에 특별히 악의적인 사용자를 전제하지 않음

  ** 일반적인 데이터베이스와 비슷하게 중앙 관리자가 각 데이터베이스를 관리함

  ** 특정 기업이나 단체에 종속되기 때문에 중앙화된 운영주체의 정책, 규칙에 따라 언제든지 서비스가 중단될 수 있음

 

 

⇒ 블록체인은 합의 알고리즘 + 탈중앙화 가버넌스 특징이 포함된 분산 데이터베이스의 한 형태

 

 

분산원장 (DLT, Distributed Ledger Technology)

 - 분산 데이터베이스의 한 종류 

 - 거래 정보를 기록한 원장을 특정 기관의 중앙 서버가 아닌 P2P 네트워크에 분산하여 참가자가 공동으로 저장하고 기록하는 기술 

 

분산원장의 장단점

 

장점 단점
- 효율성
- 보안성
- 시스템 안정성
- 투명성
- 신뢰 형성에 필요한 메커니즘 설계의 필요성
- 악의적인 참가자에 대한 방지 기술 필요

 

 

중앙집중형 원장 VS 분산원장 

 

중앙집중형 원장

 - 신뢰할 수 있는 제 3의 기관을 중심으로 원장을 기록하는 방식

 - 안정성과 일관성, 보안을 제공

 - 하나의 중앙 서버가 모든 데이터를 처리하기 때문에 확장성 제한됨

 

분산원장

 - P2P 네트워크에 분산하여 참가자가 공동으로 저장하고 기록하는 기술 

 - 높은 확장성과 보안성 제공

 - 일관성 유지가 어렵고 구현이 복잡함 

 

⇒ 모든 블록체인은 분산원장 또는 분산 데이터 베이스라고 할 수 있지만, 반대 명제는 성립하지 않음 

 

 

 

세그윗 (SwgWit, Segregated Witness)

 - 속도와 확장성 개선을 위한 기술로, 블록 용량 증대를 통한 개선 방법의 하나

 - 디지털 서명 데이터를 별도의 공간에 저장하고, 대신 블록에 더 많은 트랜잭션을 담는 방식

    ⇒ 고정된 블록의 가용 공간을 늘려서 속도를 개선하는 것 

 

** 속도 : 합의에 도달하여 거래기록이 장부에 기록되는 데 걸리는 시간

** 확장성 : 갑자기 많은 트래픽이 발생했을 경우 중단이나 지연 없이 서비스 연속성이 보장되는 성질

 

 

블록체인의 속도와 확장성을 개선하기 위한 방법은 크게 4가지로 구분됨

1. 블록의 용량 증대 (가용 용량 늘리기) → 세그윗

2. 블록체인 기술 도입 (샤딩 등)

3. 블록체인 외부와 연계 (레이어 2 솔루션)

4. 합의 알고리즘 재설계

 

 

기존 비트코인의 블록 구조

데이터 종류  비율
디지털 서명 데이터 75%
그 외 데이터  25%

- 서명란에 실제 서명 데이터가 차지하는 크기는 크지 않지만 서명란 자체가 차지하는 부피가 큼

- 세그윗은 서명 부분을 따로 Witness라는 데이터 영역으로 분리해 더 많은 거래를 처리할 수 있도록 업데이트함 

  ** 단순히 블록의 크기를 늘리는 방법 → 블록의 크기가 커지면 더 많은 해시 파워를 요구함, 소수의 해시파워를 가진 채굴 노드들로 인해 탈중앙화에서 점차 멀어질 수 있음 

 

 

디지털 서명 데이터가 저장되는 위치

 - 각 트랜잭션에 있는 디지털 서명 데이터는 머클루트 형태로 저장됨 witness merkle root

 - witness merkle root는 블록의 코인 베이스 트랜잭션 안에 들어감

  ** 코인 베이스 트랜잭션 : 블록을 생성한 채굴자에게 보상을 주기위해 비트코인에서 코인을 생성해 제공하는 트랜잭션

    ** 보통 블록의 가장 첫 번째 트랜잭션으로 들어감 

 

 

비트코인은 2017년 8월 1일 업그레이드 진행

 → 세그윗을 처음으로 활성화한 암호화폐 : 그로스톨코인(Groestlcoin) 

 → 세그윗에 반대한 채굴 세력가들 : 세그윗을 진행 할 경우 기존에 사용하던 방식의 비트코인 채굴이 불가능 해지게 됨

     그래서 기존 비트코인을 하드포크 시켜 블록 용량을 늘린 비트코인 캐시(BCH, Bitcoin Cash)라는 새로운 암호화폐를 생성함 

 

 

 

출처 :

코드스테이츠 BEB 

https://medium.com/nerd-for-tech/all-about-database-sharding-scaling-up-the-database-3b6172491cd