Outsider's Dev Story

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

기술 뉴스 #140 : 19-12-16

웹개발 관련

  • Thinking in React Hooks : Chart 컴포넌트를 작성하면서 클래식 컴포넌트와 React Hook을 이용한 함수 컴포넌트를 비교하면서 개선하는 과정을 보여주면서 둘의 코드나 접근이 어떻게 달라지는지 설명하는 글이다.(영어)
  • Microbrowsers Are Everywhere : 웹브라우저 외에 메신저나 Slack 등에 공유했을 때 페이스북의 OpenGraph, Twitter Card처럼 웹페이지의 미리 보기를 보여주기 위해서 방문하는 크롤러를 여기서는 마이크로브라우저라고 부르고 있다. 이 마이크로브라우저가 이제는 검색 SEO를 위한 구글봇 보다도 중요하고 이런 정보를 잘 보여주는 것이 왜 중요한지를 설명하고 있다.(영어)

그 밖의 개발 관련

  • Django 3.0 릴리스와 주요 변경 사항 : 이번에 릴리스 된 Django 프레임워크 3.0의 새로운 기능을 정리한 글로 Django를 쓰고 있다면 참고해 볼 만하다.(한국어)
  • What's New for Node.js in 2020 : 현재 12 LTS 버전까지 나온 Node.js의 내년 계획을 정리한 글로 Node.js의 공식 글은 아니지만, 상황을 파악하는데 도움이 된다. 내년에 나올 14, 15버전으로 이어지는 릴리스 계획을 설명하고 이 릴리스에 포함될 주요 기능인 Modules, WebAssembly 지원, 진단 리포트 등을 설명하고 있다.(영어)
  • 러스트의 멋짐을 모르는 당신은 불쌍해요 : Rust 프로그래밍 언어를 배우게 된 계기를 설명하면서 Rust의 간단한 개발환경, 문법, 메모리 관리 등을 설명하면서 Rust의 장점을 소개하는 글이다.(한국어)
  • Behind the scenes: GitHub security alerts : GitHub에 올린 프로젝트에서 사용하는 의존성이 있으면 보안 취약점 경고를 하는 기능이 동작하는 방식을 설명하는 글이다. 코드에서 의존성의 변경이 있으면 의존성 그래프를 만들고 이 의존성 그래프를 바탕으로 National Vulnerability Database, WhiteSource 등의 데이터에서 취약점 정보를 가져와서 알림을 보낸다.(영어)
  • [iOS] Parallel UI Testing : iOS 앱의 테스트가 1시간 이상이 걸리고 이후 테스트를 더 많이 작성할 계획이라서 XCode에서 시뮬레이터를 다수 설정해서 테스트를 더 빠르게 실행하는 방법을 설명하고 있고 병렬 테스트의 이점을 얻기 위해서는 Class 단위로 나누는 게 좋다고 한다.(한국어)
  • 잘못 된 문서화, 잘 된 문서화 : 개발하면 문서화도 많이 하게 되는데 문서는 구현을 보충하는 역할을 해야 하므로 구현에서 표현하기 어려운 정보를 보여주어야 하고 구현을 대신하려는 문서화는 잘못된 것이라는 글이다. 문서화는 항상 어렵긴 하지만 동의하는 내용이다.(한국어)
  • GitHub Actions Starter Workflows : GitHub Actions를 쉽게 구성할 수 있도록 언어나 환경별 CI나 레이블 등을 붙이는 자동화 워크플러우를 모아놓은 저장소로 관련 작업을 할 때 참고하기 좋다.(영어)

인프라 관련

  • AWS re:Invent 2019 12월 2일, 12월 3일, 12월 5일 출시 소식 요약 : 이번 AWS re:Invent에서 새로 발표된 서비스를 요약해 놓은 글이다. Access Analyzer for Amazon S3, Amazon EKS on AWS Fargate, Amazon S3 Access Points, Amazon CodeGuru 등이 요약되어 있다.(한국어)
  • Private Docker Registry를 구축하기 위한 오픈소스 Harbor 도입기 : 라인에서 기존에 Docker의 리포지토리를 사용하다가 사내 Docker 사용이 늘어나면서 다른 Docker 프라이빗 레지스트리가 필요해져서 새 솔루션을 검토하다가 Harbor를 선택하고 구축한 과정을 설명하는 글이다. 새 솔루션의 요구사항을 정리하고 Harbor의 기능 및 접근제어, LDAP 연동, 스토리지 연동 등을 테스트하고 구축한 과정까지 나와 있다.(한국어)
  • 프로비저닝 자동화를 위한 Ansible AWX, 설치부터 엔터프라이즈 환경 적용까지 – 1, 2 : Ansible을 이용한 인프라스트럭처 관리를 중앙에서 할 수 있는 Red Hat의 Ansible Tower의 오픈소스 버전인 AWX를 소개하고 설정하는 방법을 설명하고 기업에서 운영하기 위한 고가용성 구성을 하는 방법을 설명하고 있다.(한국어)
  • How to migrate from Helm v2 to Helm v3 : Helm v3가 지난달에 릴리스 되었는데 2to3 플러그인을 이용해서 Helm v2에서 v3로 마이그레이션 하는 방법을 설명하는 글이다.(영어)

볼만한 링크

  • 일일커밋 3주년 회고 : 개발자로서 성장이 정말 빠른 이동욱 님이 3년간 일일커밋을 진행한 과정을 정리한 글이다. 3년간 일일커밋을 쉬지 않고 하는 것도 대단한 일이지만 나도 진행했을 때 여러 가지로 회의감이 들기 마련인데 그때 어떻게 극복하고 일일커밋을 하면서도 의미 있는 시간이 될 수 있도록 노력한 과정이 나와 있다.(한국어)
  • 폴 그레이엄 – 천재에 대한 버스표 이론 1편, 2편 : 폴 그레이엄이 작성한 The Bus Ticket Theory of Genius의 번역글이다. 의미는 없지만, 버스표에 집착하면서 모으는 사람들과 비교하면 천재들은 이와 비슷하게 집착하는 성향이 아주 중요한데 결과적으로 다른 부분은 버스표는 의미가 없지만 다른 천재들의 성과들은 의미 있는 일이었다고 하고 있다. 하지만 어떤 분야가 의미 있는 지는 알기 어렵고 이런 일은 시기에 따라서도 의미 있을 수도 없을 수도 있는데 이런 부분에 대한 폴 그레이엄의 고민이 담겨있는 글이다.(한국어)
  • 프로덕트, 프로그램, 프로젝트 매니저? 뭐가 다른가요? : 보통 PM이라고 부르지만 프로덕트 매니저, 프로그램 매니저, 프로젝트 매니저가 어떻게 다른지를 설명하는 글이다. 프로덕트 매니저는 제품의 총 책임을 지는 사람이고 프로젝트 매니저는 일정 내에 리소스를 활용해서 목표하는 품질을 맞추는 것을 목표로 한다. 프로그램 매니저는 산업마다 다를 수 있는데 보통 전체 제품군에서 공통되는 프로그램을 관리하거나 여러 프로젝트를 모아서 관리하는 매니저를 의미한다고 한다.(한국어)
  • 2019 AI Index report : 인공지능 분야의 2019년 현황을 R&D, 콘퍼런스, 기술 성과, 경제, 교육 등의 챕터를 구성해서 정리한 291페이지짜리 리포트다.(영어)

IT 업계 뉴스

프로젝트

  • Space : JetBrains에서 버전관리, 채팅, 이슈트래커, 팀 디렉터리 등을 포함한 팀 통합환경을 발표했다.
  • SWR : Zeit에서 만든 데이터 패치 React Hook.
  • kyaml2go : Kubernetes의 YAML을 클라이언트용 Go 코드로 변환해 주는 사이트.
  • Gatekeeper : Open Policy Agent의 Kubernetes 용 정책 컨트롤러.
  • Tesseract.js : JavaScript OCR 엔진.
  • Freezeframe.js : 애니메이션 GIF를 제어하는 JavaScript 라이브러리.

버전 업데이트

2019/12/16 03:52 2019/12/16 03:52

KubeCon + CloudNativeCon North America 2019 참석기

지난 11월 19~21일까지 미국 샌디에고에서 열린 KubeCon + CloudNativeCon에 참석하고 왔다. 이는 GitHub Universe를 들렸다가 샌프란시스코에서 샌디에고로 넘어가서 참석했고 샌디에고는 처음 가보는 도시였는데 샌프란시스코가 관광지 같은 느낌이었으면 샌디에고는 훨씬 조용하고 편안해 보이는 도시라서 맘에 들었다. 안전하기도 했고...

KubeCon을 참여하게 된 계기를 설명하자면 매년 해외 콘퍼런스를 하나씩은 가려고 하고 있어서 올해는 어떤 콘퍼런스를 갈지 고민하던 중에 올해는 본격적으로 SRE로 일하면서 인프라를 더 깊게 보면서 커리어를 쌓을 생각이었고 이제 인프라를 하면서 Kubernetes를 빼고 얘기하기는 어려웠기 때문에 KubeCon을 가봐야겠다고 생각을 했다. 얼리버드 티켓을 산 건 여름 정도였던 것 같은데 당시에는 회사 업무를 하면서 Kubernetes를 올해 한창 공부하고 어느 정도 이해하고 있을 때 KubeCon을 한번 갔다 오면 딱 좋겠다고 생각했다. 하지만 계획처럼 되지 않아서 회사에서 인프라보다 다른 쪽에 시간을 대부분 쓰게 되었고 Kubernetes를 구경만 하고 있을 뿐이지 전혀 공부를 못한 채로 갔다 왔다. 아는 만큼 보인다고 Kuberentes를 잘 알지 못한 채로 KubeCon을 갔다 오게 된 것은 개인적으로 꽤 아쉬운 부분이다.

KubeCon + CloudNativeCon은 CNCF에서 주최하는 콘퍼런스로 Kubernetes를 포함해서 CNCF의 프로젝트에 관해 얘기하는 콘퍼런스다. 콘퍼런스는 총 3일간 열리고 콘퍼런스 전날은 수많은 워크숍이 열렸다.

샌디에고 컨벤션 센터

KubeCon은 샌디에고 컨벤션 센터에서 열렸는데 가보니 꽤 큰 장소였다. 다운타운에 숙소를 잡기는 했지만 컨벤션 센터에서는 거리가 좀 있는 편이었는데 동네가 안전한 것 같아서 대부분은 그냥 걸어 다녔다. 우버 타기도 좀 애매한 거리라서...

배지 픽업 장소

주말부터도 배지를 발급받을 수 있도록 지원했는데 난 컨벤션센터에 가서 받았지만, 안내에는 공항에서도 배지 픽업 장소가 있어서 컨벤션센터에 오지 않아도 바로 배지를 발급받을 수 있는 것으로 보였다. 안내 직원만 있고 직접 태블릿에 정보를 입력하고 배지를 출력해서 가져갈 수 있게 되어 있다.

KubeCon의 스폰서 목록

행사의 규모를 알 수 있을 만큼 엄청난 수의 스폰서 목록이 보였다. 이쯤 되면 인프라 쪽으로 뭔가 하려는데 여기에 안 끼면 안될 것 같은 분위기가 아닌가 싶다. 지난주 GitHub Universe를 참가하다가 회사에 급한 일이 있어서 계속 업무를 했는데 약간은 마무리가 되고 있어서 내 바람은 KubeCon 전까지만 해결되었으면 하는 게 바램이었다. 그래서 주말에는 카페를 이용하다가 배지 받은 다음부터는 컨벤션 센터의 인터넷이 괜찮길래 컨벤션 센터에서 콘퍼런스콜을 하고 업무를 했다.

KubeCon + CloudNativeCon은 발 빠르게 세션 영상을 모두 정리해서 올려서 세션이 궁금하면 YouTube에서 볼 수 있다.

Day 1

키노트 현장

행사가 클 거라고 예상은 했지만 실제로 참가해보니 예상보다도 훨씬 컸다. 나중에 보니 12,000명 정도 규모인 것 같던데 AWS re:invent 같은 콘퍼런스는 가본 적이 없어서 내가 참석해 본 콘퍼런스 중에서는 가장 큰 규모의 행사였다. 키노트 장소도 너무 커서 공연장에 온 것처럼 압도되는 분위기였다.

회사가 아니라 재단 주도의 콘퍼런스였기 때문에 키노트에 맞춰서 새로운 걸 발표하거나 하지는 않고 Kubernetes나 커뮤니티의 성장 등에 대해서 공유하고 주요 프로젝트의 멤버들이 나와서 프로젝트를 소개하거나 하는 식으로 키노트가 진행되었다. 매일 아침과 저녁에 계속 키노트가 있었는데 대부분 비슷한 분위기였고 첫날은 CoreDNS, Vitess, Helm, Linkerd, Jaeger, Open Policy Agent 등이 나왔던 거로 기억한다.

키노트에 등장한 Helm 프로젝트

Vitess는 이때 처음 알게 된 프로젝트인데 MySQL을 수평 확장 가능하게 만든 클러스터링 시스템이다. 처음에는 이런 프로젝트가 있네 하고 생각했는데 Slack과 징동닷컴에서도 Vitess를 도입해서 잘 쓰고 있다고 해서 나만 처음 알았지 생각보다는 성숙한 프로젝트구나 싶었다. Helm은 일부러 맞추었는지 그 전주에 3.0을 릴리스했기 때문에 나와서도 3.0에 대해서 얘기했다. 3.0에서 드디어 Tiler가 없어졌다고 얘기하자 모두의 박수를 받았다.

사람이 너무 많다 보니 너무 정신없었고 부스도 많아서 둘러보는 데도 오래 걸렸다. 이틀째에 여기도 왔다고 하면서 발견한 부스도 꽤 많이 있었다. 보통 3개 트랙 정도가 있는 콘퍼런스만 다니다가 같은 시간에 20개도 넘는 세션 중에서 고르다 보니 선택 장애가 걸릴 지경이었다. 처음에는 관심 있는 기술 위주로 들어가 보다가 너무 기술 소개 세션 같은 건 나중에 문서를 보거나 혼자 해봐도 될 것 같아서 나중에는 특별히 관심 가는 SIG(special interest group)가 아니면 다른 회사의 경험이 정리된 세션을 주로 들었다.

세션이 많다 보니 장소도 아주 넓어서 쉬는 시간은 넉넉했지만, 그 큰 건물을 이쪽 끝에서 저쪽 끝으로 왔다 갔다 해야 해서 꽤 힘들었다. 둘째 날쯤 되어서야 세션에 표시된 장소를 보고 어디 있는 곳인지 알게 된 것 같다. 처음엔 지도를 보고도 어디로 가야 하는지 알 수 없었고 이를 예상했는지 곳곳에서 방향을 알려주는 스태프들이 있었다. 자신에게 물어보라는 팻말을 들고 있었다.

Airbnb Service Discovery: Past, Present, Future (Challenges of Change) - Chase Childers, Airbnb

Airbnb에서는 nervesynapse라는 프로젝트로 내부에서 구현한 서비스 디스커버리의 구조를 설명하고 Kubernetes로 옮겨 가기 위해서 변경해 간 과정을 설명했다. 각 단계에서의 문제들을 설명하면서 최종적으로는 Envoy까지 도입했고 인프라 구성을 Kubernetes 구성으로 변환할 수 있도록 kube-gen이라는 도구를 내부에서 만들어서 사용했다고 한다.

How to Backup and Restore Your Kubernetes Cluster - Annette Clewett & Dylan Murray, Red Hat

이 세션은 Kubernetes 클러스터를 통째로 백업했다가 복구하는 과정을 설명했다. Veloro 외에 Rook, Noobaa 등의 도구를 설명하면서 데모를 위해서 Kubernetes 클러스터에 Wordpress와 MySQL로 된 서비스를 띄우고 글을 작성한 뒤에 Persistent Volume까지 백업한 뒤에 서비스를 모두 제거하고 복구한 뒤에 완전히 복구되는 과정을 보여주었다.

Day 2

둘째 날 키노트도 전날과 비슷한 분위기였다. CNCF에 프로젝트가 워낙 많으니까 돌아가면서 하나씩만 나와도 키노트가 꽉 찰 만 하다. 그 외에는 Kubernetes에서 개발할 때 사용할 수 있는 tilt나 skaffold, garden등의 도구나 Ephemeral Containers 등 Kubernetes에서 디버깅하고 하는 등의 환경에 대해서 소개를 했다.

SIG에 대해서 원래는 잘 몰랐는데 가보니 정말 다양한 SIG가 있었고 CNCF 프로젝트의 CI 대시보드인 cncf.ci가 어떤 역할을 하고 SIG가 어떻게 활동하는지에 대한 내용도 있었고 Kubernetes의 릴리스 팀에서 나와서도 발표를 했다. 릴리스 팀이 따로 있다는 게 흥미로웠는데 발표자는 1년 전에 릴리스 팀에 합류해서 릴리스팀 리더로 활동하다가 지금은 다시 리더에서 물러나서 릴리스를 돕고 있다고 했다. 릴리스팀은 개발은 안 하고 릴리스만 하는 건가도 궁금했지만 프로젝트의 규모가 크다 보니 오픈소스에서도 릴리스 팀을 따로 운영하면서 프로젝트를 관리한다는 점이 Kubernetes 프로젝트의 규모를 예상케 하는 부분이었다.

Leveling Up Your CD: Unlocking Progressive Delivery on Kubernetes - Daniel Thomson & Jesse Suen

Intuit의 발표

개인적으로 가장 흥미로운 세션이었는데 Argo CD를 만든 Intuit에서 프로그레시브 딜리버리에 관해서 설명했다. 카나리 배포와 비슷하다고 할 수 있는데 Kubernetes 클러스터에서 클러스터의 일부에만 일단 배포를 하고 결과를 분석해서 이상이 없으면 배포를 점점 늘려가고 오류 등의 매트릭이 늘어서 문제가 있다고 판단되면 자동으로 롤백을 시도한다. 데모에서도 배포되는 서비스를 파란색과 노란색으로 구분해서 배포되면서 서비스가 새 버전으로 바뀌어 가는 것을 보여주면서 문제가 있으면 자동으로 롤백이 되고 이상이 없으면 점점 많이 바뀌어서 전체 서비스가 새 버전으로 바뀌는 과정을 설명했다.

오후 키노트

오후 키노트에서는 OpenTelemetry로 서비스를 관측하는 라이브 데모를 보여주고 나서 커뮤니티에서 활동을 많이 하는 사람들에게 상을 주는 시간이 있었다. 선정 기준까지는 잘 모르겠지만 Top Commiter, ambassador, Chop Wood Carry Water(이건 의미를 모르겠다)를 뽑아서 무대 위에서 상을 주는 게 재미있었다.

All-Attendee Party 장소 입구

저녁에는 All-Attendee Party가 있었는데 장소가 Gaslamp Quarter라고 표시되어 있어서 어딘가 하고 구글맵에서 검색을 해봤더니 어떤 장소가 아니라 그냥 컨벤션센터 앞의 한 블록 전체가 Gaslamp Quarter였다. 가보니 위처럼 표시해 놓고 전체 블록을 막아놓고 중간중간 천막을 쳐놓고 음식을 먹으면서 음악 등을 즐길 수 있도록 해놓았는데 이날 비가 와서 길거리에서 제대로 즐기기가 어렵고 모두 천막 안에 들어가 있어야 해서 제대로 운영되진 않았다. 나도 간단히 저녁만 해결하고 숙소로 복귀했다.

Day 3

2주나 달려서 그런지 3일 차가 되니까 너무 힘들어서 버틸 수가 없었다. 그래서 셋째 날 키노트는 빠지고 천천히 컨벤션 센터로 갔다.

스폰서 부스 장소

사진으로 다 표현이 안 되는데 상당히 큰 공간에 부스들이 모여있었고 부스가 많아서 하나씩 돌아다녀도 꽤 많은 시간이 걸렸다. 세션 장소가 부스 공간을 중심으로 나누어져 있어서 세션을 들으면 부스 공간을 계속 왔다 갔다 해야 했기에 쉬는 시간 등에 틈틈이 구경하면서 다녔다.

CNCF 프로젝트 부스

다른 공간에도 부스가 있었는데 이쪽에는 스폰서 부스 외에도 커뮤니티용 부스들이 많이 있었다. 특히 CNCF 프로젝트 부스에는 메인테이너나 프로젝트 멤버들이 있고 여기서 질문 등을 할 수 있도록 마련되어 있어서 평소에 궁금한 게 있다면(그리고 영어를 잘한다면) 아주 좋은 기회로 보인다.

CNCF SWAG 샵

CNCF SWAG 샵

한 공간에는 샵이 있어서 CNCF 프로젝트들의 티셔츠와 후드가 있었다. 꽤 많은 프로젝트의 후드와 티셔츠가 다 있어서 원하는 대로 구매할 수가 있었고 당연히 Kubernetes나 CNCF SWAG도 있었다. 나는 이런 SWAG을 좋아하기 때문에 어떤 걸 사야 할 지 한참을 고민한 뒤에 몇 벌을 구매해서 왔다. 양말이나 텀블러 같은 다른 굿즈들도 약간 있었는데 내 취향은 아니라서 따로 구매는 하지 않았다.

K3s Under the Hood: Building a Product-grade Lightweight Kubernetes Distro - Darren Shepherd

k3s에 관해 잘 모르고 들어갔는데 꽤 재밌었던 세션이다. Rancher의 공동 창업자이자 k3s를 만든 Darren Shepherd이 직접 k3s에 대해 설명했다. k3s는 다른 도구들과 달리 Kubernetes의 로컬 개발환경이 아니라 처음부터 프로덕션용으로 만들어졌고 올해 2월에 0.1.0을 릴리스 했는데 많은 사람이 관심을 두어서 11월 19일에 1.0 GA를 릴리스할 수 있었다면서 k3s가 k8s와 어떻게 다르고 k3s에서 HA를 구성하는 방법 등을 설명했다. 다른 장소에 비해서 작은 곳에서 진행된 세션이었는데 관심이 가서 k3s도 좀 사용해 봐야겠다는 생각이 들었다.

예상보다 너무 큰 규모라서 정신이 없었지만 구경하는 재미도 쏠쏠했다. 이번 여행에서는 회사 업무가 좀 바빠서 정신이 없었던 관계로 2주 일정이 다 끝나니 체력이 고갈될 지경이었지만 영어에 대한 자극도 다시금 받으면서 즐거운 경험이었다. 보통은 이렇게 미국 오면 일정을 다 끝내고 숙소에 올 때쯤 서울에서 출근하기 시작하기 때문에 숙소 와서 슬랙으로 얘기하면서 쉬다가 자면 됐는데 지금은 미국에도 사무실이 있다 보니까 낮에도 누가 날 찾고 밤에도 누가 날 찾아서 더 정신이 없었던 것 같기는 하다.



컨퍼런스 참석 후기는 stdout.fm의 GitHub Universe 2019, Kubecon 2019 참석기 w/ outsider, anarcher, subicura 팟캐스트에서도 들을 수 있습니다.

2019/12/10 06:04 2019/12/10 06:04