[GN#120] Notion 이 Postgres 샤딩하면서 배운 것들

2021-10-18 ~ 2021-10-24 사이의 주요 뉴스들
우리나라에서도 이용자가 급격히 증가한 노션이 PostgreSQL 샤딩하면서 배운 것들을 공개하였습니다. 5년간 몇만배나 성장하며 그동안 잘 써오던 Postgres Monolith 가 용량을 초과하기 시작하였고, TXID wraparound 가 발생할 것으로 예상되어 샤딩을 하기로 결정하였는데요. 샤딩 후에 빨라졌다는 반응이 즉각적으로 나왔습니다.
Postgres 샤딩 Practice 와 함께 어렵게 얻은 교훈들을 함께 공유했는데요. 더 일찍 샤딩하고, Zero 다운타임 이관을 목표로 하며, 별도 파티션 키 대신 복합 PK 를 이용하라고 합니다. Postgres 를 기술스택으로 쓰시거나 고려하고 계신 분들이 읽어두시면 좋을 것 같습니다.

TypeScript 를 배울 때 알았으면 좋을 트릭들 이나, 배민 쇼핑 라이브를 만드는 기술: 채팅편 과 같은 기술 관련 프랙티스 글들은 시행착오를 줄이는 데 도움이 되니 참고하시면 좋을 것 같습니다.

[ 금주의 Show - 직접 만드신 오픈소스나, 재직중인 스타트업의 제품/서비스를 소개해주세요 ]


✓ 사내 커뮤니케이션 도구들에 GeekNews Bot을 추가해서 편하게 새 글을 받아보시고, 멤버들에게도 공유해주세요. : Slack Bot, 잔디 Bot, MS Teams Bot, Discord Bot
✓ 주위분들께 긱뉴스 위클리 - https://news.hada.io/weekly 를 추천해 주세요.

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


Notion이 Postgres 샤딩하면서 배운 것들

- 올해초 5분간 노션을 다운시키고 몇달간 진행해온 PostgreSQL 샤딩을 진행
ㅤ→ 엄청 빨라 졌다고 즉각적으로 반응이 나오기 시작
- 샤딩하기로 언제 결정 했나
ㅤ→ 5년간 몇만배 성장하면서, 잘 사용하던 Postgres Monolith가 용량을 초과하기 시작
ㅤ→ VACUUM이 지속적으로 중단되기 시작했고, 곧 TXID wraparound 가 발생할 것으로 예상되어 샤딩 작업 시작

- 샤딩 스킴 설계하기
ㅤ→ 어플리케이션 레벨 샤딩
ㅤㅤ⇨ 어떤 데이터를 샤딩할 것인가
ㅤㅤ⇨ 어떤 키로 파티셔닝 해서 데이터를 분할할것인가
ㅤㅤ⇨ 얼마나 많은 샤드를 만들고, 어떻게 구성해야 하나
ㅤ→ 결정 #1
ㅤㅤ⇨ 노션은 block 단위로 데이터 모델이 구성됨
ㅤㅤ⇨ block 테이블에서 연결되는 모든 테이블을 샤딩하기로 함 (Space, Discussion, Comment 등)
ㅤ→ 결정 #2
ㅤㅤ⇨ block 은 workspace ID로 파티셔닝
ㅤㅤ⇨ 각 workspace는 UUID가 부여되므로 이걸 이용
ㅤ→ 결정 #3
ㅤㅤ⇨ 480개의 논리적 샤드 와 32개의 물리적 DB로 구성
ㅤㅤㅤㅤ2의 제곱수인 512가 아닌 480을 선택한 이유는, 더 유연하게 나누어 지는 숫자이기 때문

- 샤드로 이관하기
ㅤ→ 1. Old & New DB에 이중으로 쓰기 (Audit Log와 함께)
ㅤ→ 2. 이중 쓰기 시작후 올드DB의 데이터를 새 DB로 Backfill 시작
ㅤ→ 3. 새 DB의 데이터 검증
ㅤ→ 4. 새 DB로 변경 (Incremental로 진행)

- 어렵게 배운 교훈들
ㅤ→ 더 일찍 샤딩 하세요 : 기존 DB부담이 커질때까지 기다렸기 때문에, 마이그레이션 자체도 부담을 주는게 되어서 천천히 할 수 밖에 없었음
ㅤ→ Zero 다운타임 이관을 목표로 하세요 : 이중 쓰기의 처리량이 최종 전환시에 핵심 병목이었음.
ㅤ→ 별도 파티션 키 대신, 복합 PK를 이용하세요 : 기존 DB의 PK인 id와 파티션 키인 space_id 를 묶어 버리면 앱 내에서 space_id 들을 패스할 필요를 없앨수 있었을 것

Postgres 의 TXID 얘기는 항상 나오는 주제중에 하나 입니다
- PostgreSQL의 결함들 https://news.hada.io/topic?id=1829
- 5년간 PostgreSQL 스케일링 하면서 배운 것 https://news.hada.io/topic?id=4101

 
ImgSrc.Space - 쓰기 편한 이미지/비디오 플레이스홀더

- 3백만장 이상의 이미지/비디오를 무료로 빠르게
ㅤ→ https://imgsrc.space/cat 고양이 이미지
ㅤ→ https://imgsrc.space/dog-v 강아지 동영상 "검색어-v"
- 리사이징 지원
ㅤ→ https://imgsrc.space/sunset?w=500&h=500
- JS 라이브러리 이용시 짧은 표현 가능
ㅤ→ <img src=". cow" >
ㅤ→ <video> <source src=". big mountain-v" type="video/mp4"> </video>
- 최대 해상도 1920x1080

 
TypeScript를 배울 때 알았으면 좋을 트릭들

- Readonly<T>
ㅤ→ JS의 Array와 Object는 Reference라서 수정이 가능. 사이드 이펙트 줄이기
- Any vs Unknown
ㅤ→ 컴파일할 때 모르는 타입에 대한 강제 체크가 가능하게 any 대신 Unknown 사용하기
- Record로 객체 Typing 하기
ㅤ→ interface 대신 Record를 이용

HN 댓글에 추가로 나온 것들 https://news.ycombinator.com/item?id=28837181

- Utility Type 에 대해 알기
ㅤ→ https://www.typescriptlang.org/docs/handbook/utility-types.html
ㅤ→ 한국어 https://typescript-kr.github.io/pages/utility-types.html

- 함수에서 Sometype|undefined 대신 Sometype|null 리턴하기

- Indexed Access Types https://typescriptlang.org/docs/handbook/…

 
Forbes 선정 차세대 1조 가치 스타트업들 2021

- Abra : 크립토 뱅크
- Alchemy : 정보를 블록체인에 저장(이더리움 & Flow)
- Array : 핀테크 회사들을 위한 고객 신용 정보 및 결제 이력 제공
- Embark Veterinary : 반려견 DNA 테스트를 통해서 유전 및 잠재적인 건강 문제 예측
- Forethought : Zendesk/ServiceNow 같은 고객 서비스용 AI
- Headway : 멘탈 헬스케어. 나에게 맞는 Therapist 찾기
- Hyperscience : 기업용 데이터 자동화 플랫폼
- Incredible Health : 병원들을 위한 간호사 고용 전문 플랫폼. 간호사들 등록은 무료. 병원은 유료 연간 구독하고 간호사에게 Apply 하는 형태
- Legion Technologies : 시간제 근로자 인력 관리 소프트웨어 (커피숍, 헬스장, 상점등)
- Mati : 온라인 신분 확인 서비스(여권 및 각 국가별 증명/서류 사용)
- Netlify : 정적 웹 사이트 호스팅
- Notarize : 모바일 앱으로 화상 통화를 이용한 원격 온라인 공증 서비스
- Postscript : Shopify 를 위한 SMS 마케팅 소프트웨어
- Productboard : 고객 중심의 프로덕트 매니지먼트 플랫폼. 고객이 진짜로 원하는 제품을 만들 수 있게 피드백수집-인사이트-우선순위결정-로드맵-딜리버리 를 관리
- Route : 실시간 배송 트래킹 서비스
- Salt Security : 빅데이터와 자동화를 이용하여 API의 취약점을 분석해주는 보안 서비스 플랫폼
- Shef : 홈쉐프들이 집에서 요리한 것을 온라인으로 팔 수 있게 주문과 배송을 처리해주는 서비스. 법률문제로 현재 8개도시에서만 운영중이지만, 계속 로비중
- Squire Technologies : 이발소들을 위한 올인원 플랫폼. 예약 관리/금융 서비스(이발사 팁 & 급여 관리,Pos,매출분석 포함)/커스텀 브랜드 앱 과 웹 제공/소모품
- Sundae : 부동산 직거래 플랫폼. 로컬 투자자들이 집을 사서 되파는 형태로, 집 상태가 좋지 않아도 청소나 수리 없이 제 값을 받고 빠르게 현금을 받고 팔 수 있게 도와줌.
- Titan : "Fidelity for millennials and Gen Z." 젊은 세대를 위한 금융 투자 플랫폼
- Vanta : 클라우드 기반의 컴플라이언스 관리 솔루션. SOC2, HIPAA, ISO 27001 등의 규정을 준수할 수 있게 단순화하고 자동화
- Vendr : 기업을 위한 SaaS 구매 및 관리 솔루션. 어떤 SaaS가 필요한지 회사에 맞게 추천하고 가격 협상 및 구매를 관리
- Very Good Security : 데이터 보안 및 컴플라이언스. 회사의 민감한 데이터를 수집해서 안전한 방식으로 저장해서 개인정보 보호 규정 및 신용카드사의 보안 준수 요건등을 자체 처리(PCI/SOC 2)
- Viz.ai : AI를 이용해서 환자 뇌의 CT이미지와 스캔 DB를 비교, 뇌혈관 폐색(뇌졸중)에 대한 초기 징후를 찾음. ER에 도착하자 마자 60초안에 스캔을 읽고 처리해서 보여줌. 900개의 병원이 사용중이고, Medicare(미국의 국가건강보험)가 승인한 AI기술. 폐색전증 및 대동맥 박리로 확장중.
- Wheel : 원격 헬스케어(Telehealth) 서비스. 자체 의료진을 가진 Teladoc과 달리, 특정 병원/회사의 의사/간호사가 자체 브랜드의 원격 케어 서비스를 제공할 수 있도록 가상 의료 도구등을 지원하는 플랫폼

 
Rust 1.56.0 및 Rust 2021 발표

- Rust는 언어가 빠르게 발전하면서도 안정성을 유지할수 있도록 Edition 방식을 채택
ㅤ→ 하위호환이 안되는 기능들을 Opt-in 방식으로 에디션에 추가
- Rust 2021
ㅤ→ Disjoint capture : Closure 가 실제 사용하는 필드만 캡쳐
ㅤ→ IntoIterator for arrays : array.into_iter() 가 레퍼런스 대신 밸류로 iterate
ㅤ→ 매크로에서 OR (|) 사용
ㅤ→ 새 Cargo Feature Resolver (버전 2)가 기본 값
ㅤ→ Prelude(무조건 임포트되는 표준 라이브러리)에 추가 : TryInfo, TryFrom, FromIterator
ㅤ→ Panic macro가 무조건 포맷 스트링을 요구. 마치 println!() 처럼
ㅤ→ ident#, ident"...", ident'...' 가 예약어에 추가
ㅤ→ bare-trait-objects, ellipsis-inclusive-range-patterns 경고를 에러로
- cargo fix 를 통해서 대부분 자동으로 마이그레이션 지원

- Rust 2021 Edition 계획 https://news.hada.io/topic?id=4241

 
State of AI 2021 보고서 [구글 Slide, 188P]

4년째 매년 발표되는 인공지능의 현재와 미래를 폭넓게 조망한 보고서
- Research : 현재까지의 기술혁신과 능력
- Talent : AI 인력의 공급,수요 및 집중 분야
- Industry : AI를 위한 상업적 응용 분야 및 비즈니스 임팩트
- Politics : AI관련 규제, 경제적 의미 및 AI의 지정학(Geopolitics)
- Predictions : 앞으로 일어날 일과 이전 보고서의 퍼포먼스 검토

2021년 주요 테마
- AI가 보다 구체적으로 발전중 : 국가 전력망 같은 미션 크리티컬 인프라부터, 자동화된 슈퍼마켓 창고 최적화에 적용되는 것 까지
- AI-first 접근 방식이 Biology를 휩쓸다 : 인간의 세포 체계(단백질 및 RNA)에 대한 빠른 시뮬레이션. 새 의약품 발견 및 헬스케어를 변화시킬 잠재력을 가지고 있음
- Transformer가 NLP, 컴퓨터 비전, 심지어 단백질 구조 예측을 포함한 많은 영역에서 최신 기술을 능가하는 "머신러닝을 위한 범용 아키텍처"가 됨
- AI스타트업에 대한 투자가 기록적이었음. 2개의 AI-first 신약 개발 회사 IPO를 비롯, 기업들을 AI-first 시대에 대비하게 하는 데이터 인프라 및 사이버 보안 회사들의 IPO도 관심
- AI가 실제로 군대에 적용되고 군비 경쟁에 포함되기 시작
- 미-중 경쟁에서 중국의 연구품질이나 인재 교육의 상승은 주목할 필요있음. 중국 기관들이 서양의 기관들을 제치고 있음. AI칩을 만드는 대만에 대한 의존도는 지정학적(Geopolitical) 긴장의 핵심

State of AI 2020 보고서 [구글 Slide, 183P] https://news.hada.io/topic?id=2978

 
배민쇼핑라이브를 만드는 기술: 채팅 편

- 왜 자체 구현했는가? (Sendbird/FCM 대신)
- 아키텍처 : Redis Pub/Sub + Webflux + WebSocket
- 구현의 방향성
ㅤ→ WebSocket을 최소한으로 사용
ㅤ→ RDB 직접 접근을 배제
- 몇 가지 시행착오들
ㅤ→ WebSession 사용으로 인한 장애
ㅤ→ 멈춰 버린 어드민 : 리스트 가상화와 렌더링 횟수 줄이기

 
Edge 다음 버전 부터 브라우저 내 개발 도구로 VSCode 사용 가능

"Open Source files in VS Code"
- 브라우저에서 프론트 엔드 코드 디버깅중 변경한 코드가 실제 저장 가능
ㅤ→ 로컬에서 작업 중일 경우 브라우저에서 자동 인식해서 루트 폴더를 선택하도록 하고, 하드 접근 권한을 요청
ㅤ→ 승인하면 DevTools 의 모든 링크가 브라우저의 Source 창 대신 VSCode에서 열리고 해당 파일 위치로 이동
ㅤ→ DevTools에서 수정한 내용이 VSCode에 바로 적용되고, VSCode에서 수정 후 저장하면 브라우저에도 싱크
- Settings-Experiments 에서 켜야 만 동작

 
포브 - 매일 아침 7시에 동기부여를 줄 수 있는 글귀를 이메일로 전송해주는 서비스

안녕하세요, 포브를 운영중인 개발자입니다.

-

포브는 매일 아침 7시에 구독 신청하신 이메일로 동기부여할 글귀를 보내주는 서비스입니다.

제가 동기부여를 받고 싶을 때 유명한 사람들 얘기한 명언들을 보거나 유튜브를 찾아보는데
어느 날 문뜩 누군가 나에게 아침마다 동기부여를 해준다면 어떨까라는 생각을 하게 되었습니다.

그 후 아이디어를 조금 더 구체화해서 이메일로 글귀를 전송해 주는 서비스를 구상했고 이렇게 서비스까지 하고 있네요.

추후에는 문구를 보면서 느낀 감정과 생각을 기록할 수 있는 기능을 추가해 보려고 합니다 ㅎ.ㅎ

-

구독 신청은 아래 주소에서 하실 수 있어요!
https://web.povv.net/landing

감사합니다.

런칭 축하드립니다!

랜딩페이지에 예제 글귀가 몇 개 보이면 더 좋을 것 같아요.
버튼이 "가입하고 글귀 받기"로 되어있는데, 이게 약간 혼동스러운거 같아요. "이메일 등록하고 글귀 받기"가 자연스럽지 않을까요 ?
이메일 등록 하고 로그인 페이지에서 보이는 회원 가입의 차이를 잘 모르겟어요. (왜 회원가입이 필요한지도요)
포브 pov 인데 도메인은 povv 네요. 그럼 서비스도 povv 가 되는게 맞지 않을까용 ? ㅎㅎ

멋진 프로젝트네요! 구독 신청했습니다.
다만 아래 xguru님께서도 언급하셨듯이, (제가 느끼기에는)굳이 이름과 비밀번호가 필요한가 싶었어요.
물론 향후 '생각 기록'과 같은 새로운 기능들이 추가되었을 때 바로 이용할 수 있다는 장점이 있겠지만.. 타 메일링 서비스에는 구독 자체에 대해서는 이런 회원가입 절차가 대부분 없어 약간 의아함이 들더라구요.
아무튼, 매일 아침 7시 메일 기대하겠습니다. 감사합니다 ㅎㅎ

 
vscode.dev 공개

- VS Code의 웹 버전을 바로 사용 가능한 URL
- File System Access API를 이용하여 로컬 파일 편집 지원 (크롬/엣지)
- 파일/업로드 다운로드 가능해서 iPad에서도 개발 가능
- Settings Sync로 세팅/키바인딩/확장도 그대로 공유 가능
- GitHub Repo, Codespaces, PR 확장 기본 내장

- github.dev 와 비슷하지만 약간 다름
ㅤ→ github.dev 는 GitHub에 깊게 통합되어, 자동으로 로그인 되고 URL도 GitHub /organization/repo 형식을 그대로 따름
ㅤ→ vscode.dev 는 Azure Repo도 지원. vscode.dev/github 와 vscode.dev/azurerepos 로 나눠서 사용
- 확장/테마 적용을 쉽게 링크로 공유가능
ㅤ→ Night Owl 테마 https://vscode.dev/theme/sdras.night-owl

한국어 언어팩 설치만 되면 더 자주 사용할텐데...

 
L0phtCrack Password Auditor 오픈소스 공개

- 1997년에 출시된 유료 암호 해독 도구로 윈도우즈 암호를 복구/해킹하는데 사용되었음
ㅤ→ brute-force, dictionary, hybrid, rainbow table 등의 기법을 이용
- 2020년 Terahash에 매각되었다가, 2021/7/1 자로 원 저작자에게 돌아간뒤 판매 중단
- 내부에 사용된 상용 라이브러리 들을 제거/교체 한 후 오픈소스로 공개
ㅤ→ HashCat, John The Ripper 를 Shared Library 형태로 동작하도록 변경해서 별도 Repo로 공개

- L0phtCrack 7, 오픈소스로 공개예정 https://news.hada.io/topic?id=4751

 
애플, M1 Pro 와 M1 Max 도입한 MacBook Pro 14/16인치 공개

- 터치바 삭제한 펑션 키보드(터치ID만 탑재)
- 3개의 썬더볼트4, SD카드, HDMI, 헤드폰잭, MagSafe 3
- 120Hz 프로모션, Liquid Retina XDR, 미니 LED
ㅤ→ 노치형 디스플레이
- 14/16인치 상관없이 CPU 선택가능
ㅤ→ M1 Pro : 8~10코어 CPU, 14~16코어 GPU, 200GB/s 메모리 대역폭, 외장디스플레이 2대, 최대 32GB 메모리
ㅤ→ M1 Max : 10코어 CPU, 32코어 GPU, 400GB/s, 외장디스플레이 4대(모니터 3 + 4K TV 1), 최대 64GB 메모리, 2개의 동영상/ProRes 디코딩 엔진
ㅤ→ 16코어 뉴럴 엔진
ㅤ→ 성능코어 8개 + 효율코어 2개
- 3 지향성 빔포밍 스튜디오급 마이크
- 6 스피커 사운드 시스템 (4개의 포스 캔슬링 우퍼)
- 공간음향 도입
- 1080p 페이스타임 카메라 (F/2.0)
- 7.4GB/s 읽기속도 SSD
- 최대 8TB 스토리지
- 무게 : 14인치 1.6kg, 16인치 2.1kg
- 14인치 ₩2,690,000~, 16인치 ₩3,630,000~

애플 드디어 정신차렸군요... +1

저는 메모리 대역폭이 인상적이네요.
400GB/s라니...ㄷㄷㄷ
이제, 기존 인텔계열들은 명함도 못 내밀겠네요

 
Cornerstone.js - 의료용 이미지 라이브러리

- 의료용 웹 어플리케이션 제작을 위한 통합 이미징 플랫폼
- DICOM 파싱
ㅤ→ 모든 Transfer Syntax 지원
ㅤ→ WADO-URI / WADO-RS 지원
- Web Worker를 이용한 고성능 멀티스레드 이미지 디코딩
- 모듈러하게 설계되어 쉽게 확장 가능

 
한국어 음성인식, 글로벌 수준에 접근하다.

- 음성인식 데이터셋의 현황과 기대
- 음성 인식 평가를 위한 데이터셋 현황과 한국어 음성 표준 데이터셋 구축의 필요
- 글로벌 음성 데이터셋의 비교와 한국인 대화 음성 데이터의 기능
- 일반, 노년, 아동, 차량 분야 명령어 음성 AI 데이터
- 제한된 데이터셋에서도 진화하는 인공지능 음성-텍스트 동기화(AI Speech-Text Synchronization)

 
중요한 SaaS 지표들과 설명

1. Growth
- MRR / ARR (Monthly / Annual Recurring Revenue)
- CMGR (Compound Monthly Growth Rate)
- MRR Components
ㅤ→ Retained / Expansion / New Sales / Resurrected / Contraction / Churned
- Customer Concentration

2. Retention
- Dollar Retention : NRR(Net Revenue Retention)
- Logo Retention

3. Sales Efficiency / Unit Economics
- New Sales ARR vs Sales & Marketing Expense
- Customer Acquisition Cost (CAC)
- New Annual Contract Value (ACV) vs CAC
- CAC Payback
- Magic Number

4. Margins
- Gross Margin
- Lifetime Value (LTV)

5. Capital Efficiency
- Burn Multiple
- Hype Ratio

6. Engagement
- DAU/MAU
- DAU/WAU

- SaaS Metrics https://news.hada.io/topic?id=4142
- Marketplace 회사를 위한 지표들 https://news.hada.io/topic?id=1574