Software Engineering
-
Corda란?Cryptography 2021. 10. 26. 22:04
코르다(Corda)는 트랜잭션 배칭(batching)을 위해서 블록을 사용하지 않기 때문에 정의상 블록체인이 아닙니다. 그러나, 코르다는 분산 원장(distributed ledger)이며 블록체인이 제공하는 모든 이점을 제공해주는데요. 예로, 금융산업과 같은 분야에서 트랜잭션에 대해 공유하고 있는 원장을 참여자들이 이벤트가 발생한 이후에 매번 끊임없이 체크해야되는 필요성을 없애줍니다 (기존 Bitcoin, Ethereum과 같은 블록체인과 달리). 이번 글에서는 아래와 같은 점들을 알아보겠습니다: 코르다란? 아키텍쳐 코르다란? 코르다는 위에서 언급한 매번 원장을 체크하지 않아도 되는 이점 외에도 다양한 장점이 존재합니다. 코르다는 참여자들이 모두 동일한 상태를 가지도록 하며, 모든 참여자가 코르다 네트워..
-
마이닝 풀이란?Cryptography 2021. 10. 26. 21:23
마이닝 풀(mining pool)은 채굴자들이 모여서 그룹으로 채굴하는 것을 말합니다. 새로운 블록이 성공적으로 채굴되면 풀 매니저는 코인베이스 트랜잭션을 받고, 블록을 채굴하기 위해서 자원을 투입한 채굴자 그룹에서 그 보상을 분배주는 역할을 수행합니다. 이러한 마이닝 풀은 solo 마이닝보다 더욱 수익성이 있는데, 마이닝 풀에서는 개별 노드가 블록을 찾았는지와 상관 없이 보상을 분배해주기 때문입니다 (물론 이상적인 경우에). 마이닝 풀 매니저가 사용할 수 있는 모델은 pay-per-share, proportional 모델 등 다양하게 존재합니다. Pay-per-share 모델에서는 마이닝 풀 매니저는 적은 수수료를 채굴에 참여하는 모든 채굴자들에게 지불하는 반면, proportional 모델에서는 지분..
-
비트코인 채굴 시스템Cryptography 2021. 10. 26. 20:58
비트코인이 탄생한 2009년 이래로, 비트코인 채굴자들은 비트코인 채굴을 위해 다양한 방법을 사용해 왔습니다. 채굴이 기반한 핵심 원리가 double SHA256 알고리즘이기 때문에, 전문가들은 그러한 해시값 계산하는 시스템을 더욱 빠르게 발전시켜 왔습니다. 이번 글에서는 비트코인에 사용되는 다양한 종류의 채굴 방법을 알아보고 어떻게 진화해왔는지 살펴보겠습니다: CPU GPU FPGA ASICs CPU CPU 채굴은 오리지널 비트코인 클라이언트에서 사용가능했던 첫 번째 타이비의 방식입니다. 사용자는 심지어 노트북이나 데스크톱 컴퓨터를 사용해 비트코인을 채굴할 수 있었습니다. CPU 채굴은 더 이상 이익이 되지 않으며 ASIC 기반의 방식과 같은 더욱 발전된 방법이 사용됩니다. CPU 채굴은 비트코인이 탄..
-
비트코인 채굴(마이닝, mining)이란?Cryptography 2021. 10. 24. 21:16
비트코인 채굴(mining)은 새로운 블록이 블록체인에 추가되는 프로세스입니다. 트랜잭션들을 포함한 블록은 비트코인 네트워크 상의 '채굴 노드'의 채굴 프로세스를 통해서 인증(validated)됩니다. 채굴되고 검증된 블록은 블록체인에 추가되며 블록체인의 크기는 계속 커져갑니다. 이 프로세스는 PoW 요구사항으로 인해서 자원을 많이 사용하게 됩니다. PoW 요구사항으로 인해서 채굴자들은 네트워크 상의 타겟 난이도(difficulty target)보다 작은 숫자를 찾기 위해 서로 컴퓨팅 경쟁을 해야하기 때문입니다. 정확한 값을 찾아야 하는 이 난이도는 새롭게 추가되는 블록이 허용되기 전에 채굴자들이 요구되는 자원을 소비하도록 만듭니다. 그러한 채굴자들은 partial hash inversion 문제라고도 ..
-
JDBC란? (feat. 데이터베이스 커넥션 풀링)Java 2021. 10. 24. 12:12
JDBC(Java Database Connectivity)는 RDBMS에 접근하기 위한 프로그래밍 인터페이스입니다. JDBC의 실행은 대부분 SQL을 데이터베이스 서버에 전송하고 수행하는 것들인데요. 이번 글에서는 JDBC를 중심으로 아래와 관련된 사항들을 알아보겠습니다: JDBC 기초 JDBC 버젼 발전과정 JDBC 드라이버 타입 JDBC 기초 JDBC는 SQL 문장을 처리하는 엔진에 대한 Call-Level Interface(CLI)에 기반해 있습니다. 좀 더 구체적으로는, JDBC는 SQL92 언어 문법 스탠다드를 따르는 X/Open SQL CLI(X/Open은 국제 규격 조직)를 사용하는데요. 아래 이미지는 어떻게 SQL CLI와 JDBC가 내부적으로 동작하는지 보여줍니다: 위 이미지에서 JDBC..
-
비트코인 블록체인의 구조Cryptography 2021. 10. 16. 09:03
블록체인은 트랜잭션들에 대한 분산된 원장(distributed ledger)입니다. 특히, 비트코인의 관점에 있어서 블록체인은 공용이고, 분산형 원장으로 비트코인 네트워크 상에 모든 트랜잭션 기록들을 가지고 있는 것입니다. 이 안의 트랜잭션들은 일시(timestamp)가 적혀있고, 정렬되어 있으며, 변경이 불가능(immutable)한데요. 이후 트랜잭션은 채굴자에 의해 선택(pick up)되어 채굴을 위해 블록에 포함되게 됩니다. 각 블록은 하나의 해시값을 통해 식별되고 이전 블록의 해시값을 헤더에 포함하여 이전 블록을 참조하게 됩니다. 이번 글에서는 비트코인 블록체인의 구조를 살펴보겠습니다: 비트코인 블록체인의 구조 Genesis 블록 Stale 및 Orphan 블록 블록체인의 크기 네트워크 diffi..
-
비트코인 트랜잭션의 인증(Validation)Cryptography 2021. 10. 15. 22:18
트랜잭션 인증 비트코인 트랜잭션의 검증과정(verification process)은 비트코인 노드를 통해서 수행됩니다. 노드들은 하나의 트랜잭션을 검증할 때에 아래 3가지를 체크하게 됩니다: 먼저, 해당 트랜잭션 인풋이 이전에 지불된 적이 없는지 체크합니다. 이 검증 단계는 해당 트랜잭션 인풋이 중복 지불되지 않도록 합니다. 트랜잭션 아웃풋의 합계가 트랜잭션 인풋의 합계보다 크지 않은지 체크합니다. "인풋의 합계 >= 아웃풋의 합계"여야 하는데요. 이를 통해, 비트코인이 출처가 없이 생성되는 것을 막습니다. 디지털 서명이 유효한지 확인하여 script가 유효함을 확인합니다. 비록 트랜잭션 생성과 인증이 일반적으로 안전한 프로세스이긴하나, 비트코인에는 아래와 같은 몇 가지 취약점이 존재합니다. 트랜잭션 버..
-
비트코인 스크립트의 종류Cryptography 2021. 10. 15. 18:01
비트코인에는 검증과 코인 전송을 처리하기 위해서 다양한 스탠다드 스크립트가 존재합니다. 이러한 스크립트들은 트랜잭션에 대한 요구사항에 따라 간단한 것부터 매우 복잡한 것까지 존재하는데요. 스탠다드 트랜잭션들은 IsStandard()와 IsStandardTx() 테스트를 사용해서 평가되고, 그러한 테스트를 통과한 것들만이 비트코인 네트워크 상에서 브로드캐스트되거나 채굴될 수 있습니다. 그러나, non-스탠다드 트랜잭션들도 유효성 검사를 통과한다면 네트워크 상에서 허용됩니다. 이번 글에서는 그러한 스탠다드 스크립트를 다뤄볼 예정입니다: 종류 스크립트의 실행 흐름 종류 Pay-to-Public-Key Hash (P2PKH) P2PKH는 가장 일반적으로 사용되는 트랜잭션 타입으로 비트코인 주소로 트랜잭션을 송신..