[TIL] 기술면접 대비 정리 - 블록체인

은경·2022년 1월 25일
0
post-thumbnail

할게 너무 많아.... 흑흑....🥲

1. Bcrypt


bcrypt는 블로피시 암호에 기반을 둔 암호화 해시 함수
레인보우 테이블 공격 방지를 위해 salt를 통합한 적응형 함수

  • 파이썬에서는 라이브러리 형태로 지원한다.
  • 단방향 해쉬 함수는 평문→암호화는 가능하지만 암호화→평문으로 복호화는 어렵다
  • db에 암호화되어 저장된 비밀번호를 복호화하는 것도 불가능하기 때문에 내부자가 회원의 비밀번호를 알아내는 것도 불가능하며, 회원이 입력한 비밀번호와 일치하는지만 확인한다
  • 암호화 함수는 오직 bytes로 입력 받기 때문에 입력 값이 유니코드라면 utf-8 인코딩 과정을 거쳐야한다

단방향 해쉬함수의 취약점 보완을 위해 아래 2가지가 자주쓰인다.

salting : 실제 비밀번호에 랜덤 값을 더해서 해시값을 계산하는 방법
key stretching : 해쉬 값을 여러번 반복해서 해쉬하는 행위


<사용 예시>
pw = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())

a = 'abc1234'
bcrypt.checkpw(a.encode('utf-8'), pw)

2. 블록체인


데이터 분산 처리기술 블록들을 체인 형태로 묶은 형태이기 때문에 블록체인 이라고 한다.
네트워크에 참여하는 모든 사용자가 모든 거래 내역 등의 데이터를 분산, 저장하는 기술.

블록 : 개인과 개인의 거래(P2P)의 데이터가 기록되는 장부
체인 : 블록들이 시간의 흐름에 따라 순차적으로 연결된 사슬의 구조를 가짐

모든 사용자가 거래내역을 보유하고 있음 -> 거래내역 확인 시 모든 사용자가 보유한 장부를 대조하고 확인해야함.

  • 기존 거래 방식으로 은행은 중앙서버를 공격하면 해킹 할 수 있지만,
    블록체인은 여러 명이 데이터를 저장하기 때문에 위 변조가 어렵다
    -> 참여자의 거래 데이터를 모두 공격 해야하기 때문

  • 중앙관리자가 존재하지 않는다.

중앙은행이 없더라도 화폐 발행이 가능해지고 이렇게 가상화폐 개념이 탄생

출처 : 뱅크샐러드_블록체인 개념 완벽 정리

3. 샤딩(Sharding)


  • 하나의 DB에 데이터가 늘어나면 용량이 언젠가 부족해짐
  • CRUD가 느려지고 서비스 성능에 영향을 줌
    DB 트래픽 분산을 위해 샤딩을 할 수 있다.

샤딩이란?
관계형 데이터베이스에서 대량의 데이터 처리를 위해 데이터를 파티셔닝(분할) 하는 기술.

대표적인 데이터 베이스 분할 방법

  1. vertical partitionin : 테이블 별로 서버 분할,

    장점 - 간단한 구현, 시스템 크게 변화없음
    단점 - 각 서버의 데이터가 커질수록 추가 샤딩 필요

ex. 유저프로필서버 / 친구리스트서버 / 컨텐츠용서버 등 
  1. range based partitioning : 하나의 feature가 거대해질 때 서버 분리

    주의할 점 - 데이터 분할 방법이 예측 가능해야 함

ex. 년도별로분리 / 유저별로분리 등  
  1. key or hash based partitioning : 엔티티를 해쉬함수에 넣어서 나오는 값으로 서버를 정함

    주의할점 - 해쉬함수를 잘 짜서 데이터가 균등하게 분포해야함
    단점 - 서버의 수를 늘리기 위해 해쉬함수를 변경 하는 작업이 비싸다

샤딩된 DB의 물리적인 용량한계나 성능한계에 다다르면 shard의 수를 늘리는 scale-up 작업이 필요, 서비스 정지없이 scale-up 할 수 있도록 설계방향을 잘 잡아야 함

출처 : https://genesis8.tistory.com/211

블록체인에서는 트랜잭션 속도를 향상시킬 수 있기 때문에 샤딩을 한다.

만약 10만큼의 데이터와 10명의 노드가 참여했다고 가정한다면 기존의 블록체인은 10명의 노드 개개인은 10만큼을 모두 가지고 있으면서 공유하지만, 샤딩은 10을 조각내서 10명의 노드 개개인은 1만큼씩만 보관함으로써 보관 데이터가 가벼워져 거래처리 속도가 크게 향상된다.[3] 해시넷 위키

4. JSON-RPC


서버 쪽에 함수를 만들어 두고 클라이언트에서 함수를 호출하듯이 데이터를 요청하면 응답하는 서버.
클라이언트가 웹 서버에 웹 문서를 요청하는 것이 아니라 데이터만 요청하고 싶다면 JSON-RPC서버를 이용하는 것이 훨씬 쉽고 간단하다

  • 주로 웹 문서가 아닌 데이터만 주고받을 때 JSON-RPC 서버를 사용.
  • 제이슨 형식으로 데이터를 주고받음
  • 서버 유지 관리가 쉬움
  • 서버에 등록된 함수 = 핸들러 라고함 (더하기 함수를 만들어 등록하면 클라이언트가 더하기 기능을 호출하여 계산결과를 받아볼 수 있음)

출처 : https://acstory.tistory.com/54

RPC란 ? Remote Procedure Call (원격 프로시져 호출)

  • 분산컴퓨팅 환경에서 많이 사용됨
  • 프로세스 간 통신 (Inter-Process Communication) 의 한 형태
  • 클라이언트-서버 관계로 요청-응답 시스템
  • 클라이언트에서 서버로 필요한 파라미터를 보내어 프로시저를 동작시킨다.

RPC 가 사용되는 이유

  • 로컬/리모트 환경에 관계없이 똑같이 코딩 할 수 있음
  • 환경에 구애받지 않고 동일 코딩으로 동일 프로시저 동작 시킬 수 있음
  • HTTP 는 어플리케이션 레이어 (7계층) 에서 동작하는 것과 다르게, RPC 는 TCP (4계층) 위에서 동작한다.
    • 따라서 더 다양한 프로토콜 사용 가능하다
    • CRUD 외에 다양한 동작 표현

출처 : https://itdar.tistory.com/395

profile
Back-end 개발자

0개의 댓글