✍️ 글

퇴사 부검

전 우아한형제들 현 인프런 소속의 서버 개발자이신 이동욱1께서 우아한형제들을 퇴사하면서 남긴 포스트모템 글.

넷플릭스의 퇴사 문화에 맞추어,

  • 왜 떠나는지
  • 회사에서 배운 것
  • 회사에서 아쉬운 점
  • 앞으로의 계획

을 차례로 적은 글입니다.

7년차 개발자가 그간 일해오면서 어떤 것들을 해왔고 또 어떤 생각을 가지고 있었는지, 한편으로는 앞으로 어떤 것을 하고싶어하는 지에 대한 생각을 읽을 수 있습니다. 아직 개발자 커리어 초창기에 있는 입장에서 자신의 커리어가 고민되는 시기에 읽어보기에 좋은 글 이라고 느껴집니다.

한편으로는, 2016년 당시 배달의 민족이 어땠는 지에 대해서도 부분적으로 알 수 있는데, 이미 국민적인 앱이 되어가고 있다고 개인적으로 느꼈던 당시에도, 워낙 로켓처럼 성장한 스타트업이 내부적으로 많은 레거시를 안고 있었구나 하는 것을 알 수 있었습니다.

Using PyTorch + NumPy? You’re making a mistake

파이토치에서 DataLoader로 데이터셋을 읽어올 때 각 로더가 fork 콜을 이용해서 생성되는데, 그렇다보니 Numpy 의 random seed를 제대로 잘 사용하지 않으면 모든 로더가 똑같은 데이터를 읽어오게 되는 버그가 발생합니다.

이게 생각보다 엄청 흔하게 발생해서 파이토치 공식 튜토리얼이나 OpenAI의 튜토리얼 등에서도 해당 버그를 발견할 수 있었다는 글입니다.

ML은 워낙 폭발적으로 빠르게 발전하고 있다보니 제대로 정립되지 않은 것이 너무 많아서 알게 모르게 수많은 버그가 양상되는 듯 싶습니다. 무엇보다 어려운 것은 ML 분야는 그러한 버그들이 에러로 나타나는 것이 아니라 성능 저하로 나타난다는 점일 것 같습니다.

Rainbow Tables (probably) aren’t what you think

해시 값을 대량으로 저장해두어 해싱된 비밀번호를 추출할 때 쓰이는 레인보우 테이블의 원리를 설명한 글입니다.

단순히 생각하면 그냥 사전처럼 값을 다 저장해두면 되지 않을까 싶은데, 용량적인 측면에서 그게 불가능하고, 해시 체인의 시작과 끝만 저장해둠을 알려줍니다.

📌 북마크

Shell Field Guide

쉘 스크립팅을 하는 데에 있어서의 다양한 트릭을 알려주는 페이지입니다.

쉘 스크립팅은 해도해도 익숙해지지가 않아서, 저는 스크립트를 짜야할 때면 기본적으로 Bash Cheatsheet를 켜놓고 작업을 하는데, 좀 더 심화된 테크닉(?)이 필요할 때 살펴보기 좋은 페이지입니다.

사실 어느정도 스크립트의 복잡성이 올라가면 파이썬이나 펄 같은 언어로 넘어가는 것이 좋다고 보긴 하는데, 그게 불가능한 상황도 분명 존재할테니, 그런 경우에 살펴보면 되지 않을까 싶습니다.

📰 기술 뉴스

CUDA Python

NVIDIA에서 CUDA의 파이썬 wrapper를 공개했습니다.

지금까지 머신 러닝 학습/추론 속도를 부스팅하기 위해서 일부 레이어를 CUDA로 작성하는 등의 작업을 한 라이브러리를 종종 봐왔는데, 직접 CUDA 코드를 (잘) 짜는 것이 상당히 까다로운 만큼 개인이 이러한 작업을 하기에는 어려운 부분이 있지 않았을까 싶은데요.

개인의 CUDA에 대한 접근성을 올려주는 좋은 도구가 될 것이라고 생각됩니다.

Rust for Linux

리눅스 커널에 Rust를 사용하고자 하는 의견들이 꽤나 커지고 있는 것으로 보입니다. 리누스 토르발즈도 이런 아이디어들을 hate하지는 않는다고 하는데요.

중단기적으로는 리눅스 커널의 일부 leaf 모듈들을 러스트로 작성하는 방식이 될 듯한데, 미래에는 러스트가 리눅스 커널의 핵심적인 부분들을 차지하게 될지도 모르겠네요.

⚙️ 소프트웨어 / 프로젝트

focalboard

Slack의 설치형 대체재인 Mattermost로 유명한 Mattermost 사에서 이번엔 Trello를 대체할 수 있는 프로젝트 관리 소프트웨어인 Focalboard를 공개했습니다.

아직은 베타 단계인데, 폐쇄적인 환경에서 작업을 해야 한다면 고려해볼 수 있는 선택지가 될 듯 합니다.

도커 기반의 설치 스크립트가 제공되어 있어서, 시험삼아 빌드해봤는데 설치도 매우 간단합니다. 아직 베타 스테이지지만 앞으로의 발전이 기대되는 도구입니다.

up

리눅스 환경에서 pipe operator |를 이용해서 여러 유틸리티의 결과를 조합해야할 때가 많은데, 이를 interactive하게 작업할 수 있게 도와주는 도구.

모르고 살았다면 미묘하게 불편한데 꼭 이런 도구가 있어야 한다고는 생각을 안 했을 것 같은데, 막상 알고나니 왜 지금까지 안 썼을까 하는 도구가 있다면 이런 것이 아닐까 싶습니다.

up을 소개하는 해커 뉴스의 스레드를 보면, 굳이 up을 쓰지 않더라도 비슷한 기능을 할 수 있는 트릭이 몇가지 소개되어 있으니 이 쪽을 참고해보는 것도 좋을 듯 합니다.

awesome-korean-newsletters

Self promotion ^^…

Substack으로 대표되는 구독형 뉴스레터 시장이 어마어마하게 커지고 있습니다. 이제 정보도 직접 찾아보는 게 아니라 큐레이션 받아 취사선택하는 시대가 된 것 같네요.

국내에도 개인, 단체, 기업 할 것 없이 다양한 주체들이 뉴스레터를 발행하고 있는데, 제가 구독하는 뉴스레터를 정리하다가 좋은 레터들을 소개하면 어떨까 싶어 한국어로 발행되는 뉴스테러만 정리하는 레포를 만들어 보았습니다.

DISQUIET*

a.k.a 한국판 Product Hunt

다양한 서비스를 홍보할 수 있는 사이트입니다 비정기적으로 서비스를 홍보하는 뉴스레터도 자체적으로 발행하는 것으로 보이네요.

아직 업로드가 아주 활발하지는 않은데, 유명해지면 꽤나 유용한 서비스가 되지 않을까 싶습니다.

git-worktree

git에서 그때그때 일시적인 작업 (e.g. bugfix) 을 해야할 때에 기존에 하고 있던 작업을 보존하기 위하여 stash를 하거나 새로 레포지토리를 clone해오는 방식을 많이 사용하는데, worktree 커맨드를 사용하면 더 간단하게 그러한 일을 처리할 수 있다고 합니다.

worktree 명령어를 처음 들어봤다면 지금부터라도 알아두면 분명 유용하게 쓸 수 있을 것 같네요. 기회가 된다면 구체적인 사용 용도를 이 블로그에 정리해볼 생각입니다.

resolv

오픈 소스를 위한 크라우드 펀딩 사이트.

오픈 소스에 달린 특정한 이슈를 해결하면 그에 맞는 보상을 주는 형태로 구성되어 있습니다.

오픈 소스 메인테이너뿐만 아니라 참여자들에게도 노력에 따른 정당한 보상이 돌아가게끔하는 구조인데, 기존의 스폰서 방식 말고도 이런 식의 오픈 소스 기여 활성화 아이디어는 눈여겨볼 필요가 있을 듯 합니다.

Weights & Biases

웹 기반으로 머신 러닝 학습 로그를 남길 수 있게 해주는 사이트.

텐서보드의 유니버셜한 웹 버전 정도라고 생각하면 될 듯한데, UI가 꽤나 깔끔합니다.

pip install로 쉽게 설치할 수 있고, 사용법이 그리 어렵지 않아서 텐서보드보다 더 접근성이 높아보이기도 한데요. 제대로 사용해보지는 않았는데, 작은 프로젝트에서 실험 기록을 트래킹하기에는 꽤나 유용할 듯 싶습니다.

비슷한 용도의 도구로 MLFlow나, Neptune.ai도 있어서, 사용 목적에 따라 비교해가면서 사용해보면 될 듯 합니다.


  1. 이동욱님은 주니어 개발자 취업 정보 깃헙 레포지토리로도 유명합니다. ↩︎