Outsider's Dev Story

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

기술 뉴스 #122 : 19-03-15

웹개발 관련

  • JavaScript Performance Pitfalls in V8 : V8이 JavaScript를 어떻게 최적화하는지를 보여주면서 JavaScript 코드를 작성할 때 주의해야 할 부분을 정리한 글이다. TurboFan이 60KiB 미만의 함수만 최적화를 하므로 너무 긴 함수를 만들지 말고 객체에서 가능하면 필드에 여러 타입을 섞지 말고 숫자 필드를 기본 숫자 타입인 NaN으로 초기화하라고 한다. 개별 팁보다 추적하는 과정과 V8이 동작하는 방식을 설명하는 내용이 더 유용해 보인다.(영어)
  • Chrome Lite Pages - For a faster, leaner loading experience : 2G 등 느린 네트워크를 쓰는 사용자를 위해서 Chrome for Android에서 Lite 페이지라는 기능을 제공한다고 한다. 속도가 느린 경우만 동작하는데 HTTPS 페이지를 구글 서버가 최적화해서 속도를 높여서 데이터 사용량이 90%까지 줄어들고 로딩 속도도 2배 빨라졌다고 한다. 크롬 72에서 추가되는데 Reporting API로 최적화에 관한 내용을 개발자가 확인해 볼 수 있다고 한다.(영어)
  • 스크롤과 관련된 CSS 속성 3가지 : 아직 모든 브라우저에서 지원하진 않지만 유용해 보이는 CSS 속성을 정리한 글로 스크롤 동작을 제어하는 scroll-behavior, 스크롤 영역을 제한하는 overscroll-behavior, 스크롤 스냅의 동작과 사용방법이 잘 나와 있다.(한국어)
  • JIT-less V8 : V8에서 JIT으로 런타임으로 실행 메모리를 할당하기 때문에 속도를 높일 수 있었지만, iOS나 스마트TV 같은 일부 플랫폼은 실행 메모리의 접근 권한을 주지 않고 이를 차단하는 것이 공격 가능성을 줄일 수 있으므로 JIT-less모드를 추가한다고 한다. 자연히 성능 저하가 발생하게 되는데, 어느 정도 성능 저하가 있는지도 같이 보여주고 있다.(영어)
  • 6 JavaScript User Authentication Libraries for 2019 : JavaScript에서 쉽게 인증을 구현할 수 있는 라이브러리 및 서비스를 소개하고 있다. 오랫동안 인기 있던 Passport.js부터 잘 몰랐던 Permit이나 Grant 등의 라이브러리 등의 특징을 간단히 소개하고 있다. 라이브러리 설명 정도이므로 실제 사용방법을 비교하려면 각 저장소를 참고해봐야 한다.(영어)

그 밖의 프로그래밍 관련

볼만한 링크

  • (번역) 기술자의 히포크라테스 선서 : A Hippocratic Oath for Technologists의 번역 글이다. 기술자는 자신들이 만드는 무언가가 세상에 영향을 크게 줄 수 있다는 것을 인지하고 기술자가 가져야 마인드를 선서로 적을 글이다. 당연한 얘기라고 생각할 수 있지만, 꼭 신경 써야 할 마인드라고 생각하고 공감한다.(한국어)
  • 5달러 짜리 로고와 250달러 짜리 로고의 차이점 : What’s the Difference Between $5 Logo and $250 Logo? I Tried Both.의 번역 글로 가격이 비싼 로고를 설명하면서 비누를 판매하는 회사의 로고를 5달러와 250달러로 2개의 로고를 받은 과정을 비교해서 설명하고 있다. 간단히 5달로 받은 로고와 과정을 보여주고 250달러의 로고를 진행하면서 단순히 로고만 받는 것이 아니라 그 과정에서 사업에 대해 더 많이 배우면서 협업하는 시간이었다고 한다.(한국어)
  • '쓰레기를 버리지 마시오.'라는 말을 어떻게 듣게 할까 : 배달의민족에서 고객의 정보를 목적 외에는 사용하지 않도록 안내를 하는 방법을 고민한 과정이 담겨있다. 즉, 마케터가 듣기 싫은 메시지를 어떻게 하면 더 잘 전달할 수 있을까에 대한 고민으로 강력한 경고성 메시지로 공포를 이용하는 방법의 한계부터 마지막으로 사장님들의 입장에서 어떻게 받아들여질지까지 발전해 간 과정이 재미있다.(한국어)
  • 한국 이커머스에는 빌런이 산다 : 해외와는 달리 특이한 형태의 이커머스 시장을 가지고 있는 국내 환경의 문제점 혹은 원인을 정리한 글이다. 주로 이커머스 솔루션으로 가격 비교를 통해서 사용자들이 특정 쇼핑몰이 아니라 가격이 싼 곳을 찾아다니게 되었고 쇼핑몰 통합 솔루션으로 다수의 쇼핑몰에 같은 제품을 등록하면서 쇼핑몰이 달라서 제품은 다르지 않은 문제가 발생했다고 보고 있다. 이커머스 종사자는 아니지만, 사용은 꽤 하는 입장이라 자세히는 모르지만 흥미로운 분석이다.(한국어)
  • 질문을 잘하는 개발자 : 개발자가 질문하는 방법을 정리한 글로 간단하게 질문을 하기 전에 검색하고 질문을 받는 사람이 답변하기 쉽게 컨텍스트를 맞추는 작업에 관해서 설명한다. 질문을 할 때 상황을 정의하고 어디까지 이해하고 시도해봤는지 정리하는 습관은 질문뿐 아니라 개발자로서의 실력에도 큰 도움이 된다고 생각한다.(한국어)

IT 업계 뉴스

프로젝트

  • nginxconfig.io : nignx 설정 파일을 만들어 주는 웹사이트.
  • GitHub Personal website generator : GitHub 활동을 기반으로 기여한 프로젝트나 관심사를 모아서 웹사이트로 만들어 주는 프로젝트.
  • ArchiveBox : 웹사이트를 HTML, PDF, 이미지 등으로 직접 아카이빙할 수 있는 Python 프로젝트.
  • graphql-hooks : GraphQL 클라이언트.
  • Zero Server : 설정 없이 파일 기반으로 라우팅해 주는 Node.js 웹프레임워크.

버전 업데이트

2019/03/15 19:29 2019/03/15 19:29

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