Outsider's Dev Story

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

HashiConf 2018 참석기 #1

작년에 HashiConf에 처음 참석해 보고 올해도 갈만한 콘퍼런스를 찾아보다가 따로 눈에 들어오는 콘퍼런스도 없었고 작년에 재밌어서 올해도 HashiConf 2018에 참석하기로 했다. 막상 일정을 잡다 보니 바로 전주에 GitHub Universe가 있어서 티켓을 구매하고 참석을 했다.

Welcome Reception

hashiconf-2018-d0-01


콘퍼런스는 샌프란시스코 Fairmont 호텔에서 열렸는데 유니온 스퀘어에서 몇 블록만 올라가면 있어서 숙소에서 가깝고 편했다.(하지만 언덕길이라 올라갈 때 힘들었다.)

hashiconf-2018-d0-02


행사 전날 오후에 네트워킹 파티가 있어서 참가했고 이때 참가자 등록까지 다 받았다.

hashiconf-2018-d0-03


작년과 마찬가지로 에코백을 줬는데 디자인은 작년보다 맘에 든다. 기념품은 티셔츠 등이 있는데 특별한 것은 없었다.

hashiconf-2018-d0-04


호텔 1층에 야외 테라스가 있고 이곳에서 핑거푸드와 주류를 제공하고 있었다. 이후 여러 네트워킹 파티가 이곳에서 진행되었다. 호텔 로비가 있는 1층에서 참가자 등록을 받고 3개의 트랙은 1층, 지하 1층, 지하 2층에 나누어서 진행되었다. 모든 행사가 호텔 시설 내에서 다 진행되었고 호텔이 이런 행사를 많이 하는데 트랙을 진행하는 곳 말고도 쉬거나 네트워킹을 할 수 있는 여러 장소가 있었다. 한국 HashiCorp 분도 오셔서 같이 있다가 CEO인 Dave McJannet를 만나서 인사를 나눴는데 그동안 코파운더만 알고 있고 정작 CEO는 모르고 있었다는 생각이 들었다.

Day 1

Opening Keynote

hashiconf-2018-d1-01


키노트 처음에는 HashiCorp의 코파운더이면서 Co-CTO인 Armon Dadgar이 나와서 커뮤니티의 성장에 관해 얘기했다. 작년 HashiConf가 800명 규모였는데 올해는 1200 이상의 규모라고 하고 유저그룹도 38개 국가, 74개 도시에 있다고 했다. HashiCorp의 6개 제품군에서 43,000개 이상의 커밋이 이뤄졌고 80번 릴리스했고 작년 2,200만 다운로드되었는데 올해는 벌써 4,500만 다운로드되었다고 한다. 직원도 작년에는 130명 정도였지만 지금은 320명이 넘는다고 한다.

HashiCorp Learn 웹사이트를 소개했다. 지금은 Vault만 제공하지만 4분기에 Terraform, Consul, Nomad도 지원할 예정이라고 한다.

hashiconf-2018-d1-02


첫 제품 소개는 Vault였는데 Vault는 민감한 데이터를 어떻게 다룰 것인가에 대한 고민으로 2015년 4월에 0.1에 릴리스했고 이후 데이터의 유출을 막으려고 Dynamic secret을 도입해서 필요한 때 클라이언트마다 다른 인증정보를 제공하기 시작했다. 이는 SQL에서 시작했는데 이후 NoSQL, 클라우드, 앱에도 똑같이 적용하기 시작했고 2016년 Vault 엔터프라이즈를 공개했다.

이날 Vault 1.0 Preview를 공개했다. 1.0에는 자동 unseal이 제공되어서 Vault를 내렸다 올렸을 때 unseal 키를 여러 개 제공해서 Vault를 여는 과정을 자동화할 수 있다. 운영할 때 꽤 귀찮은 부분인데 데모는 클라우드에서 보여주었는데 실제 unseal이 되는 조건은 확인해 봐야겠다. 그리고 짧은 주기를 가지고 클라이언트에서 암호화된 Batch 토큰이 추가되어 서버리스나 배치 처리에서 활용할 수 있게 되었다. 오픈 API 스펙이 추가되었고 스토리지 백엔드간에 마이그레이션이 추가되었다.

이어서 HashiCorp Research를 소개하면서 Vault Advisor를 소개했다. 보안 정책의 경우 너무 간단하게 작성하면 위험이 커지고 위험이 낮아지려면 복잡한 정책을 관리하기가 어려우므로 수긍할만한 위험에 대응할 수 있는 정책이 필요하다. Vault Advisor는 피드백 루프를 가지면서 정책이 제대로 설정되어 있는지 검증해 줄 수 있다고 한다. 마지막 날 세션 중에 Advisor를 더 깊게 다루는 세션도 있었는데 작업할 게 좀 있어서 집중해서 듣지는 못했다. 이어서 Nomad를 설명했는데 Nomad는 한 번도 안 써봐서 가볍게 듣기만 했다.

hashiconf-2018-d1-03


이어서는 다른 코파운더이자 Co-CTO인 Mitchell Hashimoto이 나와서 Consul을 설명하고 Terraform 디렉터인 Paul Hinze가 나와서 Terraform을 설명했다. Terraform은 2014년에 릴리스했고 현재 1,200명 이상의 컨트리뷰터가 있고 160명 이상의 프로바이더가 있고 매주 3만 번 이상의 다운로드가 되고 있다고 한다. 레지스트리에 900개 이상의 모듈이 있고 35,000 개 이상의 정책이 Sentinel로 검사되고 있다.

hashiconf-2018-d1-04


이렇게 성장하는 Terrafrom을 보면서 언어가 향상될 필요가 있다는 결론이 나와서 HCL 언어를 개선했고 조직 복잡도가 커지면 협업 비용도 커지는데 협업이 어려운 이유 중 하나는 terraform.tfstate때문이다. 그래서 협업이 쉽도록 Terraform Enterprise에서 제공하던 원격 State 저장소를 무료로 제공하기로 했다.(아직은 신청해야 사용할 수 있다.) 무료로 제공하지만, 사용자 수 제한도 없고 워크스페이스 제한도 없으면 Vault로 암호화되어 있다고 한다. Terraform Enterpise 사용자는 이제 CLI에서 원격 Plan와 Apply를 할 수 있다고 한다.(이건 엔터프라이즈는 한 번도 안 써봐서...)

hashiconf-2018-d1-05


다시 Mitchell이 나와서 Kubernetes Native가 된 생태계에 관해서 설명하고 Consul, Terraform, Vault의 Kubernetes 연동에 관해서 설명하고 CEO인 Dave가 나와서 마무리 인사를 했다. 평소에도 그렇게 느끼긴 하고 오픈소스 제품 중심인 HashiCorp에서 비즈니스 쪽을 맡고 있어서 그런지 콘퍼런스에서도 Dave의 존재감은 그리 크지 않았다.

어쨌든 Keynote는 엄청 재미있었지만, 너무 열심히 했는지 키노트부터 시간을 40분이나 넘기는 바람에 이후 시간표에도 큰 영향을 끼쳤다...

Consul: Service Mesh for Kubernetes and Beyond

Kubernetes와 Consul을 이용해서 Service Mesh를 구성하는 내용이었는데 주로 Connect를 다루는 것 같았는데 키노트 시간이 초과하는 바람에 이후 시간표가 다 엉켜서 늦게 들어가기도 했고 Consul도 안 써봐서 제대로 이해하지는 못했다.

Scaling Vault to Your Whole Organization

주로 Vault의 최신 기능을 설명하는 느낌의 세션이었다. 엔터프라이즈에 도입된 네임스페이스 기능을 사용하면 네임스페이스별로 권한을 줄 수 있다고 한다. 전체 조직에 적용하다 보면 확장성 문제가 생기는데 0.11의 Performance Standby 노드를 사용하면 읽기 작업을 수평적 확장할 수 있다. 쓰기 작업은 여전히 액티브 노드에서 이뤄져야 한다.

서비스 토큰은 Vault의 일반적이 토큰인데 renew, revoke를 할 수 있고 사용횟수를 제한할 수도 있다. 트리 기반으로 자식도 만들 수 있고 accessor, cubyholes를 가지지만 서비스 토큰 생성은 상당히 무거운 작업이다. 이번 1.0에 추가되는 Batch 토큰은 극단적으로 경량화되어 스토리지 쓰기 작업이 전혀 없다. 그래서 renew, revoke를 할 수 없고 짧은 주기를 가진 애플리케이션에 유용하다. Role이나 Mount에서 Batch 토큰을 반환하게 설정할 수 있고 Performance Standby 노드에서도 생성할 수 있다.

Manage SSH with HashiCorp Vault

Vault를 이용해서 SSH 접속을 관리하는 방법을 설명하는 세션이었다. OTP와 CA를 이용한 두 가지 방법을 설명했는데 서버에 vault-ssh-helper를 설치해서 PEM 대신 helper에 SSH 접속을 위임하도록 설정하고 Vault를 이용해서 OTP(One-Time Password)를 받아서 접속하는 과정을 데모로 보여주었다.(예전에 쓴 글이지만 Vault의 SSH 시크릿 백엔드에서 설명한 OTP 과정과 같다.)

hashiconf-2018-d1-06


이어서 CA(Certificate Authority)를 이용하는 방법을 보여주었는데 Vault에서 퍼블릭 키를 받아서 이를 키 파일로 저장한 다음에 이 키를 이용해서 서버에 SSH에 접속할 수 있었다. 물론 이 키에 만료 시간을 정책으로 지정할 수 있다. 데모에서는 30초로 되어 있어서 설명하다가 30초가 넘어서 SSH 접속을 못 하는 과정까지 보여주었다.

Creating a Terraform Provider for Just About Anything

Terraform 프로바이더를 만들면 GitHub 저장소를 만들거나 Google 캘린더에 일정을 추가할 수 있고 Philips Hue 조명을 켤 수도 있다. 회사가 클라우드 프로바이더이면서 고객이 무언가 요구를 하는데 Terraform으로 관리할 수 있는 API를 가진 리소가 있다면 프로바이더를 만들 수 있다. 프로바이더는 Go로 작성하는데 Go API 클라이언트를 잘 만들어서 프로바이더 로직에서 API 로직을 분리하고 오류 핸들링과 로깅을 잘해야 한다.

Writing Custom Providers를 먼저 읽어보고 다른 프로바이더의 코드도 많이 보는 게 중요하다. helper의 코드를 꼭 읽어보는 것이 좋다.

hashiconf-2018-d1-07


에러 핸들링은 실패와 오류 복구에 극단적으로 강해야 하고 TF_LOG=INFO으로 모든 것을 로깅해서 Terraform 문제인지 API 문제나 다른 문제인지 빠르게 구분할 수 있어야 한다. Terraform 문서에 있는 partial state를 잘 활용하는 것이 좋다. 테스팅을 할 때는 recheck > test stesp > destory > checkDestroy 순으로 진행되는데 스텝당 설정 하나가 있고 시뮬레이트할 때 이 스텝을 이용하면 된다고 한다. Ruby로 작성된 website 폴더로 문서를 제공하는 게 관례로 보였다.

마지막으로 팁을 제공했는데 먼저 Go 언어를 익혀야 하고 특히 strconv와 커스텀 UnmarshalJSON 함수에 익숙해져야 한다. 그리고 프로바이더를 만들기 전에 좋은 Go 언어 API 클라이언트 라이브러리가 필요하고 테라폼 모듈을 이해하는 게 좋다.

You. Must. Build. A. Raft!

Raft 알고리즘을 설명하는 세션이었는데 블록체인 쪽에 있으면서 주워들은 것도 있어서 재미있었는데 영어를 다 알아듣지 못해서 아쉬운 세션이었다. 주로 역사를 설명했는데 비잔티움 장군 문제를 설명하고 Byzantine Fault와 Byzantine Failure의 차이점을 보여주고 이후에 나온 3f+1을 사용하는 PBFT에 대해서 설명했다.

hashiconf-2018-d1-08


Paxos는 Lamport가 88년에 작성했다가 아무도 이해를 못 해서 10년 만에 발행하고 Paxos Made Simple을 다시 작성했지만, 사람들은 여전히 이해를 못 했다. Raft는 2013년에 작성되었는데 훨씬 이해하기가 좋다. 알고리즘 상세도 간략히 설명했는데 세션에서는 잘 이해 못 해서 영상이 나오면 다시 봐야겠다.

EVENING SOCIAL

저녁 네트워킹 파티는 호텔 내에 있는 공간에서 진행되었다.

hashiconf-2018-d1-09


가운에 물이 있는데 거기에 배를 띄워서 DJ가 음악을 계속 틀어서 약간 시끄러운 분위기였고 참가자와 비교하면 공간은 작아서 꽤 붐비는 분위기였다. 역시 대화는 쉽지 않았지만 HashiCorp 한국에서 오신 분이랑 얘기 나누면서 Mitchell과 인사도 나누었다. 네트워킹 파티 올 때마다 영어 때문에 ㅠㅠ

hashiconf-2018-d1-10


들어갈 때 주던 칵테일인데 생각보다 꽤 독했다. 이후에도 칵테일이랑 맥주 주문해서 열심히 먹다가 돌아왔다. ㅎㅎ


이 글은 HashiConf 2018 참석기 #2로 이어진다.

2018/11/07 03:28 2018/11/07 03:28

GitHub Universe 2018 참석기 #2

이 글은 GitHub Universe 2018 참석기 #1에서 이어진 글이다.

행사장

github-universe-day2-01


행사장은 꽤 넓은데 저 앞에 보이는 곳이 발표장이다. 발표장 외에는 모두 각 부스와 콘퍼런스 시설들이 배치되어 있다. 이전 글에서 설명한 대로 키노트는 3개의 트랙의 발표장을 다 열어서 진행되고 트랙은 Helicline, Tryplon, Perisphere로 나누어서 진행되었다.

github-universe-day2-02


행사장 내에 GitHub Shop이 있어서 티셔츠나 후드 등 GitHub의 SWAG을 구입할 수 있다. 나도 컵이랑 몇 가지를 구매했다.

github-universe-day2-03


GitHub Shop 한쪽에는 흰색 Mona 옥토캣을 비치해두고 색칠해 갈 수 있게 해놨다. 워크숍 기념품으로 받은 금색과 같은 모양인데 흰색이다.

github-universe-day2-04


이렇게 쌓아두고 그냥 집어다가 색칠해서 가져가면 된다. 나는 흰색이 더 이쁜 것 같아서 색칠하지 않고 그냥 가져왔다. 둘째 날 점심때쯤 물량이 끝난 것으로 보아 꽤 많이 준비해 놓은 것으로 보인다.

github-universe-day2-05


github-universe-day2-10


행사장은 전체적으로 파티처럼 조명이 되어있어서 더 축제 같은 느낌이 난 것 같다.

github-universe-day2-06


지금은 서비스로 오픈한 My Octocat을 터치스크린으로 배치해 두어 직접 자기만의 옥토캣을 만들어서 이메일로 받아볼 수 있었다.

github-universe-day2-07


여긴 2층에 올라가면 있는 부스 공간이다. 1층과 2층에 부스가 나누어져 있고 2층에는 GitHub에 물어볼 수 있는 부스도 마련되어 있었다. 느낌으로 한 2~3,000명 정도 규모가 되는 것 같은데 각 부스도 티셔츠나 스티커를 넉넉히 가져와서 나도 충분히 챙겼다.

github-universe-day2-08


한쪽에는 Demo Desk가 있어서 각 스폰서 회사들이(아마도) 돌아가면서 시연을 하고 설명을 했는데 나는 앉아서 제대로 듣지는 않았다.

github-universe-day2-09


아주 큰 금색 Mona Octocat 동상. 첫날에는 동상만 있었는데 둘째 날에는 GitHubber 네임태그를 걸어두었다. ㅎㅎ

github-universe-day2-11


콘퍼런스를 참여하다 보니 위와 같은 가방을 멘 사람이 여럿 보였다.(사진은 몰래 찍느라고...) 이 디자인은 Student Developer Pack의 디자인인데 이 가방을 멘 사람들의 옷에 Campus Expert라고 되어 있는 걸 보니 GitHub에 학교와 연계해서 하는 과정 같은 게 있는 것으로 보인다. 실물이 이쁘진 않았지만, 이미지로만 보던 가방을 실제로 보니 재밌었다.

Day 2


Keynote

둘째 날 키노트는 소프트웨어 업계에 대해 초점을 맞추는 느낌으로 전날 공개한 Octoverse의 내용도 많이 다루고 있었다. 개발자가 43%의 시간을 코드 작성이 아닌 곳에 쓰고 있으며 소프트웨어를 작성하는 일은 여전히 어렵다는 얘기 등을 하면서 GitHub의 사용자 중 80%는 미국 외에 존재한다고 했다. 특히 최근에 미국 외의 사용자가 더 많이 증가하고 있으며 동남아, 홍콩, 이집트 등의 개발자가 최근에 증가하고 있다고 강조했다.(이런 내용은 Octoverse에서 볼 수 있다.)

github-universe-day2-12


둘째 날 키노트의 절반은 전날 공개한 GitHub Actions를 더 자세히 설명하는데 할애했다. 사전에 GitHub과 협업해서 Action을 만든 업체들이 나와서 직접 어떻게 Action을 활용할 수 있는지를 보여주었는데 pulumi는 코드를 수정하면 바로 클라우드에 배포하는 것을 보여주었고 twillo는 급한 이슈가 올라오면 이를 개발자에게 문자로 보내주고 개발자가 문자로 답장을 보내면 이를 GitHub 이슈에 댓글로 달리는 것을 보여주었다. HashiCorp에서도 나와서 S3로 정적 웹사이트를 설정한 Terraform 저장소를 기준으로 fmt, validate, plan을 실행하고 그 결과를 바로 Pull Request의 댓글로 달아주어 잘못된 내용을 수정하는 과정을 데모로 보여주었다.

github-universe-day2-13


이번에 기념품으로 GitHub 로고가 붙은 Flic 블루투스 버튼을 주었는데 repository_dispatch 이벤트를 이용하면 외부 이벤트로도 GitHub 액션을 실행할 수 있다고 한다.

마지막으로는 Social Impact의 담당자가 나와서 소프트웨어로 사회에 기여하는 분야에 대해 설명을 했다. 2015년에도 이 부분을 강조했는데 이쪽을 담당하는 부서가 있다는 부분에서도 GitHub이 관심을 많이 가지고 있음을 알 수 있다. 관심은 어느 정도 있지만, 자세히 알지는 못하는데 소프트웨어로 사회문제를 해결하는 다양한 사례를 설명하고 세션 중에도 이와 관련된 패널 토의가 있었다.

From side project to profitable business on GitHub Marketplace

재밌는 세션이었는데 나도 Pull Request 알리미를 만들어 보려다가 올여름쯤 나온 Pull Reminders를 알게 되었는데 사이드 프로젝트로 만들어서 돈까지 벌게 된 얘기이다.

github-universe-day2-14


발표 시작이 "해고됐다"였는데 해고되고 고민하다가 Pull Reminders를 만들기로 하고 구글에 검색해서 다른 사람들도 이런 제품이 필요하다고 생각했다고 한다. 만들고 런칭한 후 트위터에 올린 뒤 누가 실제로 메일을 보내서 주말에는 알림 안 왔으면 좋겠다는 기능 요청을 했다고 한다. 이런 메일을 주고받는다고 결제해서 쓸 생각도 있냐고 물어보니까 그렇다고 해서 월 $20으로 정했는데 결제 페이지 없는데 어디서 결제하냐고 해서 급히 걸제 페이지를 만들었다고 한다. 그래서 2주 동안 메일을 45개 주고받고 67 커밋만에 $20를 벌게 되었다. 사용자가 많아지면서 기능 요청도 많아지고 이를 관리하기 위해서 GitHub 프로젝트 기능을 사용하다가 더 많은 사람이 이용할 수 있도록 GitHub 마켓플레이스에 앱을 올리게 되었다고 한다.

지금 마켓플레이스를 보면 최저가가 $14인데 장표에 나온 9월 유료 계정이 200개는 넘는 것 같으므로 나쁘지 않은 수익을 벌고 있는 것으로 보인다. 실제로 사이드 프로젝트로 1인 기업으로 돈을 벌게 된 과정이 재밌었다.

Is your engineering team high-performing? How to measure team speed and quality

Circle CI CTO가 팀의 생산성과 질을 측정하는 방법에 관해서 얘기하는 자리였다. Circle CI는 300명 이상의 개발자가 있고 1,200만 번 이상의 빌드가 매달 발생하고 있다. 가치와 연관된 3가지 요소로 "master 브랜치의 안정성", "배포 빈도", "배포에 걸리는 시간"을 꼽고 Net value scope(NVS)라는 공식에 관해서 설명했다. NVS는 (1 - count(red builds) / count(green builds)) / (1 + red mins / green mins)로 설명했는데 이 공식이 가지는 의미는 내가 제대로 이해하지 못했다.

github-universe-day2-15


NVS로 얻은 데이터에 3가지 질문을 해볼 수 있는데 "무엇이 좋은 것인가?", "무엇이 안 좋은 것인가?", "여기서 무엇을 배울 수 있는가?"이다. 관련 설명을 하면서 여러 프로젝트에서 NVS가 다양하게 분포된 그래프를 보여주었는데 영어가 짧아서 다 이해하진 못했다. ㅠ 이 공식이 가지는 의미는 또 따로 생각해 봐야겠지만 저렇게 접근해서 의미 있는 결과를 찾아보려는 것이 재미있었다.

From Monorail to Monorepo: Airbnb's journey into microservices

Airbnb의 메인 Ruby on Rail 코드 베이스를 Monorails라고 부르는데 Airbnb의 프론트를 초기에는 Backbone을 썼고 2015년부터는 React + Redux로 바꾸었고 백엔드는 초기에는 자바 서비스였지만 대부분은 Monorails이고 비동기 Job에는 Resque를 쓰고 있다. Monorails의 코드 베이스가 빠르게 커지기 시작해서 1,254명의 컨트리뷰터가 있고 일간 배포를 220번씩 하고 30,000개의 데이터베이스 칼럼이 있고 155,000개의 PR이 머지되었다. 그래서 Airbnb의 GitHub 컨트리뷰션 그래프를 보는데도 엄청난 시간이 걸렸다.

마이크로서비스로 가지 않고도 도구로 해결할 수 있는 부분이 많으므로 scram이라는 자동 롤백 프로그램을 만들어서 센트리의 에러 로그를 SHA로 비교해서 새로운 오류가 올라오면 자동으로 롤백을 수행하고 Merge Queue를 만들어서 PR 머지를 배치로 처리했는데 처음에는 잘 동작했지만, 오랫동안 쓰지는 못했다. Monorails를 추적하기 위해 릴리스 관리를 도입했는데 이는 Airbnb의 문화를 급격히 바꾸었고 현재까지도 많은 개발자가 만족하고 있다.

장기적으로 더 큰 시스템이 필요하므로 현재 코드를 프리징하고 2019년부터 코드 분리 작업을 할 예정이다. 현재 Airbnb에는 Hyperloop라는 프론트엔드의 Monorepo가 있어서 Hypernova에 기반을 둔 서버사이드 렌더링을 하고 있고 Java Monorepo인 Treehouse가 있는데 자바가 C++와 비슷하게 성능도 나오고 정적타이핑이 가능하므로 선택했다.

에필로그

2015년에 참석했을 때 행사에는 만족하고 세션은 약간 아쉬웠던 기억이 있다. 지난번에는 첫 GitHub 콘퍼런스라서 그런지 기대를 많이 했던 것 같고 뭔가 개발자라면 다들 GitHub을 쓸 거라고 생각했는데 Git 혹은 GitHub을 보급하는 기초 세션이 많았던 탓이 있었는데 이번에는 그런 기대감을 많이 느끼지 않고 참가하기도 했고 세션도 이전처럼 Pull Reqeust가 무엇인지, 머지를 어떻게 하는지 등을 설명하는 세션은 없어서 만족도는 더 높았다. GitHub은 서비스도 잘 만들지만 이런 행사나 굿즈도 참 잘 만든다는 생각이 들었다. 딱히 무엇 때문이라고 말하기는 어렵고 말도 잘 통하지 않았지만 있는 내내 축제에 있는 것 같아서 즐거운 기분이 들었다.

2018/11/06 02:43 2018/11/06 02:43