블록장생조

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

이더리움 private network를 이용한 카드 결제 승인 시스템

과제 팀명

블록장생

지도교수

김민호 교수님

개발기간

2018년 11월 ~ 2018년 12월 (총 2개월)

구성원 소개

서울시립대학교 컴퓨터과학부 2013920048 이*진(팀장)

서울시립대학교 컴퓨터과학부 2013920046 이*열

서울시립대학교 컴퓨터과학부 2014920051 전*진

서론

개발 과제의 개요

개발 과제 요약

이더리움의 Smart Contract를 private버전으로 구축해 카드결제 정보 관리하기

모든 프로세스와 in/out data storage를 블록체인 시스템으로 구현한다.

개발 과제의 배경 및 지식

◇ 블록체인 블록체인이란 블록에 데이터를 담아 체인 형태로 연결, 수많은 컴퓨터에 동시에 이를 복제해 저장하는 분산형 데이터 저장 기술이다. 공공 거래 장부라고도 부른다. 중앙 집중형 서버에 거래 기록을 보관하지 않고 거래에 참여하는 모든 사용자에게 거래 내역을 보내 주며, 거래 때마다 모든 거래 참여자들이 정보를 공유하고 이를 대조해 데이터 위조나 변조를 할 수 없도록 돼 있다. 우리는 이 블록체인 기술을 카드 거래관리에 적용해 신뢰성을 높이고자 하였다.

◇ 스마트 계약 스마트 계약(Smart contract)은 프로그래밍된 조건이 모두 충족되면 자동으로 계약을 이행하는 ‘자동화 계약’ 시스템이다. 기존에는 계약이 체결되고 이행되기까지 수많은 문서가 필요했다면 스마트 계약은 계약 조건을 컴퓨터 코드로 지정해두고 조건이 맞으면 계약을 이행하는 방식이다. 스마트 계약을 통해 사람들은 부동산, 주식 등 다양한 것을 거래할 수 있고 제3자 없는 당사자간 거래가 가능하다.

◇ 솔리디티(Solidity) 솔리디티(Solidity)는 프로그래머들이 사용하는 C와 Java 언어 같은 개발 언어들처럼 이더리움 블록체인의 '스마트 계약' 을 구축하는데 쓰이는 개발 언어이고, Javascript 문법과 유사하다. 솔리디티 코드는 컨트랙트 안에 싸여 있다. 컨트랙트는 이더리움 애플리케이션의 기본적인 구성 요소로, 모든 변수와 함수는 어느 한 컨트랙트에 속한다. 컨트랙트는 모든 프로젝트의 시작 지점이라고 할 수 있다.


◇ 블록체인은 크게 퍼블릭 블록체인, 프라이빗 블록체인, 컨소시움 블록체인 세가지로 분류할 수 있다.

- 퍼블릭 블록체인(Public Blockchain): 비트코인, 이더리움과 같은 누구나 네트워크에 참여할 수 있는 블록체인
- 프라이빗 블록체인(Private Blockchain): 하나의 기관에서 독자적으로 사용하는 블록체인
- 컨소시움 블록체인(Consortium Blockchain): 여러 기관들이 컨소시움을 이뤄 구성하는 블록체인, 허가된 기관만 네트워크에 참여할 수 있다.

Wow.png

현재 거래소에서 거래되는 대다수의 블록체인은 퍼블릭 블록체인으로 누구나 블록체인 네트워크에 참여할 수 있고 모든 내역을 볼 수 있고 누구나 트랜잭션 내역 검증할 수 있다. 프라이빗 블록체인이나 컨소시움 블록체인은 참여자가 제한된 블록체인으로 내부 망을 구축하거나 별도의 인증 방식을 통해 참여가 제한된 블록체인을 말한다.

◇ 퍼블릭 블록체인 vs 프라이빗 블록체인 퍼블릭 블록체인과 프라이빗 블록체인은 서비스가 다르고 운영환경이 다르기 때문에 요구사항이 다르다. 특히 퍼블릭 블록체인은 누구나 참여할 수 있고 모든 사람이 운영하기 때문에 운영 주체가 불분명하고 독자적인 화폐를 통해 금융활동을 하기 때문에 법적 구속력에 상대적으로 자유로울 수 있다. 그러나 프라이빗(컨소시움) 블록체인은 운영 주체가 명확하고 새로운 금융거래를 하는 것이 아닌 기존에 있던 금융 거래를 하는 것이기 때문에 모든 금융 관련 법과 규제사항을 준수해야 한다.

현존 퍼블릭 블록체인은 읽기, 트랜잭션 생성을 누구나 할 수 있다. 모든 사용자들은 모든 데이터를 확인할 수 있다. 그러나 기관 간 블록체인의 경우 어플리케이션에 따라 개인의 금융정보가 담긴 데이터가 네트워크 상으로 오고 갈 수 있기 때문에 모두에게 데이터가 공개되면 안된다. 또한 법적으로 책임 질수 있는 기관만 트랜잭션을 생성할 수 있어야 한다. 모두가 트랜잭션을 생성할 수 있다면 금융사고가 일어났을 때 책임 주체가 불분명해 질 수 있다.

또한 트랜잭션 검증 요구사항에도 차이가 있다. 퍼블릭 블록체인의 경우 트랜잭션 내역 모두에게 공개 되며 네트워크에 참여한 모든 노드가 트랜잭션을 검증한다. 그러나 프라이빗(컨소시움) 블록체인에서 이해관계자가 아닌 모든 노드가 트랜잭션의 검증하는 것은 문제가 있을 수 있다.. 또한 노드별로 권한을 다르게 하는 것 또한 퍼블릭 블록체인에서는 불가능 하다. 감독기관은 모든 데이터를 검증해야 되고 나머지 기관들은 자신에 관련된 데이터를 검증하는 등의 역할을 할 수 없다. 또한 퍼블릭 블록체인은 블록체인 엔진 수정이 어렵기 때문에 엔진에서 제공해야만 가능한 기능들을 추가하는 것이 매우 어렵다.

◇ 퍼블릭 블록체인의 한계 퍼블릭 블록체인은 참여가 자유롭다. 즉 인증되지 않은 참여자도 악의적인 목적을 가진 해커도 퍼블릭 블록체인에 접근할 수 있다. 이런 조건에서 악의적인 네트워크 참여자의 공격에 방어하면서 또한 세계 각지에 있는 모든 노드들이 같은 데이터를 공유해야한다. 퍼블릭 블록체인은 이런 요구사항을 만족 시켜야하기 때문에 성능 면에서 많은 것을 포기했다.

퍼블릭 블록체인은 기본적으로 누구나 블록 후보를 만들어 제출하고 분산합의를 통해 하나의 블록을 선정하여 신뢰할 수 있는 블록으로 인정받는 구조다. 따라서 인터넷 상에서 블록을 공유해야하는 시간이 있고 너무 많은 블록이 동시에 만들어 지면 하나의 블록을 선택하기 어렵기 때문에 블록 생성시간에 제한을 두고 있다. 비트코인의 경우 약 10분마다 하나의 블록을 생성하고 이더리움의 경우 약 12초 마다 하나의 블록을 생성한다. 네트워크에 공유되는 시간을 고려했을 때 이더리움에서 내가 보낸 트랜잭션 결과를 확인하려면 약 1~2분 정도 기다려야 한다. R3에 제출한 이더리움 보고서에 따르면 현 이더리움의 TPS(Transaction Per Second)는 약 10tps이고 비트코인의 경우 약 7tps이다. 즉각적인 처리가 필요한 금융권 서비스에는 그대로 적용하기에는 불가능한 수준이다.

또한 퍼블릭 블록체인에서 채택하고 있는 분산합의 알고리즘으로 작업증명(Proof of Work, PoW)이나 지분증명(Proof of Stake, PoS)을 사용하려면 내부 화폐가 필요하다. 퍼블릭 블록체인에서의 분산합의 목표는 결국 거래 내역을 검증하여 신뢰할 수 있는 블록을 만들 수 있는 노드를 선택하는 것이고 이러한 수고를 하는 대가가 필요하기 때문이다. 채굴(mining)이라고 알려진 과정이 이러한 과정이다. 또한 작업 증명의 경우는 쓸모없는 컴퓨팅 파워를 많이 사용하는 친환경이지 않은 문제도 있다.

구성원 및 추진체계

컴퓨터과학부 이*진 – 조장, 전체적인 시스템 구조 제안 및 과제 배분, 정보 조사 및 과제 통합

컴퓨터과학부 이*열 - 트랜잭션의 정보를 담는 데이터베이스 파일형식 분석, geth를 이용하여 local network 구성, geth와 remix 연동

컴퓨터과학부 전*진 – 전반적인 Solidity 코드 작성

설계

설계사양

제품의 요구사항

Wow4.png

이더리움 네트워크 구동 환경

Wow2.png

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

◇ blockchain에 데이터 올리기 성공

Wow5.png

◇ 승인내역 보여주는 웹 화면

Wow6.png

◇ 취소내역 보여주는 웹 화면

Wow7.png


SW 구조

Wow8.png


SW 특징

◇ 승인, 취소, 환불 요청/응답에 관한 트랜잭션 정보들을 저장 ◇ 각 요청/응답에 필요에 의해 생성된 currency, amount, merchantId 등의 데이터 값들을 블록체인에 저장 ◇ 저장된 데이터들을 날짜별, 가맹점별로 웹 페이지를 통해 조회가 가능하도록 한다.

향후 평가

◇ 단순한 in/out 데이터의 저장의 단계이지만 블록체인 기술을 접목해봄으로써 앞으로의 발전가능성을 모색해볼 수 있다. ◇ 실제 카드사 시스템이 어떻게 구성되어 있는지 알지 못해서 연결시켜 보지 못한 점은 아쉬운 부분이다.