이더리움 월렛 Ethereum Wallet 블록체인 데이타 싱크 빨리 맞추기
안녕하세요~
오늘은 짬을 내어 코인 개발 연재 내용을 벗어나 잠깐 다른 팁을 드리고자 합니다.
일반적으로 이더리움을 처음 접하면, 보통 이더리움 월렛을 먼저 설치하고 시작하십니다. 왜냐하면 이더리움 홈페이지 에 떡 하니 "Smart money, smart wallet" 이라는 문구로 사람을 현혹시키며(?) "DOWNLOAD Ethereum Wallet" 버튼을 누르라고 되어 있거든요.
(야호! 처음으로 포스팅에 스샷 넣어봤습니다.)
그런데 막상 받아보면 스마트는 개뿔... 첫 실행되어 프로그램이 뜨는 데까지 걸리는 시간이 계속 켜놓은 상태로 거의 하루 정도 걸립니다. 아니 초 단위로 움직이는 스마트한 세상에서 하루라니? 체감상으로는 억겁의 시간을 기다리는 느낌이 듭니다. 게다가 그냥 기다리면 컴퓨터가 슬립 상태로 들어가면서 다운로드가 중간에 끊길 수도 있습니다. 그래서 저는 컴퓨터 슬립 모드 같은 기능을 다 꺼놓고 기다립니다.
(잠깐! 토막 상식)
사실 이것도 많이 빨라진 것입니다. 한달 전까지는 3일 정도 걸렸었습니다. 이더리움 재단에서 2월 14일에 이더리움 클라이언트 프로그램인 geth 를 1.8 로 업그레이드 하면서 fast syncmode 를 최근 256개의 블록을 저장하는 것에서 최근 64개의 블록을 저장하도록 변경하면서 그나마 빨라졌습니다. 인터넷에 돌아다니는 99.9% 의 정보는 fast syncmode 일 때 256개의 블록을 저장한다고 설명하고 있습니다. 하지만 이제는 틀린 정보입니다. 기왕이면 64개로 변경되었다는 내용을 알고 있으시면 좋습니다.
어떤 부분이 얼마나 개선되었는지에 대한 자세한 정보는 여기 를 보시면 됩니다. 재밌는 것은 업데이트 내용에 "The PR also fixes various downloader bugs, which made state sync hang until now." 라면서 싱크가 안 맞고 멈추는(hang) 버그가 있었던 것을 인정하고 있네요. 이제라도 고쳐줘서 고맙다만, 그 동안 행 걸려서 날린 우리들의 시간은 누가 보상해주나요? 😭😭😭
첫 실행이 오래 걸리는 이유는, 실행에 필요한 최소한의 블록체인 데이타가 방대하기 때문입니다. 그래서 이 데이타를 다운로드 받고 싱크를 맞추는 시간이 하루 정도 걸리는 것입니다. 현재 시점에서 제 컴퓨터에 깔린 블록체인 데이타는 78G 정도 되네요. 참고로 블록체인 데이타는 시간이 지날수록 점점 커지기 때문에 하드 용량을 최소한 100G 이상 비워두셔야 합니다.
(어머, 이더리움 월렛은 내 하드 용량 먹는 하마 ^.^)
하여튼, 이런 문제로 "이더리움 지갑 실행이 안되고 멈췄어요~", "블록 싱크가 안 맞아요~", "너무 느려요~" 등등의 질문이 구글에서 어마어마하게 검색됩니다. 물론 저도 초반에 고생 많이 했습니다. 하지만 이제 (마음) 고생하지 마십시오! 몸 고생은 어쩔 수 없음. 싱크가 맞춰지는 단계를 정확하게 알려드리겠습니다.
먼저 이더리움 지갑을 실행하면 다음과 같이 블록을 다운로드 받게 됩니다. 500만이 넘는 숫자 보이시죠? 이 블록들을 다운로드 받는데에 몇 시간 정도 걸립니다.
여기까진 그냥 그런가보다 하고 기다릴 수 있습니다. 문제는 이 다음에 뒷통수를 친다는 것입니다. 블록을 거어의 다 받았을 때 (정확히는 위 '토막 상식' 의 이유로 64개 블록을 남겨놓았을 때) 갑자기 'state entries' 라는 것을 새로 받기 시작합니다.
거의 다 받은 줄 알고 마음이 놓이는 순간 통수를 맞기 때문에 타격이 큽니다.이 숫자가 얼마까지 올라가냐면, 1000만 조금 넘게까지 다운로드(3월 중순 기준임, 점점 커집니다) 받아야 합니다. 이 단계 또한 몇 시간 정도 걸립니다.자~ 이제 끝일까요? 아닙니다. 통수의 통수가 또 기다립니다. 아까 다 받지 않은 최근의 64개의 블록을 드디어 다시 받기 시작하는데요, 이게 아주 천천히 올라갑니다. 왜냐면 64개 이전의 블록은 '다른 노드를 참조할 수 있는 헤더 정보' 만 가지고 있는데 반해, 최근 64개 블록은 '모든 데이타' 를 다 가지고 있어야 하기 때문입니다. 마지막 블록 다운로드 속도가 느린 것은 '버그가 아니다.' 라는 부분을 미리 알아두시면 마음이 편합니다. 버그인 줄 알고 괜히 껐다 켰다 해보다가 시간이 많이 걸리는 경우가 많습니다. 그냥 기다리시면 몇십 분 안에 끝납니다.
휴.. 좀 길었습니다만, 블록 싱크 맞는 부분에 대해 아무리 검색해봐도 질문만 많고 체계적으로 정리된 정보가 없어서 일부러 자세히 써봤습니다. 이제 드디어 싱크 맞추는 속도를 올리는 방법을 알려드리겠습니다.
싱크 속도 올리는 옵션 --node-cache
블록체인 데이타를 다운로드 받을 때 geth 라는 클라이언트 프로그램을 직접 이용하면 --cache
라는 옵션을 통해 싱크 맞출 때의 캐시(cache) 메모리의 크기를 정할 수 있습니다. 이 숫자를 크게 지정하면 다운로드 속도가 확실히 빨라집니다. 재보지는 않았습니다만, 체감상으로는 1.5배에서 2배 정도 빨라지는 것 같습니다.
캐시 값은 본인 컴퓨터 메모리의 절반 정도로 설정하면 적당한 것 같습니다. 너무 크게 하면 프로그램이 뻗을 수 있기 때문입니다. 제 컴퓨터는 메모리가 16G 라서 싱크를 빨리 맞추고 싶을 때 다음과 같이 실행합니다. geth --cache 8192
사실 여기까지는 별로 팁이라 할 것도 없습니다. 스마트 콘트랙트나 코인을 개발하려고 하시는 분은 어차피 geth 를 잘 다룰 줄 아셔야 합니다. 그리고 geth 를 다루게 되면 --cache
옵션은 가장 처음에 접하는 기본적인 옵션입니다.
그런데 이 글을 보시는 분들 중에서는 개발을 안 하시는 일반 월렛 유저도 있으실 것입니다. 그 분들을 위해서는 특별한 팁이 될 수 있습니다. 이더리움 월렛을 실행하면서 옵션을 주는 방법은 거의 알려져 있지 않거든요. 이더리움 월렛을 실행하면서 옵션을 주려면 --node-
뒤에 geth 의 옵션을 그대로 붙여주시면 됩니다. 따라서 우리가 원하는 옵션은 --node-cache
가 됩니다. 예를 들어, 저는 이더리움 월렛을 실행할 때 콘솔에서 다음과 같이 실행합니다.
./Ethereum\ Wallet --node-cache 8192
(MAC 기준)
위와 같이 실행하면 평소처럼 이더리움 월렛 프로그램이 뜨면서 싱크 맞추는 속도는 더 빨라집니다. 저는 MAC 에서만 해봤지만 윈도우에서도 옵션 주는 방법은 똑같을 것입니다. 다만, 콘솔에서 프로그램을 실행할 줄 알아야 하니 OS 를 어느 정도 다룰 줄 아셔야겠네요. (콘솔 사용법 부분은 제 영역이 아닌 것 같아 패스합니다.)
사실 이더리움 블록체인을 빨리 맞추기 위해서 parity 를 이용하시는 분들이 많습니다. "The fastest and most secure way of interacting with the Ethereum blockchain." 이라고 자신들을 소개하는 서비스입니다. Parity 에 대해서는 차후 별도 포스팅으로 블록체인 데이타를 초기화한 후 시간을 재보면서 소개해드리도록 하겠습니다. 😂
그 외, 몇십 메가 정도의 데이타만 가지고 있으면서 모든 데이타를 외부 노드에 의존하는 light syncmode 옵션(참고: 베타 단계임)도 있는데요, 저는 아직 라이트 싱크모드에서 트랜잭션을 실행했을 때 제대로 동작한 적이 한번도 없습니다. 혹시 라이트 싱크모드로 잘 동작하는 방법을 아시는 분은 꼭 댓글 부탁드립니다.
다음 포스팅은 이전 글에서 예고했던
을 올려드리도록 하겠습니다.
어잉?? 글을 쓰다 보니 어느새 또 새벽... 여러분 안녕히 주무세요!
TaeKim(@nida-io) 의 프로젝트를 구경하세요.
팔로우 풀보팅 하였습니다.
좋은글 너무 감사합니다.
감사합니다! 저도 팔로우 하였습니다. 앞으로 잘 부탁드립니다. ^^
으엌ㅋㅋㅋㅋ 이더는 용량잡아먹는 하마 ㅠㅠㅠㅠ
용량때문에 속도랑 범용성에 문제가 있을 수 밖에 없겠네요;;;
뭐 또 워낙 다양한 방식의 코인들도 많아서..
(그만큼 공부할 것도 많..)ㅠㅠ
네 맞습니다. 개발자들은 몰라도 일반 유저들까지 하루종일 싱크 맞길 기다려야 하는 건 너무 큰 허들이죠.
그러다 보니 현재는 대부분 마이이더월렛을 쓰시긴 하겠지만 공식 지갑의 활용도가 떨어지는건 이더리움의 가치를 갉아먹는 부분인 것 같아요.
반드시 빠른 시간 내에 라이트 지갑 기능이 정식 버전으로서 안정적으로 서비스 되어야 할 것 같습니다.
윈도우는 어떻게 해야하나요 ㅠㅠ
커맨드 cmd 창 띄워서 옵션 줘서 실행해보셨어요? 아마 될거에요~ 옵션을 커맨드창 안띄우고 줄 수 있는 방법이 있었던 거 같은데.. 윈도우 안쓴지 넘 오래 되어서 기억이.... ㅜ.ㅜ 한번 찾아볼게요~~
감사합니다... 지금 이리저리 해보고있는데 도저히 안되네요 ㅠㅠ
생각났습니다. 바로가기 아이콘을 만든 후에 바로가기 아이콘 -> 우클릭 -> 속성에 들어가서 원래 있던 .exe 파일 뒤에 --node-cache 옵션을 줘보세요~ ^.^ (집에 윈도우 컴에는 이더리움 지갑이 설치되어 있지 않아서 다른 실행파일로 테스트해봤습니다.)
오늘 윈도우에서 해보니까 잘 됩니다~ 바탕화면에 바로가기 아이콘이 있다면, 아이콘에서 우클릭하여 속성창을 연 후에 '바로가기' 탭으로 가서 '대상' 부분의 맨 뒤에 --node-cache=4096 을 쳐주시면 됩니다. 윈도우는 = 을 붙여주셔야 하네요~
감사합니다. 그리고 혹시 MEW에서 만든 계좌를 ethereum wallet에서도 쓸 수 있나요? keystore파일로 저장해 ethereum wallet에서 불러왔는데 제 잔고가 있음에도 불구하고 0 ether로 뜨네요. 지갑 동기화를 다했는데 말이죠 ㅠㅠ
그래요? 동기화가 끝나면 제대로 보여야 하는데 이상하네요 이더스캔에서는 값이 잘 보이죠?
네. 0.09이더 잘보입니다만... 왜그럴까요...
어제 이더리움 지갑 0.10.0 버전이 릴리즈 되면서, 라이트 싱크 모드를 디폴트로 서비스 하겠다고 발표 되었습니다!! => 릴리즈 내용보기
우와~~ 드디어 안정화 된 것인가? 신나서 지갑을 업데이트 해봤으나... 왜 아직 달라진게 없을까요? ㅜ.ㅜ
지갑을 켜놓고 아무리 시간이 지나도 노드가 붙지 않고 0 peer... 아직 라이트 지갑을 위해 서버를 운영하는 곳이 거의 없어서 그런 것 같습니다.
며칠 더 기다려 보면서 내용 공유해드리겠습니다.