[GN#115] 최고의 엔지니어를 쫓아내는 방법

2021-09-13 ~ 2021-09-19 사이의 주요 뉴스들
여기저기서 개발자를 구하기 힘들다고 하는데요. 이렇게 어렵게 구한 개발자들이 정작 오래 다니기에 힘든 회사도 많습니다. "최고의 엔지니어를 쫓아내는 방법"이라는 역설적인 제목을 통해서, 개발자들의 근속기간을 짧아지게 만드는 요소들을 나열하고, 고치는 방법을 정리한 글을 소개합니다. 환경에 따라서 모든 제안이 맞지 않을 수도 있지만, 참고할만한 내용이 많네요.

스타트업 아이디어를 어떻게 얻는 것이 좋은가에 대해서는 다양한 의견들이 있는데요. 훌륭한 아이디어는 주위의 문제점을 해결하는 데서 나오는 것 같습니다. "니치 마켓을 타겟한 스타트업 성공사례"는 왼손잡이 / 노마드 / 키가 작은 사람들 / LGBTQ+ / 채식주의자 처럼 틈새시장을 대상으로 한 사이트를 만들고, 어떻게 사용자를 모집했고 어떤 키워드를 광고하는지를 조사한 글이어서 흥미롭게 읽었습니다. SEO 전문 회사에서 적은 글이어서, 검색 키워드에 대한 정리가 잘 되어있는데요. 검색 광고는 이렇게 틈새를 노리는 회사일수록 ROI가 좋은 광고방식인거 같아요. 키워드 광고는 제가 스타트업들 만날 때마다 강조하는 부분이기도 한데요. 초기엔 마케팅 담당자가 없어도 CEO/CTO가 가볍게 시작할 수 있는 홍보 방법 이니 꼭 알아두시기 바랍니다.

개발 문화 구축에 대한 글은 매우 많은데요. 자신들이 겪었던 다양한 고통의 해결 과정을 통해 만들어진 개발 문화는 많은 내용을 내포하고 있어서, 다른 회사가 따라하기가 쉽지 않습니다. 어디서부터 해야 할지 모르기 때문인데요. "‘개발문화를 혼자서 바꿀 수 없다’며 포기하기엔 이릅니다" 글은 평사원인 개발자가 사내의 개발문화를 만들어보기 위해 고군분투한 기록입니다. 개발 문화의 처음으로 기술 블로그를 만드는 것에서 시작한 것인데요. 기술 블로그는 글에서 얘기하는 것처럼 "훌륭한 마케팅 수단" 입니다. "우리가 이런 일을 하고 있는데, 같이 일하실래요?"라는 가장 우아한 표현인 거죠. 이 기술 블로그를 아무것도 없던 밑바닥부터 만들어본 후기여서 많은 회사에 도움이 될 것 같습니다. 이 글과 함께 "좋은 회사 기술 블로그는 어떻게 운영되는가"와 "개발자를 구하는 대표님들께 바치는 글"도 추천해 드립니다.

[ 금주의 Ask ]


✓ "이달의 구인공고 - 멤버를 찾고 계신가요 ?" 글은 매달 첫번째 월요일에 고정적으로 등록되며, 구인하고 계시는 모든 회사들이 자유롭게 댓글로 구인공고를 올릴 수 있습니다. 9월의 구인공고 글에는 현재 총 9개의 구인 공고가 등록되어 있으니 참고하시기 바랍니다.

GeekNews Ask 에 다양한 질문을 올려주세요.
GeekNews Show 에 직접 만드신 오픈소스나, 재직중인 스타트업의 제품/서비스를 소개해주세요.

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

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


최고의 엔지니어를 쫓아내는 방법

"개발자들의 근속기간을 더 짧게 만드는 방법들" 과 "고치는 방법"

- 소프트웨어를 못 만드는 관리자를 고용하세요
ㅤ→ FIX: 기술 관리자, 이사, VP들이 분기당 1주 정도는 기능을 개발하고 배포하도록 하세요. 3일 정도 걸리는 기능을 실제 작업/협업 방식으로.

- 엄청 많은 관리자를 뽑고, 계층을 두세요
ㅤ→ FIX: 조직을 평평하게 만들고, 가능한한 관리 계층을 제거하세요

- 최대한 많은 회의를 하세요
ㅤ→ FIX: 팀간의 협업을 최소화 하고, 팀 내부에서는 많은 협업이 일어나도록 조직을 설계하세요

- 소프트웨어 정의 프로세스를 고통스럽게 만드세요
ㅤ→ FIX: 개발자의 부담을 덜어주는 방법. 티켓 만들때 최소 3명(엔지니어,테스터,제품담당자)가 10분간 논의하고 작성하게 하세요

- 소프트웨어 배포를 고통스럽게 만드세요
ㅤ→ FIX: 나타난 문제점들을 20% 시간을 할애하여, 분석하고 고치는 시간을 가지게 하세요

- 엔지니어들이 자신의 작업시간을 추정하게 하세요
ㅤ→ FIX: 추정을 하지 마세요. 경험상 99% 이상 안 맞았고 잘 동작하지 않습니다. 날짜가 필요하면 forecasting 같은 최신 방법을 추천합니다

- 팀을 아주 작게 만드세요
ㅤ→ FIX: 적어도 팀 크기는 6명이 좋습니다

- 엔지니어를 다른 팀에서 빌려오세요
ㅤ→ FIX: 팀이 미션을 가지고 오래 존속하도록 하고, 사람들을 이동하지 마세요

기본적으로 Estimation 은 작업 시간이 얼마나 걸릴지 추정을 통해서 예측하는 건데요.
Forecasting 은 일기 예보와 마찬가지로 "기존 데이터에 기반"해서 예상하는 거라고 정의가 되어있고요.
팀이 에픽을 스토리로 분할하고 스토리당 얼마나 걸렸는지(스토리 포인트)등이 잘 기록이 되어있는 경우,
주당 피쳐를 완료하는 량에 따라서 그 기반으로 예상일자를 뽑는거 정도 일 것 같습니다.

(저도 책과 글로만 배우고, 실제 적용은 해보지를 못해서.. 대략적으로만 설명드립니다.)

 
니치 마켓을 타겟한 스타트업 성공사례

제품 아이디어와 방문자수, 어떻게 사용자를 모집했는지, 광고/검색 키워드 등 포함
- Lefty's : 왼손잡이를 위한 쇼핑몰
- Nomad List : 디지털 노마드를 위한 정보 사이트
- The Modest Man : 키가 작은 사람들을 위한 패션 사이트
- TomBoyX : LGBTQ+ 를 위한 패션 브랜드
- Bee's Wrap : 환경보호를 위해 플라스틱 대신 면과 밀랍으로 만든 식품용 랩
- Divvies : 채식주의자 및 땅콩 알러지가 있는 사람들을 위한 음식 쇼핑몰
- Ahrefs : 이 글이 올라온 웹사이트(홍보) 웹사이트 오너들을 위한 SEO 제공 도구

 
‘개발문화를 혼자서 바꿀 수 없다’며 포기하기엔 이릅니다

- 평사원인 개발자가 사내 개발문화를 만들기 위해 힘쓴 6개월의 기록
- 반 년이 흐른 지금 소기 목표를 달성
- "좋은 개발문화를 가진 기업들이 늘어나기를 바라며, 더 많은 개발자들이 만족할만한 개발문화 속에서 일하길 희망합니다. "

- 기술블로그는 훌륭한 마케팅 수단입니다
- 시작하자 개발 큐레이션
- 어설프게 다가가 겪은 시행착오
- 개발 큐레이션이 가져온 변화
- One for all, all for one, 글로 시작하는 개발 문화

 
Youtube-dl-gui - 크로스플랫폼 유튜브 다운로더 GUI

- Electron + Node.js 오픈소스
- 맥/윈/리눅스
- 유튜브, Vimeo 및 다양한 플랫폼에서 다운로딩 지원
- 여러개의 비디오/플레이리스트/채널 한번에 다운로드
- 해상도/포맷 선택
- 멀티쓰레딩으로 32개 비디오까지 동시 다운로드 가능
- 자동으로 Youtube-DL 최신버전 업데이트

 
이모티콘 서비스는 왜 MSA를 선택했나?

레거시 청산을 위한 MSA 도입 히스토리를 공유하려고 작성했습니다.
설계를 도입하게된 고민의 출발은 서비스 유지보수의 관점에서 시작한거라,
새로 MSA를 만드시는 분들보다는 레거시를 개편하는데 관심있으신 분들이 참고하시면 좋습니다.

MSA 도입 인프라 환경으로는
- kubernetes + istio + argocd(kustomization)
- spring cloud gateway

서비스 주요 기술환경은
- spring-webflux-coroutine
- r2dbc
- grpc

등등 입니다.

이후에 event driven의 도입을 하기 위해 또 다른 삽질을 준비하고 있습니다.
구축되면 그 때도 공유할 수 있으면 좋겠네요.

부족한 내용에 궁금하신 것 있으시다면 댓글 남겨주세요. 가능한 답변을 드리겠습니다~

ps. 공유 자료 제목은 과거 유명한 발표자료의 오마쥬입니다 ㅋ

앗.. ㅎㅎ
덩치 큰 서비스를 개선하는 과정과 선택하신 기술들 이야기를 써주셔서 재밌게 잘 읽었어요~
집 짓는 걸로 많이들 비유하지만 주로 설계에만 집중하는데 감리 단계까지 있단 점도 좋았어요.
좋은 글 고맙습니다.

 
ES6 이후의 변경점 총정리

ES6(ES2015)
- Array.prototype.includes()
- 지수 연산자

ES2017
- 문자열 패딩
- Object.entries()와 Object.values()
- Object.getOwnPropertyDescriptors()
- Trailing Comma
- Atomics, SharedArrayBuffer

ES2018
- Object rest/spread
- Async iteration
- Promise.prototype.finally()
- 정규식 기능 추가

ES2019
- Array.prototype.flat()과 Array.prototype.flatMap()
- Object.fromEntries()
- String.prototype.trimStart()와 String.prototype.trimEnd()
- 선택적 catch 할당
- Function.prototype.toString()
- Symbol.prototype.description

ES2020
- BigInt
- Dynamic import
- 옵셔널 체이닝
- Promise.allSettled()
- Null coalescing operator(null 병합 연산자)
- String.prototype.matchAll()
- 모듈 네임스페이스 export 문법
- import.meta
- globalThis

ES2021
- String.prototype.replaceAll()
- Promise.any()
- 논리 연산자와 할당 표현식
- 숫자 구분 기호
- WeakRef
- Intl.ListFormat
- Intl.DateTimeFormat의 dateStyle 및 timeStyle

 
머신러닝 연구자들을 위한 제언 (번역)

1. 모델을 만들기 전에 해야할 일
1.1. 데이터를 살펴보세요
1.2. 모든 데이터를 보지 마세요
1.3. 충분히 많은 데이터를 확보하세요
1.4. 도메인 전문가들과 소통하세요
1.5. 많은 사전 조사를 하세요
1.6. 모델이 배포되는 상황을 고려하세요

2. 신뢰할 수 있는 모델을 만드는 방법
2.1. 테스트 데이터의 정보가 유출되지 않게 하세요
2.2. 다양한 모델을 사용해보세요
2.3. 부적절한 모델 사용하지 않기
2.4. 하이퍼파라미터를 최적화하세요

3. 모델을 올바르게 평가하는 방법
3.1. 적절한 테스트 데이터를 사용하세요
3.2. 검증 데이터를 사용하세요
3.3. 모델을 여러 번 평가하세요
3.4. 불균형한 데이터에는 정확도를 사용하지 마세요

4. 모델을 공정하게 비교하는 방법
4.1. 더 큰 숫자가 더 좋은 모델을 의미하지 않습니다
4.2 커뮤니티 벤치마크를 신뢰하지 마세요

5. 결과를 보고하는 방법
5.1. 결과를 투명하게 공개하세요
5.2. 여러가지 방법으로 성능을 측정하세요
5.3. 데이터를 넘어선 일반화를 하지 마세요

 
My Room in 3D

- Bruno Simon 의 최신 작품
- WebGL ( Three.js ) + Node.JS 오픈소스
- 방 전체의 색상(Night/Neutral), TV/Desk/PC 조명
- 커피 스팀의 길이/빈도/색상
- TV화면의 로고등을 조정 가능

멋지네요. 성능과 인터넷 속도가 더욱 빨라진다면 설치가 아닌 로딩만으로 여러 복잡한 3D 프로그램을 구동하는 시대도 올 것 같습니다.

웹 브라우저에서 3D 구현을 멋드러지게 하는 걸로 예전 부터 유명했죠.
자동차를 조정해서 둘러보던 페이지가 아직도 기억에 남습니다.
- Bruno Simon 의 3D 홈페이지 https://news.hada.io/topic?id=794

 
Dopefolio - 개발자를 위한 포트폴리오 템플릿 오픈소스

- 쉬운 설정
- 빠른 속도와 SEO 고려
- 멀티 페이지 지원 및 반응형
- 별도 프레임워크와 라이브러리 필요 없음
- 클론해서 수정후 Netlify에서 호스팅 하는게 가장 쉬움

 
LAION-400M - 4억개짜리 이미지-텍스트 쌍 데이터셋

- 무료로 공개된 것 중 세계에서 제일 큰 이미지 데이터 셋
ㅤ→ 2014~2021년간의 웹 페이지 크롤링 데이터를 덤프
- 모든 이미지/텍스트는 OpenAI의 CLIP으로 필터링 완료
ㅤ→ 이미지/텍스트간 유사도 0.3 이하를 걸러낸 뒤 수작업 검증
- 데이터셋 구조
ㅤ→ 50GB URL+캡션 메타데이터 Parquet 파일
ㅤ→ 10TB 풀버전 웹데이터셋 256x256 이미지/캡션/메타데이터로 바로 학습에 사용 가능
ㅤ→ 1TB 400M개의 텍스트/이미지 클립 임베딩. KNN indices 리빌드에 유용
ㅤ→ 데이터셋 검색을 쉽게 해주는 2개의 4GB KNN indices

SAMPLE_ID | URL | TEXT | LICENSE | NSFW | similarity | WIDTH | HEIGHT

 
Amazon EKS Anywhere

- EKS를 자신의 VM/클라우드 인프라에 설치해서 쿠버네티스 클러스터를 온프레미스로 생성/운영할수 있게 해줌
- Amazon EKS Distro 기반으로 자신의 데이터 센터에 AWS 경험을 도입
- AWS 서비스 의존성없이 여러개의 쿠버네티스 클러스터를 전체 관리하는 것을 목표로 함
- Docker 를 이용해서 로컬에 설치 가능

 
Tasuku - Node.js용 미니멀 Task Runner

- 여러 태스크를 동시에 로딩/실행하여 성공/실패등의 메시지를 터미널에 동적으로 표시
ㅤ→ 복잡한 스크립트 및 CLI 도구 작성용
- 동적 상태값을 지원하는 태스크 리스트
ㅤ→ Pending ◽️ / Loading 🔅 / Warning ⚠️ / Error ❌ / Success ✅
- 병렬, 중첩, 그룹 태스크 지원
- Unopinionated : 어디서든 호출 가능. 별도 요구사항 없음
- Type-Safe
- setTitle, setStatus, setOutput, setWarning, setError 등 지원

기존에 많이 쓰던 listr/listr2 도 넘 훌륭한데, 너무 구조적/선언적이어서 만들었다고 하네요.
확실히 쓰기엔 더 깔끔하고 간편해 보이는 듯
- listr https://github.com/SamVerschueren/listr
- list2 https://github.com/cenk1cenk2/listr2

 
Paper to HTML - 논문을 읽기편한 HTML로 변환

- 머신러닝을 이용하여 PDF, LaTeX, PubMed Central XML 의 내용을 읽어서 HTML로 변환
- 접근성 증대 목적
- AI 기반 연구자료 검색엔진인 Semantic Scholar 의 실험적 프로토타입
- 현재는 추출된 이미지/콘텐츠만 캐슁하며, 똑같은 문서를 업로드한 사람에게만 빠르게 서비스하는 용도로 사용됨. 업로드한 파일은 보관하지 않음
- 제한 사항
ㅤ→ 표(Table)는 이미지로 추출 됨
ㅤ→ 수학(Math) 콘텐츠는 정확도가 낮거나 거의 추출되지 않음
ㅤ→ LaTex/PubMed 처리는 PDF보다 기능이 일부 부족할 수 있음
- 차후에 Semantic Scholar 에 접근성 기능을 추가할 계획을 가지고 있음

 
Zingg - 데이터 통합을 위한 Scalable 퍼지매칭 오픈소스

- 분석 엔지니어가 다양한 데이터 Silo들을 연동해서 통합된 뷰를 작성하는 것이 가능
ㅤ→ Data Unification을 위한 No Code ML 도구
- 왜 필요한가?
ㅤ→ 실제 데이터에선 한 고객당 여러개의 레코드가 존재함
ㅤ→ 각 레코드가 단일/멀티 시스템에 분산되어 있어서 데이터가 커지면 고객 분석이 어려워짐
ㅤ→ ELT에서 T는 노력이 많이 들고, dbt 같은 도구가 이런걸 성공적으로 처리하긴 함
ㅤ→ 빠르고 확장가능한 방법으로, 주요 비즈니스 객체에 대해서 추출 또는 로딩 전에 "Single Source of Truth 를 만드는게 필요"함
- 유용한 케이스
ㅤ→ 다중 시스템에 있는 고객 들의 통합/신뢰가능한 뷰 작성
ㅤ→ AML/KYC 등의 대규모 엔티티 확인
ㅤ→ 중복 제거 및 데이터 품질
ㅤ→ 데이터 Silo 의 병합
ㅤ→ 외부 소스 데이터의 Enrichment
- 지원 소스
ㅤ→ Snowflake, Cassandra, S3, Azure, Elastic, 주요 RDMBS 및 Spark 지원 데이터 소스들
ㅤ→ Parquet, Avro, JSON, XLSX, CSV, TSV 등의 파일도 지원

 
이제 Microsoft 계정을 암호 없이 사용 가능

- 암호를 입력하는 대신, 아래 방법을 이용하여 MS 계정에 로그인 가능
ㅤ→ MS Authenticator
ㅤ→ Windows Hello
ㅤ→ 보안 키(FIDO2)
ㅤ→ SMS/이메일 확인코드
- 몇년간 암호 없는 환경에 대한 작업을 진행해 왔으며, 팬데믹이 이걸 가속시켰음
- MS 계정 페이지 의 Advanced Security 화면에서 활성화 가능

2FA앱을 구글이나 타사보다 마소 어센티케이터 쓰시길 권장드립니다. 인터페이스도 좋고, 빠르고, 단말 이전도 쉽고 마소 로그인도 처리할 수 있슴니다

Azure AD를 사용하는 "Work or School" 계정은 "Passwordless" sign-in 을 사용하기 위해서 관리자의 설정이 필요하고, 제약사항도 있습니다. https://docs.microsoft.com/en-us/azure/… 참고하세요.

 
Appliku - Python/Django 앱을 위한 Heroku 대체제

- Django 앱을 자신의 AWS/DO 계정에 5분만에 배포 해주는 도구
- 배포 흐름
ㅤ1. AWS 계정 연결
ㅤ2. Git 계정 연결
ㅤ3. 배포 완료
- 기본 설정 내장 : 자신의 Dockerfile 도 사용 가능
- 인스턴스내에서 여러 DB 관리(Postgres/MySQL/Redis/RabbitMQ)
- Multi-Tenant SaaS 운영에도 적합
- 싱글서버, 3개의 앱 은 무료

HN의 Appliku 소개 글에 달린 댓글이 좋아서 옮겨봅니다.
https://news.ycombinator.com/item?id=28468660

"내가 이쪽을 많이 들여다 봤는데요. Heroku 같은 배포 경험을 사람들이 그리워 해서, 그와 비슷한 배포 도구들이 요즘 엄청 많이 나오고 있어요. 이런 이유중 일부는 buildpack 이 오픈소스[1]이기 때문이고, 또 다른 이유는 이런 것들을 에뮬레이팅 하기 쉽도록 기술전환이 많이 되었기 때문입니다.

이쪽에는 두개의 큰 카테고리가 있습니다.
1. Dokku 처럼 한개의 VM(최근엔 멀티 노드도 시험중)을 사용하는 세계
2. 쿠버네티스에서 Heroku를 복제하려는 Porter[2] 나 okteto[3] 같은 세계

알게된 것중 하나는, 얼핏 보기에는 이런것들이 정말 멋져보이지만, 모든 조직에는 배포하는데 고유한 복잡성이 있다는 겁니다. 통합은 지옥이고, 스케일도 어렵고, 고객 하나당 세심한 케어(white glove treatment)가 필요합니다. 우리도 시도해 봤는데, 기업들한테 가서 팔려면 어딘가 구멍난 추상화를 해야만 합니다. 초기단계 스타트업에는 잘 동작하지만, 그들이 돈이 생기기만 하면 바로 좀더 커스터마이즈 가능하고 튼튼한 솔루션을 찾게 됩니다.

이 프로젝트(Appliku)는 훌륭해 보입니다. 낙담시키지 않고 싶은데, 다시 말하지만 그곳은 레드 오션입니다."

[1] https://buildpacks.io/
[2] https://www.getporter.dev/
[3] https://okteto.com/

 
웹사이트 서버측 개발 언어의 연도별 트렌드

- Alexa 상위 1천만개 및 Tranco 1백만개 사이트 기준
2010 → 2021 년 변화
PHP 72.5% → 78.9%
ASP.NET 24.4% → 8.3%
Ruby 0.5% → 5.2%
Java 4% → 3.6%
Scala 0 → 2%
JavaScript 0 → 1.5%
Static 0 → 1.5%
Python 0.3% → 1.4%
ColdFution 0 → 0.3%

PHP가 마구 늘어나는거는 아니고, 레거시 사이트들이 대부분 그대로 유지중이고
워드프레스 사이트는 지속적으로 늘어나고 있기도 하기 때문이 아닐까 합니다.
ASP의 감소세가 엄청 크네요.

루비가 아직도 파이썬의 3배가 넘는군요 ㅋㅋ

 
GSMA의 Mobile Money 산업 현황 리포트 2021 [86p PDF]

- 2020년 한해의 모바일 머니 리포트
- 전세계 12억개 계좌가 있음
- 3억개가 매월 사용됨 (MAU)
ㅤ→ 1억이 되는데 2006년부터 10년이 걸렸지만, 그뒤로 약 2.5년마다 1억명씩 증가
- 96개국 310개의 모바일 머니 서비스
ㅤ→ 사하라 남부 아프리카 157, 동아시아 49, 유럽&중앙아시아 9,라틴아메리카 30, 중동&북아프리카 29, 남 아시아 36
ㅤ→ 사하라 남부만 5억개 계정, 활성계정 1.5억개 및 전체 트랜잭션의 절반 이상을 차지
- 하루 $2b, 월 $70b(81조원)이 모바일에서 트랜잭션됨
ㅤ→ 24% 현금 인입, 19% 현금 인출, 33% 순환, 12% 디지털 인입, 12% 디지털 인출
ㅤ→ 33% 순환중 29%가 개인간 거래, 4%는 판매자와의 거래
ㅤ→ 매월 $1B 가량이 국제 거래됨

아프리카의 성장세 및 전체 지분이 엄청 크네요. 기존 은행 시스템이 제대로 갖춰지지 못했기 때문에 모바일 뱅킹이 빠르게 뻗어나가는 듯 합니다. 아래 글도 함께 참고하면 좋을 것 같습니다.

- Tech in Africa https://news.hada.io/topic?id=4743