블록체인 면접 대비 정리 🔥

김기대·2022년 2월 13일
3
post-thumbnail

기술면접 예상 질문지

책과 구글링, 백서 등을 읽으며 작성중.. 많이 미흡함

블록체인 트릴레마(Blockchain Trilemma)란 ?

  • 트릴레마부터 정의하면 3가지 문제들이 서로 해결할 수 없는 상황을 만드는, 3중고 또는 세 가지 딜레마를 뜻합니다. 3가지의 문제가 각각 서로 영향을 주어, 3가지 중 어느 것을 선택하면 다른 부분이 악화된다는 의미.
  • 블록체인에서 트릴레마란 확장성(Scalability), 탈중앙화(Decentralization), 보안성(Security)의 세 가지 문제는 한번에 해결할 수 없음을 뜻함.

확장성(Scalability) : 사용자 수가 늘어나더라도, 유연하게 대응할 수 있는 정도를 나타냅니다. 확장성이 높으면 사용자수의 증가에 따라 거래건수가 늘어나더라도, 무리없이 전송 처리용량을 증가시킬 수 있습니다. TPS(Transaction Per Second)가 높다고도 표현합니다.

  • 예) 비트코인과 이더리움이 직면한 기술적 한계의 대표적인 예가 네트워크가 확장됨에 따라 초당 거래 처리 속도(TPS : Transaction Per Second)가 느려지는 확장성 문제.

탈중앙화(Decentralization) : 중앙집권화를 벗어나 분산된 소규모 단위가 모여, 자율적으로 운영되는 방식을 말합니다. 블록체인은 기존의 서버-클라이언트 관계가 아니라, 개별 노드들의 자발적이고 자율적인 연결에 의해 P2P(Peer-to-Peer) 방식으로 동작합니다.

  • 예) 최적의 탈중앙화를 달성하면, 네트워크 처리량이 감소하는 경향이 있습니다. 더 많은 채굴 노드의 합의를 통해 네트워크를 보호하면, 트랜잭션 속도(TPS)가 떨어집니다.

보안(Security) : 블록체인 내의 데이터나 프로그램을 권한이 없는 이용자가 사용할 수 없도록 하는 제한, 외부의 공격으로부터 프로그램을 보호합니다.

확장성은 더 많은 거래량을 수용할 수 있는 블록체인의 능력입니다.
보안은 블록체인에 저장된 데이터를 다른 공격으로부터 보호하거나 이중 지출에 대한 블록체인의 방어 기능입니다.
탈중앙화는 더 적은 수의 엔티티가 네트워크를 제어하지 않도록 하는 네트워크의 중복성입니다.

비트코인에서 트랜잭션 검증은 어떻게 이루어 지나요? input 값 내부의 previous output 의 신뢰 여부는?

  • 비트코인에서는 UTXO 를 사용하는데,
  • 트랜잭션 Input 검증 방법
    : 트랜잭션 Input은 prevout과 scriptSig로 구성되는데, prevout이 가리키는 트랜잭션 Output에는 scriptPubKey가 있습니다. scriptSig와 scriptPubKey 두 개 스크립트 쌍이 맞아야 함. 개념적으로는 scriptPubKey는 공개키이고 scriptSig는 비밀키 서명.
    실제로는 명령어 코드(OPCODE)와 데이터로 구성된 스크립트이고 이 명령어를 수행한 결과에 의해 Input 검증 성공 / 실패가 결정 됨.
  • input 값 내부의 previous output 의 신뢰 여부는?
    : input 의 prev. TxID와 TxIndex는 해제하고자 하는 이전 output을 가리킴. ScriptSig는 이전의 출력을 해제하는 키

input 의 구조 :
Prev. Tx ID, TxIndex: 해제하고자 하는 이전의 출력을 가리키는 포인터
ScriptSig: 이전의 출력을 해제하는 키

output 의 구조 :

ScriptPubkey: 잠금. ScriptPubkey의 소유자(해당 공개키의 소유자)만이 ScriptSig를 만들 수 있습니다.
Amount: 잠긴 비트코인의 양(단위:사토시)

노드는 피어로부터 트랜잭션을 받으면 먼저 해당 트랜잭션 안에 들어있는 입력과 출력 목록에서 각 입력과 출력에 해당하는 ScriptSig와 ScriptPubkeys를 추출합니다. 그리고 기존 블록들을 찾아보며 입력과 연결된 이전 출력을 찾고, 각 입력과 출력에 들어있는 ScriptSig와 ScriptPubekey를 연결시킵니다.

ScriptSig와 ScriptPubkey는 각각 연속적인 정보를 담고 있습니다. 노드가 ScriptSig와 ScriptPubkey를 연결하고, 그 연결한 전체 시퀀스를 파싱하면 온전한 스크립트 코드가 나타나게 됩니다. 노드는 이 코드를 단계별로 실행합니다.

비트코인 스크립트 실행은 스택이 빈 상태에서 input의 scriptSig를 먼저 실행하고, 그 다음 scriptPubKey를 실행시킴. 실행 결과 스택의 맨 위 값이 FALSE이면 실패, TRUE(0이 아닌값)이면 성공.

예시 :
a -> b -> c

10btc
3btc

CTxin prevout - a의 공개키로 받은 CTxout 에 대한 포인터
CTxin scriptSig - a의 서명(비밀키)

CTxout nValue - btc value
CTxout scriptpubkey - b의 공개키

비트코인 트랜잭션의 검증과정

비트코인 노드를 통해서 수행됩니다. 노드들은 하나의 트랜잭션을 검증할 때에 3가지를 체크.

  1. 해당 트랜잭션 input이 이전에 지불된 적이 없는지 체크. 이 단계는 해당 트랜잭션 input이 중복 지불되지 않도록 합니다.
  2. 트랜잭션 output의 합계가 트랜잭션 input의 합계보다 크지 않은지 체크. "input의 합계 >= output의 합계" 여야함. 이를 통해, 비트코인이 출처가 없이 생성되는 것을 막음.
  3. 디지털 서명이 유효한지 확인하여 script가 유효함을 확인.

이더리움에서 트랜잭션 검증은 어떻게 이루어 지나요?

작성중

  • 이더리움은 타원곡선디지털서명(ECDSA) 알고리즘을 이용하여 트랜잭션을 서명. 비트코인과 마찬가지로 secp256k1 곡선을 사용하고 있습니다. ECDSA로 서명한 서명한 메시지를 검증하려면 서명에 사용한 비밀키에 대응하는 공개키가 필요합니다.

이더리움에서 머클패트리샤트리란 무엇인가요?

  • 패트리샤는 Patricia is defined as a Practical Algorithm To Retrieve Information Coded In Alphanumeric(영숫자로 코딩 된 정보를 검색하는 실용적인 알고리즘) 을 뜻합니다.

  • 이더리움에서는 모든 트랜잭션의 완전한 모델을 만들기 위해 Merkle-Patricia-Tree (trie) 방법을 사용한다. 이더리움 황서(Yellow Paper)에는 다음과 같이 정의되어 있다.

수정된 Merkle Patricia 트라이(trie) 는 임의 길이의 이진 데이터 (바이트 배열) 간에 매핑하기 위한 영구 데이터 구조를 제공한다. 256 비트 이진 조각과 임의 길이 이진 데이터 사이를 매핑하기 위해 가변 데이터 구조로 정의된다. trie의 핵심이며 프로토콜 사양 측면에서 유일한 요구 사항은 주어진 키-값 쌍 집합을 식별하는 단일 32 바이트 값을 제공하는 것이다.

이더리움에서 블록싱크 방식은 어떻게 되나요?

이더리움에서 노드디스커버리는 어떻게 이루어 지나요?

코인과 토큰의 차이는 무엇인가요?

  • 코인과 토큰의 가장 큰 차이점은 바로 플랫폼의 유무 입니다. 사실 이 외에도 다양한 방법으로 코인과 토큰을 구별하긴 하지만 가장 많이 쓰이는 구별 기준이 플랫폼 유무임. 플랫폼이란 말이 쉽게 와닿지 않으신다면 그냥 기반 기술의 유무라고 생각해도됨.

  • 우선 코인과 토큰을 구별하는 건 여러가지 기준이 있습니다. 독자적인 기술 수준에 따라서 구분하기도 하고, 단순히 이름 짓기 나름이라고도 생각함. 그 중 가장 보편적으로 사용되는 구분 기준은 플랫폼의 유무입니다. 이 블록체인 네트워크를 그 코인이 독자적으로 가지고 있다면 코인, 다른 블록체인 네트워크 기반을 사용한다면 토큰입니다.

이 블록체인 기술을 개인적으로 가지고 있는 암호화폐는 코인, 다른 블록체인 기술을 기반으로 한다면 토큰.

코인 : 플랫폼이 있는 암호화폐
토큰 : 플랫폼 코인 위에서 동작하는 dApp의 암호화폐

CFT와 BFT의 차이는 무엇인가요?

  • 블록체인 시스템에선 둘 모두 합의라는 방식을 거치게 되는데, 비트코인의 경우는 일반적인 CFT, BFT 보다 높은 수준의 신뢰작업이 필요하다. 이것이 바로 PoW(작업증명)입니다. 컨소시엄형 블록체인 시스템(하이퍼레저 패브릭 등)에서는 보통 조직들이 이미 신원확인등에 의한 허가를 받은 상태에서 참여하기 때문에, 악의적인 행위를 안할거라고 믿고 서비스를 합니다. 따라서, 특정 상황에 노드에 문제가 생기는 경우에 대해서만 염두에 둔 CFT 기반의 오더링 알고리즘이 우선되고 있습니다.

CFT는 분산시스템에서 노드가 비정상적인 충돌에 의해 문제가 생기더라도, 나머지 시스템에서 서비스를 할 수 있게 하는 작동방식을 말합니다. 반면 BFT는 더 복잡하며 악의적인 행위자가 있을 수 있는 시스템을 처리합니다.

PBFT 알고리즘은 무엇인가요?

PBFT는 분산시스템이 약속된 행동을 하지 않는 비잔틴 노드가 존재할 수 있는 비동기 시스템일 때 해당 분산시스템에 참여한 모든 노드가 성공적으로 합의를 이룰 수 있도록 개발된 합의 알고리즘입니다.
PBFT는 기존의 BFT 합의 알고리즘이 동기식 네트워크에서만 합의가 가능했던 문제를 해결하여 비잔틴 노드가 있는 비동기 네트워크에서 합의를 이룰 수 있게 하였습니다.

  • 합의는 다음과 같이 수행합니다.
    1) 리더가 클라이언트의 요청을 수집하여 정렬하고 실행 결과와 함께 다른 노드들에 전파합니다.
    2) 리더의 메시지를 받은 노드들은 다른 노드들에서 받은 메시지를 다시 한번 나머지 노드들에게 전파합니다.
    3) 모든 노드는 자신이 다른 노드에서 가장 많이 받은 같은 메시지(정족수 이상의)가 무엇인지 다른 노드들에게 전파합니다.

1) 2) 3)의 과정이 끝나면 모든 노드들은 정족수 이상이 동의한, 즉 합의를 이룬 같은 데이터를 가지게 됩니다.

  • PBFT는 두번의 브로드캐스트 과정을 이용해 비잔틴 리더나 비잔틴 검증 노드가 네트워크 분기를 위해 이상한, 혹은 임의의 메시지를 보내도 네트워크의 모든 노드는 같은 메시지를 가질 수 있게 하였습니다. 이러한 PBFT 알고리즘은 IBM Fabric 0.6v이나 1.0v의 Orderer서비스, R3 Corda의 Notary와 같은 프라이빗 블록체인에서 사용하고 있습니다.

PBFT의 장점
1. 트랜잭션 완결성과 빠른 거래 확정: PBFT는 다음 블록 합의가 이루어진다면 제안된 블록의 합의 내용이 확정되어 한번 확인(1 Confirmation)으로 거래가 완결되므로 거래 확정시간이 짧다.
2. 저에너지로 비용 감소: PBFT는 작업증명방식 PoW이 아니고 지분증명방식 PoS을 기본으로 하여 에너지 사용량이 적고, 따라서 거래 비용이 작다.

이더리움에서 이벤트(logs)는 어떻게 발생되며, 클라이언트에서는 어떻게 감지하나요?

비트코인에서 UTXO 란 무엇인가요?

  • 출력에는 자산이 잠겨있고, 입력으로 출력을 해제하여 출력에 있는 값을 꺼내, 새로운 출력에 자산을 담습니다. 트랜잭션에는 다른 곳에 잠겨있는 출력을 해제하는 입력과, 입력의 결과로 생긴 새로운 출력이 담기게 됩니다. 따라서 트랜잭션은 이전 출력을 해제하고, 새로운 출력을 만드는 추상적인 액션이라고 볼 수 있습니다. 이렇게 입력에 의해 생성된 후, 다른 입력에 의해 해제되지 않은 트랜잭션 출력을 UTXO라고 합니다.
  • UTXO는 잠겨있는 비트코인 그 이상도 이하도 아닙니다. UTXO는 코인을 담고 있는 상자이며, 다양한 양의 코인을 담을 수 있습니다.

UTXO : 미사용 트랜잭션의 출력값

이더리움에서 트랜잭션 nonce 가 필수인 이유는? 비트코인은 왜 트랜잭션 nonce 가 없나요?

  • 이더리움에서 이중 지불 문제를 방지하기위해서 nonce를 사용.

nonce는 중복되지 않고 순차적이기 때문에, 같은 nonce 에 여러 트랜잭션 전송이 발생하였다면 해당 nonce 중 제일 높은 가스비를 지불한 트랜잭션이 처리됩니다.

어카운트 기반인 이더리움의 이중 지불 문제를 방지하기 위해 nonce를 사용하는 것처럼 비트코인은 UTXO를 사용해 이중 지불 문제를 방지하기떄문에 트랜잭션 nonce는 필요없다.

Double Spending 문제, Replay Attack 문제, Eclipse Attack 문제 각각 무엇인가요?

Safety(finality) & Liveness 란?

  • Safety(finality) : 시스템에 나쁜 일이 발생하지 않는다는 의미이며, 모든 정상적인 참여자는 같은 상태에 동의하여야 하고, 그 상태는 유효해야 합니다. 다시 말해, 문제 없는 노드는 잘못된 합의를 하지 않는다는 의미입니다.

  • Liveness : 시스템은 항상 살아 있어야 한다는 의미이며, 결국에는 어떤 상태에 동의하여야 하고, 모든 참여자는 동의된 상태에 도달해야 합니다. 다시 말해, 문제 없는 노드는 반드시 합의를 한다는 의미입니다.

CAP 이론이란?

블록체인에서 Finality란 무엇인가요? 그리고 왜 중요할까요?

  • 블록체인에서 Finality(완결성)의 의미는 블록이 한 번 블록체인에 포함되고 나면 되돌릴 수 없음을 의미.
    Finality 보장 방법은 합의 알고리즘 설계에서 가장 중요한 문제 중 하나.

  • Finality는 크게 확률적, 절대적 두 종류로 분류.

  • 확률적 finality는 블록을 되돌릴 수 없다는 것을 확률적으로만 보장. 비트코인 나카모토 합의 알고리즘이 사용하는 방식으로 블록이 추가로 생성될수록 앞쪽에 있는 블록의 finality가 확률적으로 증가하는 방식.
    오래된 블록을 되돌리기 위해서는 많은 컴퓨팅 파워가 필요하기 때문에 어느 정도 오래된 블록은 사실상 되돌리는 것이 불가능해짐. 거래소에 비트코인을 입금하면 6새의 블록 컨펌을 기다린 이후 거래가 가능한 이유도 거래소 입장에서 확률적으로 finality를 체크하기 때문.

  • 절대적 finality는 한 번 블록이 블록체인에 포함되면 어떤 경우에도 해당 블록을 되돌릴 수 없음을 보장하는 방식. 주로 텐더민트와 같은 BFT 계열의 합의 알고리즘이 절대적 finality를 보장하는데, 텐더민트의 경우 블록이 전체 노드 voting power의 2/3 prevote와 2/3 precommit을 받으면 해당 블록은 즉시 finalize가 됨.

  • 작성중

블록체인에서 TPS가 늘어나면 어떤 문제가 발생하나요? 이러한 문제에 대해 솔루션이 있으신가요?

최대 TPS와 현재 TPS의 관점

  • 블록체인 TPS는 하드웨어의 영향을 받음.

트릴레마에서 관점

일단 TPS가 늘어난다는 것은 확장성이 좋아진다는 말이고 현재 블록체인의 가장 문제점으로 삼고 있는 점을 해결하였다고 할 수가 있습니다.

하지만 블록체인의 트릴레마는 한쪽이 좋아지면 한쪽이 무너진다는 특성이 있고 반드시 확장성이 좋아지면 보안 및 탈중앙화가 무너지게 될 것입니다.

예를 들어, 블록의 크기 늘림 -> 트랜잭션 처리 증가 -> 확장성 증가 -> 데이터가 증가 -> 일부 채굴자들의 독점 -> 중앙화(탈중앙화가 악화)

확장성이 좋아지면 탈중앙화 또는 보안이 떨어지게 되는 블록체인 트릴레마에 빠지고 이는 현재 블록체인이 가장 우선시하여 개선해야 하는 문제점.

블록체인의 블록이란 무엇인가요?

블록이란 다수의 트랜잭션을 모아서 하나로 관리하기 위한 묶음.

  • 하나의 블록을 다음 블록과 이어주기 위해 해시를 이용하여 체인 구조를 만들 수 있다. 이처럼 다수의 트랜잭션을 블록으로 묶은 후 시간 순서에 따라 체인으로 엮은 것을 블록체인이라고 함.

PoW와 PoS, DPOS 의 차이는 무엇인가요?(Safety(finality) & Liveness 관점에서)

블록체인은 분산 데이터베이스입니다. 기존의 전통적인 데이터베이스와 어떤 점 이 다른가요?

  • 가장 큰 차이점은 분산형 원장.
  • 원장의 기록을 변경하는 '업데이트'나 '삭제' 등의 명령을 사용할 수 있는 데이터베이스와 달리 트랜잭션이 블록체인 네트워크에 기록되면 변경할 수 없는점.

51% 공격이란 무엇인가요?

블록체인의 전체 노드 중 50%를 초과하는 해시 연산력을 확보한 뒤, 거래 정보를 조작함으로써 이익을 얻으려는 해킹 공격.

블록체인이 사용되는 실제 사례를 설명해주세요

  • 쿠브앱?

하드 포크와 소프트 포크는 무엇인가요?

  • 하드 포크 : 블록체인의 기본 기능 자체를 수정하는 포크를 말하며, 블록체인의 문제 해결 및 업그레이드 방식의 하나로서, 업그레이드 이후에는 기존 문제를 해결하고 이전 블록체인과 전혀 다른 프로토콜을 가지는 블록체인이 됩니다. 이러한 하드포크 이후에 채굴 노드들은 새로운 버전으로 반드시 업그레이드를 해야 한다고 해서 하드(Hard)포크라고 합니다.

  • 소프트 포크 : 기존 블록체인의 기능을 일부 수정하는 포크를 말하며, 소프트포크를 하면, 기존 블록체인의 기본 구조는 변경되지 않고 부분적인 기능개선만 이루어지기 때문에 기존 블록체인 노드들은 간단한 시스템 업그레이드만으로도 새로운 시스템으로 이전할 수 있게 됩니다.

해시(블록 서명)는 어떻게 생성되나요?

Dapp이란 무엇이고 일반적인 어플리케이션과 무엇이 다른가요?

dApp 이란, Decentralized Application 의 약자로서 이더리움, 큐텀, 이오스 같은 플랫폼 코인 위에서 작동하는 탈중앙화 분산 애플리케이션을 뜻하며, 간략히 분산앱이라고도 함.

가장 큰 차이점은 중앙화, 탈중앙화의 차이점. 이로인해 다른 차이점들이 생김
다른 예시로는 속도적인 면에서의 차이, 유저 친화성의 차이, 데이터 삭제 여부, 정보 투명성 등...

근본적인 차이가 블록체인을 사용하냐 안하냐의 차이

스마트 컨트랙트의 실행 비용이 지정된 가스보다 더 많이 소요된다면 무슨 일이 일어나나요?

트랜잭션에서 가스 사용량은 무엇에 따라 달라지며, 트랜잭션 수수료는 어떻게 계산되나요?

블록은 어떻게 식별하나요?

EVM 메모리의 구성요소를 설명해주세요

암호화란 무엇인가요? 그리고 블록체인에서 암호화의 역할은 무엇인가요?

profile
블록체인 백엔드 개발자

2개의 댓글

comment-user-thumbnail
2025년 1월 9일

잘 봤습니다~

1개의 답글