Outsider's Dev Story

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

기술 뉴스 #87 : 17-10-01

웹개발 관련

  • React, Jest, Flow와 Immutable.js의 라이센스 변경을 알립니다. : 페이스북이 React 등 오픈소스에 BSD 라이센스에 특허를 추가한 라이센스를 적용하고 있어서 커뮤니티에서 계속 이슈가 되고 있었는데 공식적으로 MIT로 공개하기로 발표되었다. React는 16 버전부터 새로운 라이센스로 공개되었다.(한국어)
  • Relicensing the GraphQL specification : 위 내용에 이어 GraphQL 명세도 Open Web Foundation Agreement (OWFa) v1.0로 라이센스가 변경되었고 GraphQL 구현체와 Relay도 MIT로 변경할 것이라고 한다.(영어)
  • Start Your Engines – Firefox Quantum Lands in Beta, Developer Edition : 수년 전부터 Firefox에서 새로운 엔진으로 만들고 있는 Servo에 기반을 둔 프로젝트 Quantum이 베타로 공개되었다. 이 새로운 Firefox는 11월에 공개될 예정이고 Firefox Quantum으로 불릴 예정이다.(영어)
  • 리디스토리 프론트엔드 개발기 : 리디북스에서 리디스토리의 프론트엔드를 개발한 과정에 관한 이야기이다. Django + jinja2 기반으로 작성했던 애플리케이션을 React를 이용한 SPA로 재구축하고 상태관리로 복잡해진 코드를 Redux를 도입해서 바꾼 고민의 과정이 고스란히 나와 있다. 글에는 잘못된 선택에 관한 얘기가 나오지만, 개인적으로는 어차피 모든 상황을 예측할 수는 없으므로 문제를 발견했을 때 논의하고 더 좋은 선택으로 바꾸어서 나아가는 것이 훨씬 좋다고 보기 때문에 그런 변경을 계속하는 개발과정을 읽으면서 조직의 건강함까지 느껴지는 것 같다.(한국어)
  • Introducing GraphQL Playground : Graphcool에서 GraphQL을 브라우저에서 사용할 수 있는 GraphiQL에 기반을 둔 GraphQL Playground를 공개했다. 여기서 설정한 GraphQL 환경을 공유할 수 있고 문서로도 사용할 수 있으며 Apollo 클라이언트용 코드를 생성할 수 있다.(영어)
  • eBay’s Font Loading Strategy : 웹 폰트를 사용하는 경우 웹 폰트를 로딩하는 시간 때문에 발생하는 FOUT, FOIT 문제를 해결하기 위한 접근 방법을 설명한 글이다. FOUT, FOIT를 피하고자 기본은 시스템 폰트를 보여주고 웹 폰트가 이미 캐싱 되어 있는 경우에만 웹 폰트를 보여준다. 이를 위해서 최초 접근할 때는 시스템 폰트를 보여주고 비동기로 웹 폰트를 다운받은 뒤 로컬스토리지에 플래그를 설정하고 페이지가 로딩될 때 이 플래그가 설정되어 있으면 웹 폰트를 보여주는 CSS 클래스를 활성화한다. 이를 구현한 ebay-font도 공개되어 있다.(영어)
  • How JavaScript works: memory management + how to handle 4 common memory leaks : JavaScript에서 메모리를 관리하는 방법에 관해 설명한 글이다. 프로그래밍 언어에서 일반적인 메모리 관리부터 garbage collection이 동작하는 방식까지 차근차근 설명하고 garbage collection이 처리 못 하는 부분을 설명해서 왜 메모리 누수가 발생하는지 이해할 수 있게 도와주고 있다. 마지막으로 일반적으로 메모리 누수를 발생시키는 코드에 대한 예제까지 제공하고 있다.(영어)
  • An event for CSS position:sticky : 헤더를 특정 영역 내에서 sticky로 지정할 때 scroll 이벤트를 추적하는 대신 IntersectionObserver를 이용해서 구현하는 방법을 설명하고 있다. 아직 브라우저 지원 상황이 좋지는 않지만 관심 가질 만한 기능이다.(한국어)
  • Angular Version 5 Release was Delayed : 9월 18일로 예정되어 있던 Angular v5의 릴리스가 연기되어 10월 23일에 릴리스 예정이다.(영어)

그 밖의 프로그래밍 관련

  • Maintainer, Heal Thyself : Babel.js를 이끄는 Henry Zhu가 React Boston 2017에서 발표한 발표자료로 오픈소스 메인테이너 활동하는 것이 얼마나 힘든 일인지를 설명하고 계속 개발을 하기 위해서 관리가 필요하고 개발자들의 도움이 필요하다는 얘기를 하고 있다. "Stop treating open source like a product you purchased and start treating ti like a team you belong to."라는 말이 인상적이다. 영상도 공개되었다.(영어)
  • HashiCorp Terraform Module Registry : Terraform의 모듈을 공유하고 가져다 쓸 수 있는 저장소가 공개되었다.(영어)
  • 오픈 소스 프로젝트를 더 잘 릴리스하는 요령들 : 스포카에서 오픈소스 프로젝트의 릴리스하는 팁을 정리한 글인데 오픈소스가 아니더라도 릴리스를 자동화하는 부분에서 유용한 팁이 많이 담겨있다. 체인지 로그와 버전 관리 방법 부터 패키지 릴리스, 빌드 자동화 및 문서 관리에 대한 부분까지 릴리스할 때 신경 써야 하는 부분이 다 담겨있다. 간단한 프로젝트를 하더라도 이 글에 담긴 내용을 가능한 한 다 적용하는 게 좋다고 생각한다.(한국어)
  • 카카오 신입 공채 1차 코딩 테스트 문제 해설 : 카카오에서 신선한 신입 공채 과정으로 블라인드 코딩 테스트를 9월 16일 온라인으로 진행했는데 이때 나온 코딩 테스트 문제의 의도와 접근방법 등을 설명한 글이다. 이 코딩 테스트는 흥미롭게 보고 있었지만 풀어보진 않았었는데 카카오에서 코딩 문제로 사용한 만큼 어떤 의도로 문제를 만드는지 이해할 수 있는 재미있는 글이다.(한국어)
  • 카카오 블라인드 공채 해킹하기 : 온라인에서 진행된 카카오의 블라인드 공채의 플랫폼을 해킹해서 테스트를 통과하게 만들고 채점데이터를 가져오는 과정을 설명한 글이다. 블라인드 테스트와 풀이가 끝난 시점에서 공개했고 어차피 이런 코드로 통과할 일은 없으므로 온라인 플랫폼에서 이런 해킹과정을 단계별로 풀어써서 재미있는 글이다.(한국어)
  • async_hooks in node.js, illustrated : Node.js 8.x에 실험 단계로 도입된 async_hooks의 사용방법을 설명한 글이다. async_hooks으로 리소스의 생성부터 제거될 때까지를 추적할 수 있고 이를 이용해서 작업이 이뤄지는 시간을 추적하는 간단한 예제코드까지 포함되어 있다. 나도 Node.js 애플리케이션을 더 심도 있게 추적하는 용도로 관심 가지는 기능이다.(영어)
  • Intro to Threads and Processes in Python : Python에서 병렬 처리를 위해 Thread와 Process를 설명한 글이다. 스레드와 프로세스의 기본적인 차이에 관해서 설명하고 Python의 특징을 설명한 뒤에 예제 코드를 통해서 I/O 처리나 CPU 작업에서 어떤 차이가 있는지를 비교하면서 설명해주어 차이점을 이해하기 좋다.(영어)
  • iOS 디자인 가이드라인 번역 - iPhone X : 애플 Human Interface Guidelines의 iPhone X 부분을 번역한 글이다. 아직 iPhone X이 출시되진 않았지만, iOS 앱 개발을 할 때 앞으로는 고려해야 하므로 읽어두어야 할 자료다.(한국어)
  • Hacktoberfest : 10월 중에 GitHub의 오픈소스 프로젝트에 기여하면 티셔츠를 주는 이벤트다. 티셔츠를 받으려면 Pull Request를 10월 중에 4개 만들어야 한다.(영어)

볼만한 링크

  • 더 나은 웹프론트엔드 과정을 고민하며, : 코드스쿼드에서 웹프론트엔드 교육을 하면서 더 좋은 프론트엔드 개발자를 만들기 위해서 고민한 교육 방향과 접근방법을 설명한 글이다. 현재 효과를 보고 있는 부분부터 고민하는 부분까지 잘 나와 있는데 대체로 동의하는 편이다.(한국어)
  • Go: Ten years and climbing : Go 언어가 만들어진 지 10년을 기념해서 Rob Pike가 지난 10년간의 역사를 설명한 글이다. 10년이나 될 줄도 몰랐지만 2007년 처음 Google 캠퍼스에서 Robert Griesemer, Rob Pike, Ken Thompson이 모여서 Go라고 이름 짓고 시작한 과정과 초기에 같이 한 사람들과 과정을 설명하고 있다. 이후 Docker 등에서 도입하면서 Go 언어는 클라우드의 언어(Go is the language of the cloud.)가 되었다고 소개하고 있다.(영어)

IT 업계 뉴스

프로젝트

  • Conventional Commits : 오픈소스 프로젝트에서 커밋 메시지의 형식을 표준화하기 위해 규칙을 정의하는 문서 프로젝트.
  • Jaeger : OpenTracing과 호환되는 분산 추적 시스템으로 Uber에서 만들었다.
  • GitHub Debug : github.com에 연결이 안 될 때 테스트할 수 있는 GitHub Debug 사이트와 도구를 공개했다.
  • draggable : Shopify에서 공개한 JavaScript 드래그 앤드 드롭 라이브러리.
  • Moocha : edX, Coursera, Udacity 등의 mooc 강좌를 검색해주는 사이트.
  • Central Dogma : Line에서 공개한 Git 기반의 고가용성 설정 저장소.
  • micro : 터미널 기반 텍스트 에디터.

버전 업데이트

2017/10/01 20:16 2017/10/01 20:16

HashiConf 17 참석기 : Day 2

이 글은 HashiConf 17 참석기 : Day 1에서 이어진 글이다.



Day 2


Keynote - Kelsey Hightower, Google

Kelsey Hightower가 Kubernetes 쪽에서 유명한 사람으로 알고 있는데 이사람 발표를 처음 보는데 엄청 액티브하고 유쾌한 사람이었다. 발표하면서 장난치면서 발표해서 아주 재미있게 들었다. 이 발표에서는 hashinetes라고 하면서 k8s랑 Consul, Vault를 같이 사용하는 것을 데모로 보여주었다. 내용 자체가 엄청 새롭거나 하진 않았지만, 발표를 워낙 잘해서 재미있었다.

IMG_8957




Making Gossip More Robust with Lifeguard - Jon Currey, HashiCorp

HashiCorp의 리서치 그룹에서 Gossip 프로토콜 관련해서 발표한 논문인 SWIMLifeguard를 설명하는 세션이었다.

Gossip에 관해 잘 모르는데 클라우드에서는 알아두어야 할 부분인 거 같아서 조금이라도 익숙해지려고 들어갔다. Consul에서 헬스체크로 노드를 확인하고 이를 각 노드에 전파하려고 Distributed Fiilure Detector로 SWIM 프로토콜을 구현하고 이 구현체를 memberlist로 공개했다. SWIM과 Lifeguard의 동작 방식에 관해서 설명했는데 열심히 들었지만 여기 정리하기에는 내 지식으로는 무리다. 그래도 재미있게 들었던 발표였다.

Security and Fundamentals at Scale with Vault- Jeff Mitchell, HashiCorp

Vault를 좀 더 잘 쓰고 싶어서 들어간 세션이었는데 실제로는 ACL의 원칙만 설명하고 곧 Sentinel로 넘어가서 Sentinel에서 ACL이 어떻게 강화해서 쓸 수 있는지를 설명했다. 실사용 사례라기보다는 레퍼런스 식 설명 위주라서 나는 좀 별로였다.

Scaling Support with Vagrant and Terraform - Stephen Lechner, Datadog

Datadog에서 고객마다 다른 환경을 위해서 수동으로 Vagrant를 사용하다가 시간이 너무 걸려서 Vagrant Provisioning을 자동화해서 문제를 어느 정도 해결했다. 하지만 너무 많은 Vagrant box를 로컬에서 돌려야 했고 같은 box로 협업하기가 어려워서 Terraform을 도입했다. Vagrant가 가상환경용이라면 Terraform을 클라우드용이고 Vagrant의 자동화 과정과 거의 같은데 Vagrantfile 대신 .tf 파일을 써서 자동화를 했다.

Deep Dive into Vault's AWS Auth Backend Joel Thompson, Bridgewater

AWS에 인증하기 위해 추천하는 방법은 아니지만, 인증을 위해서 AMI에 시크릿을 같이 굽는 방법도 있고 S3에 시크릿을 저장할 수도 있다. 이보다 나은 방법으로 Lyft에서 공개한 Confidant가 있는데 KMS를 훨씬 똑똑하게 사용하는 방법이라 나쁘지 않다.

AWS에는 EC2 instance identity documnet가 있는데 이를 이용해서 Vault에 인증할 수 있지만, 문제점이 많이 있다. 테스트를 못 해봐서 정확히 이해는 못 했지만 AWS의 Auth Protocol을 이용하면 EC2, Lambda, ECS에서 모두 사용할 수 있으므로 가장 좋지만, Vault에 키와 시크릿키를 가지고 있어야 한다. WhoAmI 메서드로 Vault가 중개해서 인증하게 할 수 있는데(sts:GetCallerIdentify) 지금은 이 기능이 추가되어서 Vault에서 Auth protocol을 사용할 수 있게 되었다.(vault auth -method=aws role=MyRole`)

AWS 인증의 실제 사용방법을 기대했는데 원리적인 얘기만 하다가 끝나서 매우 아쉬웠다. 저렇게 설명한 것을 사용하는 여러 가지 패턴이 궁금했는데....

IMG_8924




Who Terraforms Terraform? Inside HashiCorp Operations Engineering - Paul Hinze, HashiCorp

클로징 키노트로 HashiCorp 내부의 얘기였다. 연도별로 출시한 회사와 HashiCorp의 제품의 방향에 관해서 설명했다. Hashicorp 내부는 Altas에서 Terraform Enterprise로 옮겨갔고 Rails, Golang, PostgreSQL, AWS를 쓰고 있다. GitHub에서 Packer로 이미지를 만들어서 배포하고 Terraform으로 인프라를 적용한다. 초반에는 Terraform이 없었기 때문에 Terraform을 만들었을 때 기존 인프라를 가져오려고 import 기능을 만들었다. 테라폼 엔터즈라이즈의 아키텍처는 GitHub에 공개되어 있다.

IMG_8988


도구를 만들 때 오픈소스 커뮤니티를 중요하게 생각하고 있다. 운영팀에서 필요한 기능에 대해서 고민을 하기 시작하면 운영팀과 오픈소스 커뮤니티, 인터넷 사용자들과 같이 논의를 해서 의사결정을 한다. 예를 들어 Consul 운영이 쉽지 않다는 얘기가 운영팀에서 나왔고 각 커뮤니티에서도 같은 문제로 어려움을 겪는 것을 확인하고 autopilot 기능을 추가했다. 이런 피드백 사이클이 아주 잘 구성되어 있다. 이렇게 도구를 만들 때 HashiCorp의 운영팀, GitHub의 커뮤니티, 사용자가 나누어져 있는 것이 아주 중요하다.

에필로그

전체적인 콘퍼런스 만족도는 아주 좋았다. 최근에 아주 좋아하는 회사라 그랬을지도... Module에 대해서 새로운 인식을 가진 것도 큰 수확이지만 콘퍼런스 간다고 이전에는 전혀 몰랐던 엄청난 내용을 듣게 되는 것은 아니다. 키노트는 너무 좋았지만, 세션은 너무 기초거나 이론적인 얘기만 하는 경우도 많았다. 이런 건 콘퍼런스가 안 좋다기 보다는 어쩔 수 없는 부분이 아닌가 싶다. 국내에서도 사실 발표 수준이 떨어진다는 생각은 안 한 지가 오래되어서..

항상 갔다 올 때마다 영어에 대한 자극은 엄청 받고 있다.

IMG_8978


2017/09/30 23:51 2017/09/30 23:51