(1차적으로 오류 수정 및 가필했습니다 - 2018년 3월 17일)
데스크탑에서 코어를 통해 비트코인 full/pruned 노드를 운영하는 방법을 간단히 적어보려 합니다.
저는 최근 비트코인 코어를 설치해서 돌리고 있습니다. 사실 2013년 즈음에도 해본 적이 있는데... 당시에는 이래저래 불편한 점이 많았습니다. 하지만 최근에 해보니 기능이 많이 추가되어 저사양 시스템에서도 풀노드를 돌릴 수 있게 되었더군요. 심지어 라즈베리 파이에서도 풀노드를 돌리는게 가능합니다. 한 번 거래하려고 하루 넘게 걸려 40기가 다 받아서 저장해야 하던 시절이 생각나서 격세지감을 느끼네요. 이제는 누구나 SPV가 아닌 풀 노드를 돌릴 수 있는 것 같습니다.
이하 내용은 https://bitcoin.org/en/full-node 링크에 있는 풀 노드 설치에 관한 설명을 참고했으며, 일반 데스크탑에서 저사양으로 풀노드를 운용하기 위한 옵션에 대해 설명하고 있습니다. 아래 설명을 따라하기 전에 해당 링크에 있는 cost and warnings 섹션을 읽어보시는 것을 추천드립니다.
1.먼저 비트코인 클라이언트를 다운로드 받아야 합니다.
https://bitcoin.org/ko/wallets/desktop/windows/bitcoincore/
위 링크에서 윈도우용 비트코인 코어 클라이언트를 다운로드 받으세요.
완전한 풀노드를 돌리려면 현재 약 150기가 정도의 디스크 공간이 필요합니다.
그리고 50KB/s 정도의 속도 및 월간 약 200기가 정도를 처리할 수 있는 네트워크가 필요합니다.
마지막으로 1주일에 6일 정도를 켜놓는 것이 추천되고 있습니다.
여기서는 30~50만원대 저사양 PC에서도 큰 문제 없는 수준으로 세팅해보려 합니다.
2.설치 완료하고 나서 비트코인 코어를 실행하면 블럭을 다운받기 시작할 겁니다.
방화벽이 차단할까요 하는 메세지를 띄울텐데, 차단을 해제해주세요.
그러면 비트코인 코어가 블럭체인 동기화를 시작합니다.
가만히 두면 전체 블럭체인을 다 다운받아 저장하게 되니, 잠시 프로그램을 끄세요.
3.이제 설정파일을 수정해서 저사양 PC에 적합한 형태로 돌아가도록 할 겁니다.
설정은 %UserProfile%\AppData\Roaming\Bitcoin폴더에 있는 bitcoin.conf파일에서 하실 수 있습니다.
새 txt파일을 만든 이후 이름을 bitcoin, 확장자를 .conf로 바꿔주시면 됩니다.
파일 수정은 평범하게 메모장으로 열어서 하시면 됩니다.
https://jlopp.github.io/bitcoin-core-config-generator/
위 링크에서 설정파일을 쉽게 만들 수 있습니다. 저는 이 링크를 참고해서 설정을 만들었습니다.
아래의 텍스트를 복사해서 bitcoin.conf에 붙여넣으시면 됩니다.
#--이하 붙여넣을 내용--
# Generated by https://jlopp.github.io/bitcoin-core-config-generator/
# 비트코인 저사양 설정파일
# This config should be placed in following path:
# %UserProfile%\AppData\Roaming\Bitcoin\bitcoin.conf
# [core]
# Set database cache size in megabytes; machines sync faster with a larger cache. Recommend setting as high as possible based upon machine's available RAM.
# 메가바이트 단위로 데이터베이스 캐시를 지정합니다. 캐시값이 높을수록 동기화가 빠르며, 컴퓨터의 가용 메모리를 참고하여 가능한 높게 설정하는것을 권장합니다.
dbcache=256
# Only download and relay blocks - ignore unconfirmed transaction
# 미확인 거래를 무시하고 생성된 블록만 다운로드/전송하기
blocksonly=1
# Reduce storage requirements by only storing most recent N MiB of block. This mode is incompatible with -txindex and -rescan. WARNING: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, 1 = allow manual pruning via RPC, greater than 550 = automatically prune blocks to stay under target size in MiB).
# 요구 저장공간을 줄이기 위하여 가장 최근의 N 메가(메비)바이트어치 블록만 저장하기(pruning). 이 모드에서는 -txindex 및 -rescan 옵션을 사용 불가능합니다. 주의사항: 이 세팅을 취소할 경우 전체 블록체인을 다시 다운로드받아야 합니다. (기본값=0=pruning 해제, 1=RPC를 통한 수동 pruning 설정, 550 이상=자동으로 저장된 블록체인 용량이 목표값을 넘어가지 않도록 pruning 실행.
prune=4096
# [network]
# Maintain at most N connections to peers.
# 최대 N개의 피어 연결 유지.
maxconnections=20
# Tries to keep outbound traffic under the given target (in MiB per 24h), 0 = no limit.
# 24시간당 업로드 가능한 용량 제한, 메가바이트(정확히는 메비바이트) 단위. 0일 경우 제한 없음.
maxuploadtarget=500
#--붙여넣을 내용 끝--
참고로 위 구성에서는 풀 노드가 아닌 프룬된 노드를 구성했습니다. 위 conf 파일에서 prune관련 내용을 삭제하거나 코멘트 처리하시면 풀 노드로 구성됩니다. 풀 노드와 프룬된 노드의 차이는 블록체인 전체를 가지고 있는가 여부입니다. 블록체인 전체를 가지고 있지 않으므로 프룬된 노드는 모든 거래기록을 제공하지는 못하고 다만 자기가 가지고 있는 부분에 한해서만 제공합니다. 그 외에는 일반 풀 노드와 큰 차이가 없는 것으로 압니다.
4. 위 설정파일을 %UserProfile%\AppData\Roaming\Bitcoin\bitcoin.conf에 붙여넣으세요.
그리고 비트코인 코어를 다시 실행합니다. 그러면 끝입니다. 이제 비트코인 블럭체인을 다운받기 시작할 겁니다.
bitcoin.conf의 설정은 비트코인 코어 gui에서 설정하는 내용에 우선합니다.
설정을 바꾸려면 위 bitcoin.conf파일을 수정해주세요.
이게 끝입니다.
참 간단하죠?
풀 노드를 돌리면서 얻는 이점을 정리해보겠습니다.
1. 풀노드는 비트코인 생존에 필수적입니다. 풀노드는 비트코인 프로토콜에 맞지 않는 이상한 블럭이 채굴될 경우 이를 무시할 수 있지만 블럭체인을 다운받지 않는 SPV클라이언트같은 경우 이런 체크가 없습니다. 따라서 마이너들이 담합해서 특정 블럭 생성 규칙을 강요할 경우 이를 무조건 따르게 됩니다. 흔히 암호화폐가 '신뢰 없는 신뢰'(trustless trust)를 만들어낸다고 하는데... SPV클라는 이런 설명과는 좀 거리가 있습니다.
2. SPV클라이언트는 다른 풀노드에 접속하는 과정에서 개인의 거래정보를 노출시킵니다. 자기만의 풀노드를 돌리면 이런 정보 유출을 걱정하지 않을 수 있습니다. 예를 들어 만약 여러분이 비트코인을 가지고 회사를 운영한다면, SPV클라를 사용할 경우 여러분의 지출과 수입을 전부 연결해서 알아낼 수 있는 노드가 존재하게 된다는 것입니다. 생판 모르는 사람(들)에게 실시간으로 재무제표를 까고 비즈니스를 운영하고 싶은 사람은 없을겁니다.