블록체인이 제대로 작동하기 위해서는 기본적으로 네트워크가 반드시 필요합니다.

블록체인은 피투피 네트워크를 사용합니다. 그 피투피 네트워크의 방식과 개념을 알아보도록 하겠습니다.

우선, 피투피 네트워크를 설명하기 전에, 일반적인 네트워크를 먼저 설명하겠습니다.

인터넷으로 검색하고 메일을 보내고 하는 것을 서비스라고 합니다.

이런 서비스를 제공해 주는 컴퓨터들이 있는 데, 이런 컴퓨터를 써버라고 합니다. 

그리고, 이런 서비스를 요청하기 위해서는 스마트폰이나 노트북 같은 컴퓨터를 사용하게 됩니다.

인터넷 검색을 위해서 검색어를 입력하고, 메일을 써서 보내고 하는 컴퓨터나 스마트폰을 클라이언트하고 합니다.

예를 들어, 인터넷에서 검색을 하는 것은, 클라이언트에 설치되어 있는 크롬 같은 웹브라우저에서 검색어를 입력해서 써버로 보내는 것입니다.

그러면 써버에 설치되어 있는 웹서버가 그 검색어를 받아서 검색한 결과를 클라이언트 쪽으로 보내주게 됩니다.

그러면 클라이언트에서 검색결과를 볼 수 있는 것입니다.

일반적으로, 하나의 서버에 여러대의 클라이언트가 연결됩니다. 수 많은 클라이언트에서 서비스 요청이 들어오게 됩니다.

그래서, 써버는 용량이 크고 빠른 컴퓨터로 만들어야만 합니다.

다음은 피투피 네트워크에 대해서 설명하도록 하겠습니다.

피어라는 것은 써버와 클라이언트 역할을 모두 할 수 있습니다. 

그래서 피어는 서로가 요청을 보내기도 하고 답변을 보내기도 합니다. 

요청을 보낼 때는 클라이언트 역할을, 답변을 보낼 때는 써버 역할을 하는 것입니다.

 

이러한 피어로 구성된 네트워크를 피어 끼리 통신한다는 의미에서 피어 투 피어 네트워크라고 합니다.

피어 투 피어 네트워크를 줄여서 주로 피투피 네트워크라고 합니다. 

피투피 네트워크는 새로운 피어가 추가되는 방식으로 무한하게 네트워크를 확장해 갈 수 있습니다.

피어는 근처의 피어와 연결되고, 다시 그 피어는 다른 피어와 연결되어 전체 네트워크가 형성되는 방식입니다.

피어는 네트워크를 구성하는 요소라는 의미에서 노드라고도 합니다.

피투피 네트워크는 사람들 간의 연결된 모습과 닮았습니다. 

사람이 하나의 피어라고 할 수 있고, 사람들 간에 서로 대화하는 것이, 마치 피어 간에 요청과 답변이 오가는 모습과 비슷하다고 볼 수 있습니다. 

서버와 클라이언트 네트워크는 써버에 서비스가 집중되기 때문에 전체 네트워크를 설계하고 유지하기가 쉬운 편입니다.

그래서 새로운 기능을 추가하거나, 오류를 수정하는 것 같은 관리가 쉽습니다.

하지만 서버에 장애나 문제가 생기면, 네트워크 전체가 중단될 수 있다는 단점이 있습니다.

그에 반해서, 피투피 네트워크는 서버를 준비할 필요가 없습니다. 

각 노드들이 각각 서버 및 클라이언트 역할을 하기 때문에 네트워크 전체의 부담을 분산시켜 줍니다. 

새로운 노드가 추가되더라도 서비스를 유지하기가 쉬워서 확장성이 좋다고 할 수 있겠습니다.

하지만, 새로운 기능을 추가하거나 업데이트를 하려면 모든 노드를 수정해야 하므로 관리가 어려운 편이고, 

네트워크 전송 시간 차이 때문에 노드들 간의 정보가 일치하지 않을 수 있고, 또한 전체 네크워크 속도가 느려지는 현상이 발생할 수 있는 단점도 있습니다.

 

맨 앞에서, 블록체인은 피투피네트워크를 사용한다고 말씀드렸는데요.

 그것은 블록체인이 분산된 장부로 구성되기 때문입니다. 

그리고, 분산된 장부는 하나의 서버에 의존하지 않는 분산된 네트워크를 필요로 하고, 

분산된 네트워크에는 피투피 네트워크 방식이 좀더 보다 적합하다고 하겠습니다.

분산된 장부에 대해서는 다음 동영상에서 설명하도록 하겠습니다.

https://youtu.be/JC5_2gbnrU8 

 

암호화폐의 특징 중에 거래의 익명성이 있다. 이는 거래하는 당사자가 누구인지 알 수 없다는 점이다. 하지만, 일반적인 암호화폐가 완전히 '익명'을 보장하는 것은 아니다.  

암호화폐 거래를 위해서는 주소가 필요한데, 개인정보를 넣지 않더라도 언제든지 새로운 주소를 만들어 사용할 수 있다. 하지만 모든 거래들은 블록체인 탐색기를 통하여 추적이 가능하고, 계속해서 추적하다 보면, 그 주소가 누구의 것인지 추측할 수 있게 된다. 즉, 익명이지만 그 익명이 누구인지를 추측할 수는 있다는 것이다. 

이런 아쉬움을 해소해주는 암호화폐가 있고, 대표적으로 모네로(Monero)와 대쉬(Dash)를 꼽을 수 있다. 

암호화폐의 익명성을 강조하다 보면, 그 익명성을 이용해서, 불법거래에 사용될 수 있다는 우려를 피할 수는 없다. 하지만, 어떤 개인이 얼마나 많은 자산을 가지고 있는 지를 모두에게 알려줄 필요는 없다. 또한, 사업자라면 얼마나 많은 고객과 거래하는 지, 얼마나 수입이 있는 지와 같은 것들은 모두 민감한 내용들이다. 이 모든 것들이 공개되는 것은 개인정보 보호 차원에서 또 다른 우려가 될 것이다. 

암호화폐의 익명성으로, 중앙의 권력에 의해서 모든 개인의 프라이버시가 침해 당하지 않는 세상을 기대해 볼 수 있겠다.

채굴을 하기 위해서는 채굴 프로그램, 마이너가 필요하다.
대부분 마이너는 GPU를 사용하게 되는 데, 효율을 낮기는 하지만 CPU만으로도 채굴을 할 수 있다.
대표적인 CPU 마이너 프로그램을 소개한다.

명칭 : Pooler CPU Miner
지원비트 : 32 bit, 64 bit
지원운영체제 : Windows, Linus, iOS
홈페이지 : https://sourceforge.net/projects/cpuminer/files/
채굴 이용 하드웨어 : CPU 전용 (GPU가 없는 경우 유용함)
채굴 가능한 알고리즘 :  scrypt (Litecoin, Degecoin), sha256d (bitcoin, peercoin), scryptN 

매번 복잡한 명령어를 치기 보다는, 배치파일을 만들어서 사용하는 것이 편리하다 
run.bat 을 아래와 같이 만들면 된다.

minerd -a scrypt -o stratum+tcp://ltc.pool.minergate.com:3336 -u test@test.com -p x -t 1
pause


여기서, ltc.pool.minergate.com은 마이닝풀 중에서 한 곳이다.
혼자서 채굴을 하는 것은 가능성이 너무 낮기 때문에, 마이닝풀(mining pool)에 가입해서 채굴해야 한다.
대표적인 마이닝풀을 소개한다.
 
miningpoolhub.com
minergate.com

 

모네로 블록체인 네트워크에 참여하기 위해서는 자신의 컴에 모네로 지갑과 데몬을 설치해야 한다. 네트워크에 참여하기 위한 필수요소는 데몬이다.

이 데몬은 컴에 블록체인은 다운받아 네트워크에 있는 최신의 블록체인과 동기화를 유지한다. 어디선가 새로운 블록이 생기면, 수시도 동기화를 해서 모네로 블록체인을 최신의 상태로 유지해 준다.

컴에 이 데몬을 설치하기 위해서 하나 이상의 지갑이 필요하다.

모네로 앱을 https://web.getmonero.org/downloads/ 에서 다운로드 받을 수 있다.

다운로드 받아 설치하면 하나의 지갑을 만들게 된다. 그리고 데몬이 시작되어 블록체인을 동기화 하기 시작한다.

블록체인 동기화 상태는 화면의 왼쪽 아래에 표시된다.

이 동기화 작업은 생각보다 오랜 시간이 걸릴 수도 있다. 컴의 성능과 네크워크의 성능에 따라 달라질 수 있다.

아래 화면은, 동기화를 완료한 상태에서 다시 시작한 화면이라서, 2개의 블록만은 동기화하고 바로 최신 상태를 유지할 수 있는 것이다.

아래 그림은 모네로 데몬을 실행되고 있는 화면이다.

하나의 큰 파일을 작은 크기(10MB) 크기로 잘라서 여러개 파일로 저장하는 기능이다.

-------------------------------------

import os

def file_split(filepath1, filename1):
    # 예: 10MB
    size_limit = 1024*1024*10
    with open (filepath1 + filename1, 'rb') as fi:
        i = 0
        b = fi.read(size_limit)
        while b != b'':
            with open (filepath1 + filename1 + '.' + str(i), 'wb') as fo:
                fo.write(b)
                fo.close()
            i = i + 1
            b = fi.read(size_limit)
        fi.close()

------------------------------------------

여러 개 파일로 나누어서 저장된 파일을 다시 하나의 큰 파일로 이어 붙이는 기능이다.

------------------------------------------

def file_join(filepath1, filename1):
    filepathname = filepath1 + filename1
    with open(filepathname, 'wb') as fo:
        i = 0
        while os.path.exists(filepathname + '.' + str(i)) :
            with open(filepathname + '.' + str(i), 'rb') as fi:
                fo.write(fi.read())
            i = i + 1
        fo.close()

--------------------------------------------

테스트를 수행한다.

--------------------------------------------

if __name__ == "__main__" :
    file_split('d:/dev/', '큰 파일.pdf')
    file_join('d:/dev/', '큰 파일.pdf')

 

 

'technology' 카테고리의 다른 글

CPU로 암호화폐 채굴  (0) 2024.03.25
모네로 (Monero, XMR) 블록체인 네트워크에 참여하기  (0) 2024.03.25
파이썬 GUI 도구의 선택  (0) 2024.03.25
스텔라루멘(XLM)  (0) 2024.03.25
암호화폐 종류 및 추천 코인  (0) 2024.03.25

파이썬에서 GUI 프로그램을 만들기 위해서 필요한 GUI 도구들을 알아본다.

 

1. Tkinter

Tkinter는 Tcl/Tk에 대한 파이썬 Wrapper로서 Tcl/Tk를 파이썬에 사용할 수 있도록 한 Lightweight GUI 모듈이다. Tcl은 Tool Command Language의 약자로서 일종의 프로그래밍 언어이며, Tk는 크로스 플랫폼에 사용되는 일종의 GUI 툴킷이다. Tkinter는 타 GUI 프레임워크나 툴킷에 비해 지원되는 위젯들이 부족하고 UI도 그렇게 예쁘지 않다는 단점이 있지만, Python 설치시 기본적으로 내장되어 있는 파이썬 표준 라이브러리이기 때문에 쉽고 간단한 GUI 프로그램을 만들 때 활용될 수 있다.

Tkinter는 파이썬에 기본 내장되어 있기 때문에 별도로 설치할 필요가 없다. Tkinter를 사용하기 위해서는 tkinter 모듈을 import 하면 된다.

 

2. PyQt

PyQt는 Qt의 Python Language Binding 중의 하나이다. Qt는 C++로 작성된 크로스 플랫폼 프레임워크로 The Qt Company에서 작성한 프로그램이다. PyQt를 사용하면, 동일한 파이썬코드를 사용하여 윈도우즈, Mac, 리눅스에서 모두 동작하는 GUI 프로그램을 작성할 수 있다. PyQt4와 PyQt5가 있으며, PyQt4는 더이상 지원되지 않는다고 한다.

GtDesigner 라는 강력한 UI 디자인 도구를 제공하는 장점이 있다. PyQt는 오픈소스로서 개인용으로는 무료이지만 상업용으로는 License를 구입해야 한다. 

 

3. PySide

PyQt4와 유사한 Python Qt 바인딩이며, 크로스 플랫폼을 지원한다. 

PyQt4와 거의 비슷한 PySide는 오픈소스로서 상업용으로도 무료이다. 하지만, PySide는 오픈소스를 지속적으로 관리하는 부분이 소홀한 만큼 상업용 프로젝트에는 부담스러울 수 있다. LGPL을 따른다. 

 

4. PyGTK

리눅스 환경에 잘 맞으며, 윈도우즈에서는 돌리기에 좀 불편한 편이다. GUI 디자인 도구로 Glade를 제공한다. Tkinter에 비해서는 기능이 많은 편이며, LGPL 라이센스 정책을 따른다.

 

5. wxPython

크로스-플랫폼을 지원하과 각 플랫폼에 어울리는 위젯을 제공한다. Tkinter에 비해 기능이 충실한 편이다. wxGlade와 같은 것 등의 GUI 디자인 도구를 제공한다. 

GPL과 유사한 Wxwidgets 라이선스 정책을 따른다.

 

6. Kivy

Kivy는 Windows, MacOSX, Linux, Android iOS 및 Raspberry Pi와 같은 여러 플랫폼을 지원한다. 오픈 소스이며 툴킷에는 20 개 이상의 위젯이 제공됩니다. 네이티브 위젯이 아닌 OpenGL ES 2를 통해 렌더링되므로 운영 체제 전반에 걸쳐 모양이 균일하다. Kivy를 사용하여 Android 및 iOS 용 멀티 터치 모바일 앱을 제작할 수도 있다고 한다. 게임을 만들때 좋은 GUI 라이브러리이다. MIT 라이선스 하에서 무료로 사용할 수 있다. Kv lang 이라는 별도의 개발언어로 보다 간략하게 화면을 개발할 수 있다. 이 개발언어를 보다 편리하게 사용할 수 있도록 designer가 제공된다.