[팁] 이더리움 월렛 Ethereum Wallet 블록체인 데이타 싱크 빨리 맞추기

in kr-dev •  7 years ago  (edited)

이더리움 월렛 Ethereum Wallet 블록체인 데이타 싱크 빨리 맞추기

안녕하세요~

오늘은 짬을 내어 코인 개발 연재 내용을 벗어나 잠깐 다른 팁을 드리고자 합니다.

일반적으로 이더리움을 처음 접하면, 보통 이더리움 월렛을 먼저 설치하고 시작하십니다. 왜냐하면 이더리움 홈페이지 에 떡 하니 "Smart money, smart wallet" 이라는 문구로 사람을 현혹시키며(?) "DOWNLOAD Ethereum Wallet" 버튼을 누르라고 되어 있거든요.

스크린샷 2018-03-21 오전 1.21.23.png

(야호! 처음으로 포스팅에 스샷 넣어봤습니다.)

그런데 막상 받아보면 스마트는 개뿔... 첫 실행되어 프로그램이 뜨는 데까지 걸리는 시간이 계속 켜놓은 상태로 거의 하루 정도 걸립니다. 아니 초 단위로 움직이는 스마트한 세상에서 하루라니? 체감상으로는 억겁의 시간을 기다리는 느낌이 듭니다. 게다가 그냥 기다리면 컴퓨터가 슬립 상태로 들어가면서 다운로드가 중간에 끊길 수도 있습니다. 그래서 저는 컴퓨터 슬립 모드 같은 기능을 다 꺼놓고 기다립니다.

(잠깐! 토막 상식)

사실 이것도 많이 빨라진 것입니다. 한달 전까지는 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 이상 비워두셔야 합니다.

스크린샷 2018-03-21 오전 1.56.32.png

(어머, 이더리움 월렛은 내 하드 용량 먹는 하마 ^.^)

하여튼, 이런 문제로 "이더리움 지갑 실행이 안되고 멈췄어요~", "블록 싱크가 안 맞아요~", "너무 느려요~" 등등의 질문이 구글에서 어마어마하게 검색됩니다. 물론 저도 초반에 고생 많이 했습니다. 하지만 이제 (마음) 고생하지 마십시오! 몸 고생은 어쩔 수 없음. 싱크가 맞춰지는 단계를 정확하게 알려드리겠습니다.

  1. 먼저 이더리움 지갑을 실행하면 다음과 같이 블록을 다운로드 받게 됩니다. 500만이 넘는 숫자 보이시죠? 이 블록들을 다운로드 받는데에 몇 시간 정도 걸립니다.
    스크린샷 2018-03-21 오전 2.12.17.png

  2. 여기까진 그냥 그런가보다 하고 기다릴 수 있습니다. 문제는 이 다음에 뒷통수를 친다는 것입니다. 블록을 거어의 다 받았을 때 (정확히는 위 '토막 상식' 의 이유로 64개 블록을 남겨놓았을 때) 갑자기 'state entries' 라는 것을 새로 받기 시작합니다. 거의 다 받은 줄 알고 마음이 놓이는 순간 통수를 맞기 때문에 타격이 큽니다. 이 숫자가 얼마까지 올라가냐면, 1000만 조금 넘게까지 다운로드(3월 중순 기준임, 점점 커집니다) 받아야 합니다. 이 단계 또한 몇 시간 정도 걸립니다.

  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 기준)

스크린샷 2018-03-21 오전 3.15.56.png

위와 같이 실행하면 평소처럼 이더리움 월렛 프로그램이 뜨면서 싱크 맞추는 속도는 더 빨라집니다. 저는 MAC 에서만 해봤지만 윈도우에서도 옵션 주는 방법은 똑같을 것입니다. 다만, 콘솔에서 프로그램을 실행할 줄 알아야 하니 OS 를 어느 정도 다룰 줄 아셔야겠네요. (콘솔 사용법 부분은 제 영역이 아닌 것 같아 패스합니다.)

사실 이더리움 블록체인을 빨리 맞추기 위해서 parity 를 이용하시는 분들이 많습니다. "The fastest and most secure way of interacting with the Ethereum blockchain." 이라고 자신들을 소개하는 서비스입니다. Parity 에 대해서는 차후 별도 포스팅으로 블록체인 데이타를 초기화한 후 시간을 재보면서 소개해드리도록 하겠습니다.

그 외, 몇십 메가 정도의 데이타만 가지고 있으면서 모든 데이타를 외부 노드에 의존하는 light syncmode 옵션(참고: 베타 단계임)도 있는데요, 저는 아직 라이트 싱크모드에서 트랜잭션을 실행했을 때 제대로 동작한 적이 한번도 없습니다. 혹시 라이트 싱크모드로 잘 동작하는 방법을 아시는 분은 꼭 댓글 부탁드립니다.

다음 포스팅은 이전 글에서 예고했던

을 올려드리도록 하겠습니다.

어잉?? 글을 쓰다 보니 어느새 또 새벽... 여러분 안녕히 주무세요!


TaeKim(@nida-io) 의 프로젝트를 구경하세요.

  • 니다닷컴 : 쉽게 읽히는 "한글 멘트 그대로의 링크" 를 만들어드립니다. 마케팅 콘텐츠, 홈페이지, 쇼핑몰, 블로그, 청첩장, 포트폴리오 등의 링크에 사용하여 가독성과 클릭율을 높여보세요.
  • 케이스타코인 : 830만 팔로어 전세계 1위 한류 미디어 KStarLive 와 함께 만든 한류 플랫폼에 사용되는 코인입니다. 스팀잇처럼 커뮤니티 활동을 하면서 코인을 얻을 수 있으며, 한류 콘텐츠 구매, 공연 예매, 한국 관광 관련, 기부 및 팬클럽 활동 등에 사용될 계획입니다.
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

팔로우 풀보팅 하였습니다.
좋은글 너무 감사합니다.

감사합니다! 저도 팔로우 하였습니다. 앞으로 잘 부탁드립니다. ^^

으엌ㅋㅋㅋㅋ 이더는 용량잡아먹는 하마 ㅠㅠㅠㅠ
용량때문에 속도랑 범용성에 문제가 있을 수 밖에 없겠네요;;;
뭐 또 워낙 다양한 방식의 코인들도 많아서..
(그만큼 공부할 것도 많..)ㅠㅠ

네 맞습니다. 개발자들은 몰라도 일반 유저들까지 하루종일 싱크 맞길 기다려야 하는 건 너무 큰 허들이죠.

그러다 보니 현재는 대부분 마이이더월렛을 쓰시긴 하겠지만 공식 지갑의 활용도가 떨어지는건 이더리움의 가치를 갉아먹는 부분인 것 같아요.

반드시 빠른 시간 내에 라이트 지갑 기능이 정식 버전으로서 안정적으로 서비스 되어야 할 것 같습니다.

윈도우는 어떻게 해야하나요 ㅠㅠ

커맨드 cmd 창 띄워서 옵션 줘서 실행해보셨어요? 아마 될거에요~ 옵션을 커맨드창 안띄우고 줄 수 있는 방법이 있었던 거 같은데.. 윈도우 안쓴지 넘 오래 되어서 기억이.... ㅜ.ㅜ 한번 찾아볼게요~~

감사합니다... 지금 이리저리 해보고있는데 도저히 안되네요 ㅠㅠ

생각났습니다. 바로가기 아이콘을 만든 후에 바로가기 아이콘 -> 우클릭 -> 속성에 들어가서 원래 있던 .exe 파일 뒤에 --node-cache 옵션을 줘보세요~ ^.^ (집에 윈도우 컴에는 이더리움 지갑이 설치되어 있지 않아서 다른 실행파일로 테스트해봤습니다.)

오늘 윈도우에서 해보니까 잘 됩니다~ 바탕화면에 바로가기 아이콘이 있다면, 아이콘에서 우클릭하여 속성창을 연 후에 '바로가기' 탭으로 가서 '대상' 부분의 맨 뒤에 --node-cache=4096 을 쳐주시면 됩니다. 윈도우는 = 을 붙여주셔야 하네요~

KakaoTalk_Photo_2018-03-23-17-30-18.png

감사합니다. 그리고 혹시 MEW에서 만든 계좌를 ethereum wallet에서도 쓸 수 있나요? keystore파일로 저장해 ethereum wallet에서 불러왔는데 제 잔고가 있음에도 불구하고 0 ether로 뜨네요. 지갑 동기화를 다했는데 말이죠 ㅠㅠ

그래요? 동기화가 끝나면 제대로 보여야 하는데 이상하네요 이더스캔에서는 값이 잘 보이죠?

네. 0.09이더 잘보입니다만... 왜그럴까요...

어제 이더리움 지갑 0.10.0 버전이 릴리즈 되면서, 라이트 싱크 모드를 디폴트로 서비스 하겠다고 발표 되었습니다!! => 릴리즈 내용보기

우와~~ 드디어 안정화 된 것인가? 신나서 지갑을 업데이트 해봤으나... 왜 아직 달라진게 없을까요? ㅜ.ㅜ

지갑을 켜놓고 아무리 시간이 지나도 노드가 붙지 않고 0 peer... 아직 라이트 지갑을 위해 서버를 운영하는 곳이 거의 없어서 그런 것 같습니다.

며칠 더 기다려 보면서 내용 공유해드리겠습니다.