금요일, 3월 29, 2019

[B급 프로그래머] 3월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: #deadlock via @navsis)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB

토요일, 3월 23, 2019

[독서광] 코어 이더리움 프로그래밍

'코어 이더리움 프로그래밍' 책을 사놓고 틈틈히 읽긴 했지만 진도를 뽑지 못하다가 역시 뭔가 해야하는 상황이 되니까 빠르게 진도를 낼 수 있었다. 독자 여러분을 위해 독후감을 정리해보았다.

이 책은 크게 두 부분으로 나뉘어져 있다. 전반부는 블록체인 개괄과 이더리움 플랫폼 분석이며, 후반부는 이더리움 개발 환경 구축에 이은 스마트 컨트랙트 제작과 DApp 개발이다. 따라서 책의 예상 독자는 개발자라는 사실을 쉽게 예상할 수 있다. 이더리움 플랫폼 분석 부분은 아키텍처와 소스 코드 분석이 중간중간 나오므로 조금 복잡한 오픈소스 분석 경험이 있는 개발자에게 적당하다는 느낌이고, 스마트 컨트랙트 제작은 따라하기 식이므로 프로그래밍 경험이 있는 개발자라면 어렵지 않게 적응할 수 있게 되어 있다. 단순한 스마트 컨트랙트를 작성해서 구동한 다음에 점점 기능과 보안 요소를 추가하는 방식으로 되어 있으므로, 처음부터 어마무시한 스마트 컨트랙트 코드를 나열하는 시중에 흔한 튜토리얼이나 개발서에 비해서는 자습하기가 유리하다는 장점이 있다. 다른 장점으로 이 책에 나오는 아키텍처와 데이터 흐름을 표시하는 그림과 표가 참 좋다고 느껴지는데, 이더리움 프로그래밍 관련 참고 자료를 만들거나 발표 자료를 만드는 분들이라면 본전을 뽑고 남을 것이다.

하지만 솔리디티 버전이 0.4.18만 되어도 이 책 예제로 나오는 코드 컴파일이 제대로 되지 않으므로 프로그램을 수정 조금 신경을 써야 하며(본문에 0.4.16과 0.4.18이 혼재되어 있으므로 더욱 혼란스러울지도 모르겠다), EVM에 대한 설명이 부족해서 다른 글과 문서를 참고해야 하며, 솔리디티 문법에 대한 소개 부분도 간략하므로 다른 문서를 봐야 하며, ERC20 토큰 설명(ERC223을 다뤘으면 더욱 좋을뻔 했다)이 부족하다는 단점이 있긴 하다.

이더리움 연구회에서 만들어진 책이므로 다른 책과 비교해서 자료가 풍부하다. 이 책 내용을 토대로 만들어진 교안인 코어 이더리움, 예제로 배우는 스마트 컨트랙트 프로그래밍(PDF, 112페이지) 자료, DApp 실습, 실습을 위한 깃허브 페이지, <코어 이더리움 프로그래밍> 리포지토리를 참조하면 이 책에서 다루는 수준과 범위를 알 수 있으므로 책과 함께 참고하시면 좋겠다.

결론: 약간의 단점만 극복할 수 있으면 개발자에게 추천한다. 사소한 소망이긴 하지만... 출간된지 벌써 1년이 다 되어가므로, 업그레이드 된 2판이 나오기를 기대한다. ;)

EOB

월요일, 3월 18, 2019

[B급 프로그래머] 3월 2주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

시장조사기업 CIRP가 공개한 미국 내 스마트스피커 도입 대수가 17년 12월 3700만대, '18년 9월 5300만대, '18년 12월 6600만대로 증가 중. Amazon Echo 70%, Google Home 24%, Apple HomePod가 6% 순. 아마존의 힘.. via @ehddn1
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: 사이먼사이넥 왜 리더는 마지막에 먹는가 Simon Sinek Why Leaders Eat Last 1
EOB

토요일, 3월 16, 2019

[B급 프로그래머] (스택오버플로우) 구글이 JSON 응답에 while(1);을 붙여 보내는 이유는?

오늘도 자바스크립트 공부를 하다가 알게된 재미있는 사실을 하나 공유드린다. Why does Google prepend while(1); to their JSON responses?라는 글을 읽다 보니 다음과 같은 JSON 코드가 눈에 보였다.

잠깐 JSON 결과에 생뚱맞게 while(1);을 붙이는 이유를 생각해보자. 당장 떠오르는 대답은 eval()로 JSON 결과를 해석하는 과정에서 엉뚱한 문제가 생길 가능성이다. 하지만 다른 가능성은 없을까?

스택오버플로우 대답을 읽어보니 흥미로운 시나리오가 존재했다. 다들 잘 알고 계시겠지만, 기본적으로 CORS(Cross Origin Resource Sharing) 방어 덕분에 외부에서 가져온 리소스에서 내부 데이터에 접근할 방법은 없다. 하지만 JSON 컨텐츠를 요청하기 위해 script 태그를 사용할 때, 외부 공격자의 코드 내부에서 JSON을 자바스크립트처럼 실행할 수 있는 문제가 있다(ES5까지 지원하는 대다수 브라우저). 따라서, 공격자는 객체 생성 과정에서 사용될 배열이나 객체 생성자나 다른 메소드를 슬쩍 바꿔서 JSON으로 넘어오는 데이터를 가로채는 방법으로 손쉽게 중요한 정보를 얻을 수 있다. 일례로 JSON 데이터가 gmail에서 가져온 25개 이메일 정보라고 생각해보라!

자, 그러면 올바른 프로그래밍 기법은 무엇일까? 다음과 같은 세 가지 사항을 염두에 두기 바란다.

  • JSON이 결코 실행 가능한 형태가 되지 않게 만든다
  • JSON이 결코 유효한 자바스크립트가 되지 않게 만든다
  • 주의: 유효한 JSON이지만 유효하지 않은 자바스크립트가 되게 만든다(참고: AJAX Security Cheat Sheet)

결론: 열 명이 도둑 한 명 못 막는다는 말이 있듯이 보안은 늘 어렵다. 항상 주의에 주의를 거듭하자.

EOB

토요일, 3월 09, 2019

[B급 프로그래머] 3월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: Library Unboxing via @ismonkeyuser)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
보너스: This bus is great for taking a trip around the local area https://redd.it/ay92gt via @gorey_software
EOB

토요일, 3월 02, 2019

[B급 프로그래머] (파이썬) 사용하지 않는 기능조차 여러분을 깨물 수 있다

지난번 자바스크립트 문제에 이어 오늘은 파이썬 공부를 하다가 찾은 재미있는 글이 있어 독자 여러분들께 소개한다. 먼저 다음 코드의 실행 결과는 무엇일까?

  1. 42를 출력
  2. SyntaxError 42행
  3. KeyError 3행

다행히 이번에는 바로 맞추긴 했는데, 이 문제를 풀려면 파이썬 3.6에 대해 조금 알고 있어야 하는 내용이 있다. 바로 '타입 힌트'다. 타입 힌트는 프로그래머들이 변수에 주석을 달아 IDE, 문서 생성기, 정적 분석기와 같은 도구가 활용하게 만드는 기능이다. 그렇다면 위 문제와 타입 힌트가 어떤 상관이 있을까?

타입 힌트를 달기 위해서는 "x: int"와 같은 형식을 따른다. 개발자가 x를 int라고 지정했으므로 타입 검사를 진행하는 정적 분석기가 상당히 정확하게 문제(예: x에 문자열을 대입하는 경우)를 찾아낼 수 있게 된다. 이제 "ages['John']: 42"에 주목하자. 파이썬은 ages['John']의 타입을 42로 정의한다. 타입이 42라고??? 말이 안 되지 않은가? 하지만 애노테이션 표현식에 따르면 대입 가능한 타겟이면 그냥 받아준다(헉!). 따라서 컴파일러는 아무 일도 하지 않고 넘어가버린다. 결국 ages 딕셔너리에는 'John'이라는 키에 대응하는 값이 없기 때문에 KeyError가 발생하게 된다.

수정 내역은 이미 아시겠지만, 그래도 완결성을 위해 실어놓았다.

보너스: 지금 이 모든 가정은 파이썬 3.6 이상을 가정한다. 만일 파이썬 2의 경우라면 어떻게 될까? 이미 답을 알고 계시겠지만 그래도 한 번 더 생각해보면 좋겠다.

EOB