Outsider's Dev Story

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

기술 뉴스 #74 : 17-03-16

웹개발 관련

  • V8: Behind the Scenes (February Edition feat. A tale of TurboFan) : V8 개발자가 크롬 59부터 제공되는 Ignition과 TurboFan 파이프라인의 내부 접근에 대한 설명을 한 글이다. 기존 V8의 컴파일러는 Crankshaft였는데 이전에는 가장 빠른 성능을 내는 부분에 집중했는데 이는 반대로 느린 코드는 더 느리게 만들었고 그래서 벤치마크에서는 좋지만, 실제 애플리케이션에서는 느린 경우가 많았다. Turbofan을 개발하면서 이 부분을 알게 되었고 TurboFan을 개발할 때는 좋은 성능을 낼 수 있는 범위를 늘리고 나쁜 성능이 나는 부분은 덜 느리게 하려고 했다. 인터프리터인 Ignition으로 TurboFan을 위한 코드생성을 하고 TruboFan이 최적화를 하며 컴파일을 한다. Ignition과 TurboFan 파이프라인으로 많은 성능 개선이 있었지만, 이는 시작인 뿐이고 Crankshaft에서는 불가능했던 성능 개선을 위한 기반이 만들어졌다는데 더 의의가 있다.(영어)
  • Progressive Web App Libraries in Production : 구글에서 PWA를 쉽게 만들수 있도록 지원하는 sw-precache, sw-toolbox, autotrack 등의 라이브러리를 어떻게 적용하는지 설명하는 글이다.(영어)
  • 인스타그램이 React Native로 앱을 만든 과정 : 인스타그램 엔지니어링 블로그에 올라온 React Native at Instagram의 번역 글로 인스타그램에서 React Native를 도입하는 과정을 설명한 글이다.(한국어)
  • Moving Airbnb Search to React : Airbnb가 React를 사용하고 있지만, 검색 페이지는 기존의 Flight로 작성된 채 남아있다가 이번에 React로 갈아타면서 그 과정을 설명한 글이다. 내부에서 ERF라는 실험 보고서 프레임워크를 쓰고 있어서 각 페이지의 통계테이터를 볼 수 있는데 React로 새로 작성한 페이지를 ERF로 A/B 테스트처럼 도입해서 새로 작성한 검색 페이지에 문제가 없는지 검사하고 이 과정에서 고객 반응이 떨어지는 거로 오류를 찾아내면서 변경했다고 한다. 고객 유입을 이끄는 페이지이므로 기술을 바꾸면서도 사용자에게 영향을 주지 않기에 좋은 접근이라고 생각한다.(영어)
  • EV SSL 인증서 발급 과정에서 알게 된 것들 : 리디북스에서 도메인에 회사명이 표시되는 EV SSL 인증서를 발급받는 과정을 설명한 글이다. SSH 인증서를 사는 경우가 아주 많지는 않아서 처음 구매하려면 업체나 종류 등이 많아서 고생하는데 그 절차가 설명되어 있다.(한국어)

그 밖의 프로그래밍 관련

  • Dodging S3 Downtime With Nginx and HAProxy : Sentry의 서버는 댈러스에 있고 버지니아 S3를 파일 스토리지로 사용 중이었는데 성능 향상과 네트워크 비용을 줄이려고 nginx를 S3 객체의 캐시로 사용하고 HAProxy로 nginx를 먼저 보고 실패하면 S3에서 직접 가져오도록 설정해서 사용하고 있었다. 이번에 AWS S3가 장애가 나면서 새 파일을 업로드할 수는 없었지만, 장애로 인한 영향은 최소화했다고 한다. 이 설정은 nginx와 HAProxy만 이용했으므로 애플리케이션 코드는 하나도 필요 없었고 설정하는데 하루 정도가 걸렸다고 한다. Nginx 캐시는 750GB 정도의 디스크를 사용하고 있다.(영어)
  • ANNOUNCING DOCKER ENTERPRISE EDITION : Docker가 기업용 솔루션인 Docker EE(Enterprise Edition)을 발표했다. 기존의 오픈소스 Docker는 Docker CE(Community Edition)으로 이름이 바뀌었고 버전 방식은 기존 1.13 같은 방식에서 출시 시기를 나타내는 YY.MM로 바뀌어 이번 Docker CE 버전은 17.03이다. Docker EE는 Basic, Standard, Advanced로 이용할 수 있고 Docker CE는 매달 릴리스 되는 최신 기능을 가진 Edge와 분기별로 릴리스 되는 Stable 버전으로 나뉜다.(영어)
  • Securing container borders with cloud functions : Meetup.com에서 Docker 레지스트리의 보안을 강화하려고 Docker Auth 프로젝트를 이용해서 인증을 추가하고 사용 중인 클러스터의 IP에서만 다운로드 받게 하려고 Docker Auth와 Google Cloud Functions를 연결한 과정을 설명한 글이다.(영어)
  • AWS Lambda 사용에 관련된 Tip : AWS Lambda를 사용할 때의 팁을 정리한 글인데 메모리와 CPU 사용의 기준이나 warm start의 최적화 방법 등 실제 다양하게 테스트해보고 정리한 유용한 팁이 나와 있다.(한국어)
  • Docker 활용법 - 개발 환경 구성하기 : Docker Compose를 이용해서 개발환경 구성을 쉽게 하는 방법을 설명하는 글이다. Docker만 사용하는 방법을 먼저 설명하고 프로덕션과 달리 개발환경에서 Docker만 사용해서 전체 개발환경을 구성하는 방법의 불편함을 보여주고 이를 Docker Compose가 어떻게 쉽게 해결할 수 있는지 보여주고 있다. Docker Compose를 이 용도만 사용하지 않더라도 개념을 이해하기 좋다.(한국어)
  • Getting Started With WebAssembly in Node.js : Node.js에서 WebAssembly를 사용하는 방법을 설명하고 간단한 팩토리얼 함수 등으로 성능 차이가 얼마나 나는지 비교해 주는 글이다.(영어)
  • Introducing Create React Native App : Facebook이 Expo와 협력해서 React Native 프로젝트를 시작하는 뼈대를 만들 수 있는 Create React Native App을 공개했다. 이는 기본적으로 reate-react-app의 아이디어를 차용한 것으로 Expo 앱 기반으로 Xcode나 Android Studio가 없더라고 React Native 앱 개발을 할 수 있고 윈도우나 리눅스에서도 가능하다. 다만 각 플롯폼별 네이티브 코드가 필요하다면 Create React Native App를 분리한 후 Xcode와 Android Studio를 이용해서 네이티브 코드를 제어할 수 있다.(영어)
  • React Native 안드로이드 성능 최적화 : React Native에서 성능이 안 나오는 경우 왜 성능이 안 나오는지 어떻게 해결하는지를 설명한 글이다. 간단한 카드형 사진앱을 예시로 만들어서 안드로이드에서 왜 속도가 안 나오는지를 설명하고 이를 어떻게 해결하는지 찾아가는 과정까지 설명하고 있다.(한국어)

볼만한 링크

  • AWS 정전 원인, 알고보니 ‘오타’ : 2월 28일 AWS 버지니아 리전에서 발생한 장애가 개발자의 오타 때문에 서버가 내려가면서 발생한 것으로 공개되었다.(한국어)
  • LINE이 이 세계에서 계속 지고 있는 진짜 이유 : 일본 오구라 님이 작성한 글의 번역 글이다. 글쓴이는 라인 서비스의 팬이지만 현재 라인이 잘못하고 있는 부분을 조목조목 지적하고 잇다. 잘못된 콘텐츠의 추가와 탭 구성의 문제 등을 신랄하게 지적하고 있는데 꽤 많은 부분에 수긍한다.(한국어)
  • As a Designer I want better Release Notes : 앱 스토어에서 좋은 릴리스 노트를 어떻게 작성하는 게 좋은지 정리한 글이다. 여러 앱을 비교하면 요약 등을 위에 올리고 어떤 내용이 먼저 오고 어떤 내용을 표시하는 게 좋은지 설명하고 있다. 릴리스 노트를 쓰는 방식을 고민하고 있다면 참고할만하다.(영어)
  • A formal spec for GitHub Flavored Markdown : 사실상 표준이나 다름없는 GitHub의 GFM이 표준을 만들어서 공개했다. 다른 마크다운 표준 추진 프로젝트인 CommonMark에 GFM이 제공하는 기능을 추가해서 표준으로 만들고 이를 GitHub 사이트에 적용했다. CommonMark의 C 구현체인 cmark를 기반으로 기존의 마크다운 파서인 Sundown을 대체하고 1%의 사용자가 다른 결과를 가지게 되어 데이터베이스 차원에서 정규화를 진행해서 새로 적용한 마크다운 파서에서도 결과가 달라지지 않게 했다.(영어)

IT 업계 뉴스

프로젝트

  • Gutenberg : 프린트용 CSS 프레임워크로 웹페이지에서 프린트를 잘할 수 있도록 한다.
  • python-fire : 구글이 공개한 오픈소스로 Python으로 CLI를 만드는 라이브러리.
  • ctop : top처럼 커맨드라인에서 컨테이너를 모니터링할 수 있는 도구.
  • PyCharm Edu : JetBrains에서 공개한 교육용 무료 Python IDE로 처음 프로그래밍을 배우기 편한 기능이 포함되어 있고 강사나 다른 프로그래머가 인터렉티브 강의를 만들어서 배포하면 PyCharm Edu에서 이를 받아서 학습할 수 있다.
  • Expo Sketch : React Native 용 코드나 예시를 간단히 실행해 보고 공유할 수 있는 사이트로 jsFiddle같은 사이트의 React Native 용이다. 자세한 내용은 공지에 나와 있다.
  • Buck : Facebook이 Java로 만든 빌드 도구.
  • botpress : 간단하게 봇을 만들어서 관리할 수 있는 오픈소스 프로젝트.

버전 업데이트

2017/03/17 02:38 2017/03/17 02:38

인터넷이 사랑한 소년

The Internet's Own Boy는 Aaron Swartz에 관한 다큐멘터리이다. 처음 Aaron Swartz에 대해서 알게 된 건 2013년 1월 11일 그가 자살하고 난 뒤였다. 내가 현재 사용하는 많은 기술 기반에 어린 나이였던 Aaron이 참여했음에도 전혀 모르고 있었고 기술로 사회 문제를 해결하고자 했던 그의 노력이 억울한 탄압으로 자살까지 이어진 것이 안타까워서 추모 글을 남겼다.

킥스타터의 다큐멘터리 펀딩

그 뒤에 Kickstarter에서 진행된 Aaron을 추모하는 다큐멘터리 제작 펀딩에 적은 금액이지만 참여를 하게 되었다. 그리고 1년 정도 뒤에 다큐멘터리 제작이 완료되고 영상파일을 받았지만, 당시에는 바빠서 보지 못했고 나중에 보려고 했을 때는 난 후원을 해서 정당하게 영상을 받았음에도 자막이 없다는 걸 깨닫게 되었다. 내 영어로는 법적인 내용도 포함된 다큐멘터리를 자막 없이 볼 수 없어서 보지 못했다. 국내에서 번역하려던 시도가 있었던 걸 보았지만 완성된 걸 보지 못했고 영상이 있음에도 보지 못하는 안타까운 상황에 직면했다.(왜 펀딩할 때는 이 생각을 하지 못했는가!)

다행히도 이 다큐멘터리가 Netflix에 올라와서 며칠 전에 봤는데 너무 재미있게 봤다. 국내 제목은 "누가 애런 슈워츠를 죽였는가?"라는 선정적인 제목인데 난 "인터넷이 사랑한 소년(The Internet's Own Boy)"이라는 원제가 훨씬 더 좋다. "그것이 알고 싶다"에 나올 것 같은 음모론 얘기라기보다는 돈보다는 사회문제를 기술로 해결하는 데 관심 있는 해커의 이야기에 가깝다.

글로나 단편적으로 알고 있던 Aaron에 관한 이야기를 이 다큐멘터리에서는 잘 다뤄준다. 꽤 잘 만들었다는 생각이 든다. 10대부터 코딩을 좋아해서 13세에 RSS 개발에 참여하고 저작권에 관심이 있어서 로렌스 레식이 만든 Creative Commons에 참여하다가 Reddit을 공동 참여하고 이를 매각하지만, 돈에는 별로 관심이 없어서 창업문화를 가진 실리콘밸리를 버리고 정치 지향적인 관심을 두게 된다.

Informatin is power. But like all power, there are those who want to keep it for themselves.

내가 느끼기에 Aaron의 관심사는 지식이었던 것 같다. 얼마 전에 @nacyot님이 책이 온라인 문서의 한계를 만든다는 얘기를 했는데 Aaron도 이런 부분에 관심이 있어서 도서관에 있는 책의 엄청난 지식이 온라인에 없는 것을 안타까워했던 것 같다. 당시에 미국에서는 미 법원의 자료를 보려면 돈을 내야 하는 PACER란 제도가 있었는데 이를 막으려는 사람들이 있었다. 이 PACER의 매출은 1억 2천만 달러나 될 정도였다. 계속 압박하자 일부 도서관에 무료로 PACER의 자료를 무료로 열람할 수 있게 했는데 USB 부대를 만들어서 각 도서관에서 이 자료를 다운로드 받아서 PACER 재활용 사이트에 올리도록 했는데 Aaron도 여기에 참여한다. Aaron은 콘퍼런스에서 다른 사람이 작성한 프로그램을 몇 시간 동안 수정해서 PACER의 자료를 순식간에 엄청나게 다운로드 받게 한다. 이때부터 정부에게 미운털이 박히게 된다.

이후 학술저널에 관심을 가지는데 우리도 다 알듯이 학술자료는 대부분 돈을 내야 볼 수 있다. 이런 연구는 대부분 세금 지원을 받아서 만든 것인데 다시 돈을 내야 볼 수 있다는 것에 분개했고 이 차이는 다시 부유한 사람 혹은 부유한 나라와 그렇지 못한 사람들과의 차별을 만든다고 생각했다. 결국, 알려졌든 이 Aaron은 JSTOR에서 이 저널들 대량으로 다운로드 받고 이 때문에 고소를 당한다.

이후 미국에서 저작권을 핑계로 SOPA라는 법을 발의하게 되는데 당시 온라인에서 엄청 이슈가 되었듯이 저작권을 핑계로 정부가 맘대로 각 웹사이트나 회사를 제어할 수 있는 이상한 법인데 이 법은 국민과 수많은 IT 회사의 반대로 무산되게 된다. 하지만 이 반대 운동의 중심에도 Aaron이 있었다. 미국에 살지 않아도 SOPA가 통과되었다면 웹에 얼마나 큰 혼란이 있었을지는 생각만 해도 끔찍하다. 이후 정부의 무리한 고소 및 추적으로 인해 힘들어하던 Aaron은 세상을 떠나게 된다.

불공평한 법이 존재한다. 우린 계속 그런 법에 순종해야 하는가? 아니면 수정하려고 노력하되 그전까지는 준수해야 하는가? 그렇지 않으면 지체없이 그 법을 넘어서야 하는가?
핸리 데이비드 소로

다큐멘터리의 처음 나오는 문구이다. 이 말이 다큐멘터리에서 말하고자 하는 많은 부분을 담고 있다고 생각한다. 이 다큐멘터리를 보고 오랫동안 생각 안 하고 있던 게 다시 떠오른 기분이었다. 스타트업이 IT에서 중요한 부분이 되었지만, IT의 기반에는 돈을 생각하지 않았던 수많은 사람이 있다. 오픈소스가 그렇듯이 개발자에게 공유란 너무 중요한 가치이고 이를 항상 알고 있다고 생각했지만, 다큐멘터리를 보고 나니 한편으론 너무 당연하게 생각해서 잊고 있었다는 생각도 동시에 들었다. 팀 버너스 리가 www로 창업하지 않고 공유했기 때문에 지금의 웹이 있는 거고 CCL이 있어서 우리는 더 많은 자료를 공유하고 그 위해서 더 진보할 수 있게 되었다.

두 개의 대립되는 시각이 있어요. 다 잘되고 있다고, 인터넷이 자유와 인권을 선사했다고 다 잘 될 거란 시각이 있는 반면 '모든 게 끔찍하다'는 시각도 존재해요. 인터넷을 감시하는 온갖 도구가 만들어졌고 우리가 말하려는 걸 통제하죠. 둘 다 사실이죠. 그렇지 않아요? 인터넷은 두 측면 모두 갖고 있어요. 둘 다 경이롭고 놀라워요. 그중 누가 결국 승자가 되느냐는 우리한테 달려 있어요. 한쪽이 다른 쪽보다 낫다고 말하는 건 무의미해요. 둘 다 사실이니까요. 어느 것을 살려서 활용하느냔 우리의 결정에 달렸죠. 둘 다 존재하니까요. 앞으로도 항상 존재할 거고요.

중간에 나오는 인터뷰에서 Aaron이 한 말이다. 요즘 대한민국의 혼란한 시국에 살고 있어서 그런지 왠지 더 다가오는 말이다.

Aaron Swartz R.I.P

우리가 말하는 해커문화라는 게 기존의 관행을 거부하고 더 낫게 만들려고 하는 것에 기반을 두고 있으니까...

2017/03/04 22:13 2017/03/04 22:13