Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

GoLand에서 delve로 원격 디버깅하기

작년에 이더리움 연구회 스터디에 참가하면서 이더리움의 소스를 봐야 할 일이 있었다. 코드량이 상당하고 한 번에 다 파악할 수 없으므로 이더리움을 동작해 보면서 필요한 부분을 살펴보려고 Geth와 Delve를 사용한 이더리움 컨센서스 라이프사이클 디버깅을 참고했다.(사실 작년에 했던 건데 미루다가 이제야 정리한다.)

이 글에서는 delve와 연결해서 디버깅하는 과정을 설명하고 있는데 나는 GoLand를 사용하고 있었으므로 GoLand에서 디버깅을 하고 싶었다. 보통은 GoLand내에서 바로 되는데 Go도 잘 모르고 이더리움은 더욱 몰랐기 때문에 헤매다가 GoLand에서 원격 디버깅을 하는 방법을 찾아서 윗글의 delve와 연동해서 디버깅을 해봤다.

Geth와 Delve를 사용한 이더리움 컨센서스 라이프사이클 디버깅에 나온 대로 이더리움 프로젝트를 설정하고 테스트용 Private Network를 준비한다.

GoLand에서 Run/Debug Configurations를 실행해서 "Go Remote"를 2345 포트로 추가한다.

GoLand의 Run/Debug Configurations 설정

터미널에서 아래 명령어로 delve로 이더리움을 실행한다.

$ cd cmd/geth
dlv debug --headless --listen=:2345 --api-version=2 -- --networkid=1234 --datadir=~/golang/src/github.com/ethereum/go-ethereum/consensus-debug/miner

이제 GoLand에서 앞에서 Go Remote로 설정한 Debug를 실행한다.

GoLand의 Run 메뉴

GoLand에서 소스코드에 Breakpoint를 지정해 놓고 필요한 대로 멈추거나 진행하면서 각 변수의 값을 확인할 수 있다.

GoLand에서 디버깅하는 화면

위 화면은 consensus/ethash/ethash.goNew 메서드에서 멈춘 화면이다. delve도 이때 처음 써봤지만 익숙하지 않은 이더리움 등의 코드를 파악할 때는 IDE의 도움을 받는 것이 더 편한 것 같다.

2019/03/09 21:35 2019/03/09 21:35

기술 뉴스 #121 : 19-03-01

웹개발 관련

  • progressive react : React로 만든 애플리케이션의 성능을 개선하는 방법을 설명하는 글이다. HTTP Archive의 데이터를 통해 점점 모바일 사이트의 용량이 점점 커지고 있음을 보여주고 React에서 성능을 측정하는 방법을 자세히 설명하고 있다. 렌더링 횟수를 줄이고 코드 스프릿팅을 하고 캐싱을 적절하게 하는 등 페이지의 속도를 높이기 위해 할 수 있는 방법이 잘 나와 있다.(영어)
  • Puppeteer is my new dev server : web.dev 사이트 코드의 일부가 Google 내부에 있으므로 기여자들이 로컬에서 사이트를 실행해 볼 수 없는 문제를 Puppeteer를 개발 서버로 이용한 접근을 설명하고 있다. Puppeteer에서 web.dev의 페이지를 불러온 뒤에 로컬의 변경사항을 불러와서 페이지에 보여준다.(영어)
  • Google Chrome Labs의 Quicklink로 웹페이지 UX 향상시키기 : 웹사이트가 idle 상태일 때 다음 페이지의 에셋을 미리 로딩해서 속도를 빠르게 하는 quicklink의 사용방법을 설명하고 있다. 간단한 예제도 제공하고 있다.(한국어)
  • don’t get clever with login forms : 1Password같은 비밀번호 관리자나 크롬의 비밀번호 관리자가 많이 보급되면서 로그인 폼을 어떻게 구성해야 하는지 설명하는 글이다. 모달로 만들어서 링크를 사용할 수 없거나 일부 필드를 동적으로 숨기거나 이메일로 매직 링크를 사용하는 경우 오히려 사용자가 더 불편하니 이런 로그인 폼을 만들지 않기를 권하고 있다.(영어)

그 밖의 프로그래밍 관련

  • LINE의 OpenJDK 적용기: 호환성 확인부터 주의 사항까지 : 오라클 JDK의 라이센스 변경으로 1월부터는 무료로 오라클 JDK의 업데이트를 받을 수 없으므로 다른 대안을 선택해야 하는데 Line에서 OpenJDK로 어떻게 전환했는지를 설명한 글이다. 갈아타기 위해 고려한 부분부터 여러 OpenJDK 배포판이 안정적이고 호환되는지 확인하기 위해 테스트한 방법까지 자세히 정리되어 있다. Line은 레드햇의 OpenJDK를 선택했는데 선택한 이유까지 나와 있어서 각 회사나 조직에서 합당한 OpenJDK를 선택할 수 있도록 도와주는 글이다.(한국어)
  • Shopify 아키텍처의 진화 : Shopify가 공개한 자료를 바탕으로 모노리틱 아키텍쳐에서 Kubernetes로 변경되는 과정을 정리한 글이다.(한국어)
  • How To Organize Express Controllers For Large Codebases : Node.js의 Express 웹 프레임워크에서 프로젝트가 커졌을 때 컨트롤러를 관리하는 방법을 정리한 글이다. 라운팅 파일을 따로 만들어서 관리하면서 로직만 수행하는 액션 파일과 밸리데이션 역할을 하는 미들웨어를 별로도 구성해서 관리하고 권한 관리 파일을 따로 만들어서 라우팅할 때 적용할 수 있도록 구성했다.(영어)

볼만한 링크

  • 글쓰기 가이드는 어떻게 써야 할까 : 우아한 형제들에서 톤앤매너를 맞추기 위해 사내 구성원에게 배포할 글쓰기 가이드를 만들면서 고민한 과정이 적힌 글이다. 가이드의 필요성부터 가이드를 작성하기 시작하면서 글쓰기에 대해 너무 많은 내용을 담다가 어떤 태도로 글을 써야 하는지로 방향을 잡고 가이드를 배포해서 사내에 공유한 내용이 적혀있다. 이분의 글은 고민의 과정이 잘 나와 있어서 도움이 된다.(한국어)
  • 개발자 면접 질문을 공개합니다 : 룩핀에서 Rails 개발자 면접에 사용하는 질문 목록을 공개하면서 왜 공개하게 되었는지를 설명한 글이다. 면접에서 원하는 사람을 뽑기 위해서 원하는 것이 무엇인지를 알려주기로 했고 지원자고 짧은 면접시간 동안 역량을 최대한 보여줄 수 있기를 기대한다고 한다. 지원자가 당황하지 않고 충분한 정보를 가진 상태에서 면접을 볼 수 있게 하는 방식에 공감하는 편이다.(한국어)

IT 업계 뉴스

프로젝트

  • k3s : Rancher에서 만든 경량 Kubernetes.
  • Atlantis : Terraform을 GitHub, GitLab, BitBucket의 Pull Request와 연동해서 자동으로 plan을 실행하고 확인이 끝나면 apply를 해주는 애플리케이션.
  • Github Actions : 사람들이 만든 GitHub Actions를 공유하고 검색할 수 있는 사이트.
  • Simple Icons : 유명 브랜드의 SVG 아이콘을 모아놓은 사이트.

버전 업데이트

2019/03/01 22:49 2019/03/01 22:49