[GN#40] Slack의 Deploy 프로세스 와 HBsmith의 원격근무

2020-04-06 ~ 2020-04-12 사이의 주요 뉴스들
다른 회사는 어떻게 일을 하는지, 어떤 기술 스택을 쓰는지, 개발문화는 어떤지 등은 재미있는 볼거리 중의 하나입니다. 그래서 StackShare처럼 각 회사의 테크 스택을 볼 수 있는 서비스도 있고, { key: values }처럼 각 회사의 기술팀이 중요하게 생각하는 가치를 공유하는 서비스가 나오기도 합니다.

이제 거의 필수적인 업무 도구로 자리 잡은 Slack은 어떤 Deploy 프로세스를 가졌는지 한번 알아보세요. 배포 담당자 훈련, 개밥 먹기, Canary 및 단계별 배포 진행, Pull-based 시스템, Hot/Cold Deploy 등이 눈길을 끌었습니다.

HBsmith는 한국에서 보기 드문 원격근무 회사로 DevOps & QA 자동화를 하는 회사입니다. 2명이 시작해서 현재 15명이 될 때까지, 4년째 원격근무를 진행하며 경험한 그들의 개발문화 이야기를 다룬 글을 추천합니다.

회사에서 사용하는 도구들은 계속 늘어납니다. 이메일/슬랙을 비롯한 커뮤니케이션 툴, 이슈트래커/문서/파일/CS 지원 툴 등 업무 효율을 향상하는 다양한 도구들이 늘어나면 늘수록 다시 지식은 파편화됩니다. 내가 찾고 싶은 정보가 어디 있는지 웹이 아닌 사내에서도 또다시 검색해야 하는 상황이 나오게 되는데요. 그래서 Amazon KendraGoogle Cloud Search 같은 엔터프라이즈 검색 솔루션들이 많이 나오고 있습니다. 이번에 베타 버전을 내놓은 Command-E는 이에 대해서 약간 다른 접근을 합니다. 각 SaaS 도구들에 API로 접근을 해서 로컬에서 인덱싱한 다음 빠르게 찾도록 하는 방식을 이용해서, 별도의 서버를 두지 않는 엔터프라이즈 검색이라고 보시면 되겠습니다. 현재는 맥용 앱만 나와 있지만, 곧 윈도우용도 출시한다고 하니 기대해봐도 좋을 것 같습니다.

Petit 플레이어는 이준영, 안강민님이 만드신 OSX용 Youtube Music 플레이어입니다. PIP 기능을 지원해서 작은 창에서 광고 없이 유튜브 음악을 재생하실 수 있습니다.


✓ 사내에서 슬랙을 쓰신다면 뉴스채널에 GeekNews SlackBot 을 추가하여 편하게 새 글을 받아보시고, 멤버들에게도 공유해주세요.
✓ 주위분들께 https://news.hada.io/weekly 를 추천해 주세요.
✓ 스팸함에 들어가지 않게 news@hada.io 를 주소록에 추가해주세요.
Twitter , Facebook 에서도 긱뉴스를 받아 보실 수 있습니다.

매주 월요일 아침, 지난 일주일간의 GeekNews 중 엄선한 뉴스들을 이메일로 보내드립니다.


Slack의 Deploy 프로세스

- 모든 PR은 코드리뷰와 테스트 통과 필요
- 머지된 코드는 북미 업무시간에만 디플로이 됨 (문제 발생시 해결위해)
- 하루에 약 12번 정기배포
- 각 배포당 배포담당자가 지정됨
1. 릴리즈 브랜치 생성
2. 스테이징에 배포하고 매뉴얼 테스트
3. 내부 슬랙(개밥먹기 티어)에 배포 후, Canary 배포 ( 전체 트래픽의 2% 만 라우트 되는 )
4. 10,25,50,75,100 퍼센트까지 단계별 배포 진행
리스크 관리를 위해 배포담당자를 훈련시키고 모든 단계를 감독 하고 커뮤니케이션을 담당하게 함
문제를 최대한 빨리 잡아내서, 원인 PR을 확인하고, 빼낸다음 새 빌드 배포.
프로덕션까지 가는동안 찾아내지 못하는 문제가 발생했다면 조사전에 일단 원상복구 부터 진행.

회사 초기에 10개의 EC2인스턴스만 운영했을때의 배포는 단순히 rsync 하는 것이었음.
프로덕션 배포전에 Staging 한 단계만 존재했고, 테스트후 바로 배포를 진행.
점점 고객이 늘면서 rsync 만으로 어려워짐.

→ Full parallel pull-based 시스템으로 변경

새 빌드를 서버에 스크립트로 넣는게 아니라, 각 서버들이 Consul 키 변경으로 신호를 받을때 동시에 빌드를 받아오게 함

→ Hot/Cold 폴더로 분리한 Atomic Deploy

배포시 새 코드를 사용하지 않는 Cold 디렉토리에 복사, 기존 서비스는 Hot 디렉토리가 서빙.
서버에 활성프로세스가 없을때 Hot/Cold 디렉토리를 서로 교환하여 새코드가 즉시 서빙.

Consul by Hashicorp https://www.consul.io/

슬랙 백엔드가 HHVM에서 돌아가는 PHP/Hacklang 이라서 저 Hot/Cold 교환이 가능한듯
https://www.quora.com/What-is-the-tech-stack-behind-Slack

 
DevOps 팀은 원격근무를 추구하면 안되는 것일까?

국내에서 보기 드문 원격근무 회사 HBSmith의 개발문화 이야기
70장 슬라이드와 발표시 받았던 질문,추가로 하고 싶은 얘기들을 정리
- 스프린트가 어떻게 구성되는지 사례를 참고하고 싶습니다.
- Jira + Github 를 어떻게 연동하면서 사용하시나요?
- 2주만에 기획 및 개발이 가능한가요?
- 스토리 포인트 플래닝 포커를 진행하시나요?
- 방법론과 ‘일을 위한 일’을 구분할 때 주로 고려하는 요소가 어떤 것들인지 궁금합니다.

"HBsmith가 창업 초기부터 원격으로 시작하여 지금까지도 원격근무를 유지할수 있었던건 아래와 같은 노력 때문이 아니었을까 생각"

- 시스템을 통한 투명한 기록과 공유
- 지표를 바탕으로 한 꾸준한 평가와 개선
- 원칙을 세우고 이를 계속 관철

 
Command-E 베타 출시

모든 업무 도구를 ⌘-E 눌러서 로컬에서 검색하게 해주는 맥용 앱(윈도우 지원예정)
각 서비스에 API로 접속하고, 로컬에서 인덱싱
Slack, Gmail, Github, G Suite, Zendesk, Evernote, Dropbox,
Asana, Jira, Trello, Confluence, Figma, Intercom 등

꼭 업무용 아니더라도 개인 검색용도로도 정말*10 편합니다. 맥 사용자라면 한번 테스트해보세요.

처음에 여러개의 도구를 선택하고 주루룩 연동하는게 굉장히 부드럽습니다.
크롬에 확장을 설치하면 방문한 URL들 까지 검색해줍니다.

이거 곧 윈도우용도 나온다는데, 정말 필수도구가 될듯

 
rclone - rsync for cloud

- 서로 다른 클라우드 서비스간의 파일/폴더 동기화 도구
- S3,GCS,구글 Drive,Dropbox,OneDrive 등 40+개 스토리지
- 윈/맥/리눅스 지원
- MD5/SHA-1 해쉬체크, 파일 타임스탬프 보존
- 부분싱크, 단방향 싱크 기능
- 신규/변경 파일만 복사
- Chunker: 대용량 파일 분할 업로드후 다운받을때 조합 지원
- Crypt: 동기화시 암호화 지원
- FUSE mount 지원

rsync.net 은 rclone 을 이용해서 Universal Cloud Backup 기능을 지원
"사용중인 모든 클라우드의 데이터를 한곳으로 백업 받기"
Universal Cloud Backup at rsync.net https://www.rsync.net/products/universal.html

 
Mac용 Youtube Music 플레이어 앱

메뉴 바에서 쓰는 Youtube Music 플레이어.

https://macnews.tistory.com/1487
7년 전에 만들어진 맥용 벅스 플레이어에 영감을 받아 제작.

제공하는 기능:
* AdBlock
* Picture in Picture (PIP)
* MacOS “지금 재생 중” & native media keys
* 메뉴 바에 나타나는 음악 컨트롤 버튼
* 단축키
* Mac 알림

Mac에 마땅한 Youtube Music Player앱이 없어서 만들어봤습니다.

와 좋네요. PIP기능이 아주 맘에 듭니다. fn키 지원하는것도 좋구요.

 
Google - Site Reliability Engineering Books

Google에서 SRE에 대한 책을 추가로 냈네요.

저 링크에 기존 두 권은 온라인으로 읽을수 있었는데 새로 올라온 책은 PDF/EPUB로 공개했네요.

 
locust - 오픈소스 부하 테스팅 도구

- 사용하기 쉬운 분산 Load Testing 도구
- 파이썬 코드로 사용자 동작을 정의 가능
- gevent를 이용한 가벼운 프로세스(greenlet)로 구현
- 실시간으로 볼수 있는 WebUI 포함
- 기본 웹 테스트부터 클라이언트만 개발하면 모든 시스템을 테스트 가능

나온지 꽤 된 도구이긴 합니다만, 많이 발전 했네요.

Locust로 서버 성능 테스트하기 https://medium.com/@jspark141515/…
Jmeter vs. Locust 무엇을 써야 할까? https://medium.com/@giljae/…

웹 부하 테스트계의 flask 라고 생각합니다.

 
게임/인터랙티브 웹사이트를 위한 작은 도구들 500+개 모음

카테고리별로 정리한후 링크와 간단한 설명 포함
- 초소형 게임엔진 32개
- 인디/오픈소스 게임엔진 11개
- 판타지 콘솔 16개
- 유니티 확장 16개
- 지도 & 레벨 에디터 16개
- 픽셀아트 / 아스키 편집기 / 벡터 편집기 / 각종 생성기 40+개
- 애니메이션 & 비디오 편집기 16개
- 3D 모델링 도구 35개
- 효과음 & 음악 편집기 40개
- 개발환경/프레임워크 30개
- ML 기반 도구 15개
- 텍스트 편집기/포매터/OCR/변환기 70+개
그외 다수

정리한 사람은 게임 개발을 가르치는 사람으로 계속 업데이트 하고 있음.
구글 Docs가 원본이지만, 위 사이트는 구글에 접속 어려운 경우를 위해서 만들어 놓은 사이트
원본인 구글닥스는 여기 http://everest-pipkin.com/teaching/tools.html

 
Zappy: Free Screenshot & Recording Software for macOS

MacOS 에서 기본 캡쳐도구에 글 같은걸 쓸 수 있게 해주는 툴이네요.

기본 도구랑 거의 비슷하게 사용할 수 있어서 좋네요.
Cmd+Alt+Shift+4 → Cmd+Shift+1

캡쳐한 이력을 볼 수 있어서 나중에 예전 캡쳐를 다시 쓸 수 있는것도 편합니다.

어차피 Zapier 홍보하려고 만든 툴이라 이해는 갑니다만, 마지막에 Zapier 업로드할때만 로그인하게 해주면 더 좋을거 같은데, 무조건 Zapier 가입&로그인이 필요한게 사알짝 아쉽군요 ^^;

 
Docker Compose Specification 발표

많이들 사용하지만 기존엔 구현체만 있었던 Docker-Compose 의 공식 스펙을 정해서 발표
클라우드 벤더에 비종속적, YAML로 작성되고, Helm 및 K8S YAML 과도 연동 가능
Go로 작성된 레퍼런스 구현체와 Test 들 포함

2014년에 Fig를 인수하면서 시작된게 Docker-Compose 인데 어찌 보면 그냥 흘러가는 대로 내비뒀던듯..
Docker Enterprise 를 Mirantis 에 넘기고 개발 도구에만 집중한다고 하더니 잘 정리한듯 하네요.

 
unverified.email - email 테스트를 위한 서버

- API로 이용가능한 catch-all SMTP 서버
- 테스트에서 이메일이 잘 전송되었는지 등을 확인할때 임시로 사용가능
- GET /create 로 메일박스를 생성하면 5분동안 유지됨
- 해당 메일박스로 메일을 전송후 GET /receive/메일박스ID 해서 전송된 모든 메일을 받아볼수 있음
- Haskell 로 개발된 오픈소스
- 호스트된 버전을 사용하거나, 직접 서버를 구축해서 운영가능

 
33줄로 만들어보는 React

- Mithril에서 영감받은 최소한의 React 구현
- Virtual DOM 을 Real DOM으로 렌더링
- state 변경시 함수를 새로 실행해서 새 VDOM을 리턴
- 효율적으로 RDOM을 업데이트
- O/X 게임과 Calendar Picker를 구현한 예제 포함

React 전체까지는 아니지만 Virtual DOM 구현에 대해서 이해하는 용도로 좋은 예제인듯
이 글 보다 좀 더 발전된 글은 아래 링크 참조
"나만의 React 만들기" https://news.hada.io/topic?id=906

 
구글 시트에 뉴스 정리하는 법

"우리 회사가 언급된 모든 뉴스를 찾아와!" 했을 때
문과생인 작성자분이 구글 스프레드시트와 웹크롤링을 이용해서 칼퇴를 지킨 이야기
- 네이버뉴스,구글뉴스,블로그 를 가져와 날짜별로 데이터 정리
- RSS, importfeed(), 조건별 필터링

 
falsisign - PDF를 출력해서 싸인 후 스캔한 것 처럼 만들기

싸인본 문서 만들때 PDF 출력후 싸인하고 스캔할 필요없이
수십가지의 싸인을 만들어서 미리 스캔해 놓은후
PDF 파일을 넣어주면 알아서 싸인된 출력본 스캔한 것처럼 만들어 주는 스크립트
크롭된 싸인 PNG는 수정도 가능

이거 도장도 여러개로 찍어놓고 하면 도장 찍어야할 문서도 가능할 듯 하네요.
쉘스크립트여서 위치만 잘 맞추면 간인도 처리할 수 있을듯 한데..

아 근데 그러면 실제 사인하지 않고 디지털로만 한거 같이 티가 나서요

이 방법에서는 -linear-stretch 3.5%x10% -blur 0x0.5 -attenuate 0.25 -rotate "${ROTATION}" +noise Gaussian 라고
옵션을 줘서 문서를 약간 비틀고 흐리게 만들고 노이즈까지 추가해서 실제 인쇄한 느낌이 나게 하는 차이가 있긴 합니다.

 
Made it For Fun - 동영상위에 이미지/텍스트를 애니메이트 하는 도구

HTML5, WASM, FFMPEG 으로 로컬에서 모든 편집을 처리하는 오픈소스
모션 트래킹을 통해서 동영상 의 움직임을 분석,
그 위에 글자,애니GIF가 동영상을 따라 움직이게 편집.
짤방등에 많이 쓰이는 마스킹 영상 제작 가능
편집된 내용은 MP4로 저장

우측에 혜성 모양 버튼이 Motion Tracking 기능 입니다.
아무 GIF나 올려놓은 후 혜성버튼을 눌러보시면 어떻게 동작하는지 볼 수 있습니다.
깃헙 레포 메인에 있는 영상을 보시면 뭘 만드는지 빠른 이해가능
https://github.com/TrevorSundberg/madeitforfun

 
JavaScript Module 포맷과 도구 이해하기

각 모듈 포맷,패턴들을 예제로 설명
1 IIFE : Immediately Invoked Function Expression 패턴
2 공개 모듈 패턴
3 CJS : CommonJS, Node.JS
4 AMD : RequireJS
5 UmdJS
6 ES : ES2015, ES6
7 ES Dynamic : ES2020, ES11
8 SystemJS
9 WebPack
10 Babel
11 Typescript

 
JAMStack 웹사이트를 위한 Headless CMS 10종 비교

Headless CMS : 기존 Wordpress 등과 달리 백엔드 CMS를 분리해서 스태틱 웹사이트등용 콘텐츠를 제작할수 있게 해주는 툴
장/단점, 주요 UI를 캡쳐하여 보기 쉽게 정리
Contentful, Storyblok, Sanity, Forestry, DatoCMS,
Prismic, NetflifyCMS, Strapi, Headress Wordpress, TinaCMS

이 외에도 ButterCMS https://buttercms.com/ , Kontent https://kontent.ai/ 등 꽤 다양한 선택지가 있고
이들 리스트는 대부분 Freemium 정책을 가지는 SaaS 입니다만,
NetflifyCMS https://www.netlifycms.org/ , Strapi https://strapi.io/ 등은 오픈소스로 공개되어 있습니다.

오픈소스 Headless CMS 중에는
Directus https://directus.io/ , Squidex https://squidex.io/ , DAPTIN https://dapt.in/ 등도 있습니다.

 
Matrix와 Jitsi로 Slack+Zoom 오픈소스 버전 구축하기

Synapse (Matrix 서버) +
Riot (Matrix 웹 클라이언트) +
Jitsi (음성/화상 채팅) +
Debian 10,Nginx,LetsEncrypt

모든 대화/통화는 E2E 암호화.
전부 오픈소스로 구현.

보안때문에 Slack & Zoom 같은 SaaS 도구를 쓰지 못하는 환경이라면 고려해 볼만.

Jitsi Meet - 오픈소스 화상회의 솔루션 https://news.hada.io/topic?id=1646
matrix - 탈중앙화 방식의 오픈소스 실시간 커뮤니케이션 네트워크 https://news.hada.io/topic?id=1109

모질라 재단, 내부 메시징 도구를 IRC에서 Riot/Matrix로 변경하겠다고 발표 https://news.hada.io/topic?id=1110

 
Apple, Google과 COVID-19 접촉 추적 기술 분야 제휴

블루투스 규격을 이용, 밀접 접촉을 추적하는 API와 OS기반의 솔루션을 합동으로 공개 예정
1. 5월에 두 OS간 상호연동 API를 공개
2. 접촉 추적 기능을 기본 플랫폼내에 구성 - 사전동의를 통해 참여 가능
Privacy-Preserving Contact Tracing 기술은 개인정보를 보호하며 투명성 및 동의에 기반해서 처리
블루투스 규약, 암호화 규약, 프레임워크 API 문서 초안 공개됨

Google쪽의 공식 링크 : https://blog.google/inside-google/company-announcements/…

구글에서 올린 소개PDF에 그림으로 잘 설명되어 있습니다.

https://blog.google/documents/57/…

예전에 비슷한 아이디어가 올라왔는데 이걸 구글과 애플이 OS단에서 연합으로 진행하네요.

코로나바이러스 접촉자 자동 정보 수집과 실시간 알림에 대한 아이디어 https://news.hada.io/topic?id=1711
블루투스로 정보를 모아서 코로나 접촉자에게 알려주는 플렛폼- 싱가포르 https://news.hada.io/topic?id=1763

 
UA가 가고 Client Hints가 온다

UserAgent 문자열 대신 구글이 제안하는 Client Hints 에 대한 설명
- 왜 Client hints인가?
- Client hints의 활용
- Client Hints의 새로운 옵션 활용

구글 크롬, 사용자 에이전트 문자열을 단계적으로 사용 중지하기로 https://news.hada.io/topic?id=1295