유병훈

코딩으로 스트레스 해소하는 서버 개발자

소개

DDD를 통한 도메인 정의와 빠른 문제 해결에 관심이 있는 서버 개발자입니다.
팀 간 도메인 분리&정제 가 빠른 문제 해결과 적은 기술 부채의 핵심이라고 생각합니다. 비즈니스 목표와 기술 부채 해결의 타협점을 찾기 위해서 빠르게 움직일 수 없도록 만드는 시스템을 찾고 개선하는 것을 즐깁니다.
좋은 개발자란 빠르고 기술적으로 올바르게 문제를 해결하는 사람이라 생각하기 때문에 팀의 목표에 따라서 기술 부채를 의도하기도, 변경에 유연한 시스템을 디자인하기도 합니다.
현재 커리어 관심사는 팀 토폴로지의 Enabling team 역할입니다.
업무 이외에도 Linux와 오픈 소스에 관심이 있어서 AUR에 패키지 관리를 하거나, 만든 프로젝트를 github에 공유하기도 합니다.

경력

AB180

Backend Engineer

2022.10 ~ 현재

ab180.co

초당 트래킹 22,800+의 광고 성과 분석 솔루션

  • 트래킹 서버 운영 & 유지보수
  • 배포, 개발 환경, 성능 최적화 등 팀 범위의 기술 도입 및 지식 공유

Buzzvil

Software Engineer

2019.09 ~ 2022.10

buzzvil.com

MAU 2,000만+, 초당 광고 할당 3,000+의 리워드 광고 회사

  • Golang으로 DSP (광고 할당 서버) 구축 및 Ad Exchange 연동
  • DSP 운영 & 유지보수
  • 광고 상품 서버 운영 & 유지보수
  • 사내 Python Expert로써 전사 범위의 기술 도입 및 지식 공유
  • 레거시 모노리스 포팅 TF 리딩

역량

도메인 분리 & 정제

  • [Buzzvil] Python 모노리스 광고 서버로부터 광고 할당 도메인 전체를 Golang 마이크로 서비스로 분리
  • [Buzzvil] 모노리스 광고 서버에 모듈러 모노리스를 기반으로한 도메인 분리 제안 후 리팩토링
  • [Buzzvil] 여러 서비스에 걸쳐져있던 광고 소진제어 도메인 하나의 서비스로 통합
  • [Buzzvil] 서비스간 Contract test (Pact) 도입 및 구축
  • [Buzzvil] Kafka를 활용한 광고 서버와 할당 서버의 의존성 제거

기술 부채 해결 / 레거시 개편

  • [Buzzvil] 모노리스 광고 서버 Python2 → Python3 포팅
  • [Buzzvil] 광고 할당에 사용되는 레거시 Elasticsearch 광고 캐시 이주
  • [Buzzvil] Anti-corruption Layer를 활용한 단계적 마이크로 서비스 분리

인프라

  • [Buzzvil] Istio 트래픽 미러링으로 마이그레이션 검증
    • 7k+ RPS 광고 서버 포팅
    • 3k+ RPS 광고 할당 서버 분리
  • [Buzzvil] DevOps Edge program 멤버로 지속적인 인프라 역량 학습
  • [Buzzvil] 모노리스 프로젝트의 CI 소요시간 4배 단축
  • 개인 프로젝트로 HA로 구성된 Kubernetes 클러스터 2개를 바닥부터 구축 및 운영 중

팀을 넘어선 기술 공유 및 도입

  • [Buzzvil] 테크 블로그를 활용한 사내외 지식 공유
  • [Buzzvil] 유관 프로덕트팀과의 도메인 분리를 선제적으로 제안 및 DDD 이주 가이드 & 리뷰
  • [Buzzvil] Python expert group 리딩하며 Python 프로젝트 코드 퀄리티 개선
  • [Buzzvil] Python type checker (mypy) & code formatter (black) 전사 도입
    • 제안서를 통한 전사 합의
    • 지속적인 typing 가이드 & 리뷰
    • Python 버전 업그레이드마다 신규 typing 기술 공유
  • [Buzzvil] 프로젝트간 lint 설정을 버전으로 관리하며 동일하게 유지하는 툴 도입
  • [Buzzvil] Python package manager로 pip-tools 대신 poetry 도입

대용량 데이터 처리 및 성능 개선

  • [Buzzvil] 3k+ RPS 광고 할당에 사용되는 Elasticsearch의 Lucene 레벨 최적화로 latency 30% 감소
  • [Buzzvil] 통계 서버와 소진제어 서비스에 asyncio 도입으로 throughput & latency 최적화
  • [AB180] 트래킹 서버의 throughput 2배 향상

학력

한국 항공대학교

Bachelor of Science in Computer Science

2013.03 ~ 2016.08

  • 총 7학기 조기 & 차석 졸업
  • 알고리즘 문제 풀이 경연대회
    • 2014 ACM-ICPC 대전 본선 22위
    • 2015 LG CodeChallenge 본선 37위

Projects

homelab (Kubernetes cluster)

Linux 머신에 Kubernetes 설치 이후부터 GitOps 기반 클러스터 구축하고 운영하는 프로젝트

  • 프로덕션급의 스택을 가진 Kubernetes cluster를 바닥부터 구축 & 운영하는 경험을 위해 작업
    • 인프라를 구성하고 자동 운영 상태를 만드는 것이 주목적
  • 현재도 해당 repository 기반 GitOps로 클러스터 운영중
  • 아래의 서버가 실제로 동작 중 (FYI. 웹 UI가 있는 서버들은 아닙니다)
  • 관련 기술: Kubernetes, Terraform, Helm, GitOps, ArgoCD, Traefik, Rook, Prometheus, Grafana, Docker, Cloudflare, Github Actions

arrow 라이브러리 전체 typing

8k+ star의 시간 관련 Python 라이브러리에 기여

  • 전체 코드에 Type annotation 추가하는 기여
  • diff 총 합 1200+ 줄 정도의 PR
  • 1.0.0 릴리즈에 포함됨

flake8-force-keyword-arguments

Python linter인 flake8의 플러그인 개발

  • 기존 플러그인이 false alarm 문제가 있어서 개발
  • 정적 분석으로 파라미터가 여러개일 때 가독성을 위해 positional argument 대신 keyword argument를 사용하도록 가이드

외부 활동

Skills

업무에서 경험한 기술들입니다.

백엔드

  • Python, asyncio, Django, FastAPI, gunicorn, sqlalchemy
  • Golang, fiber
  • gRPC, Protobuf
  • Elasticsearch, Kafka, MemoryDB, Athena, DynamoDB
  • Pact, pytest
  • mypy, flake8, nitpick, poetry
  • IntelliJ

인프라

  • Kubernetes, Docker, Helm, ECK
  • Istio, Traefik
  • Terraform
  • Drone CI, Github Actions, Jenkins, Spinnaker
  • Datadog, Prometheus, Grafana, Loki, Sentry
  • Linux