[회고] 버즈니에서 검색 백엔드 엔지니어로 사는 이야기

2 minute read

2019.03~ 버즈니에서 1년 9개월이라는 시간이 지났다. 찰리라는 닉네임으로 백엔드 엔지니어 역할을 맡고있다.


검색 백엔드 엔지니어, 찰리

검색팀에 함께한 1년 6개월동안 APM, 프로파일러를 활용하여 장애의 주요 원인들을 찾고, failover 시스템, 서킷브레이커 구축을 통해 단기적 개선을 하고, ES2→ES7 마이그레이션으로 근본적인 개선을 하는 길고도 짧은 한 사이클을 경험했다. 처음엔 막연하게 서비스를 개발하고 싶었는데, 자유롭고 주도적인 시도를 할 수 있는 기회를 준 버즈니가 좋았다.

장애 원인 파악

검색 slow의 주요 원인을 찾는 경험을 했다. 파이썬 프로파일링 도구, APM 도구들을 활용했다. elastic apm을 falcon에서 쉽게 사용할 수 있도록 간단한 middleware 라이브러리 형태로 만들어서 적용했다.

falcon elastic apm 라이브러리 구현 (github)

APM을 활용하면 어떤 요청에서 latency가 높은지 디테일한 로그들을 볼 수 있어서 좋았다.

failover 시스템 구축

네이버 메인 페이지의 트래픽 처리 라는 글을 재미있게 읽었다. 지진 등 자연재해로 인해 네이버 메인의 트래픽이 급증할때 failover 시스템을 구축해서 대응했다는 사례였다. 버즈니 검색에서 비슷한 사례를 구축할 수 있을까? 작은 도전적인 목표가 생겼고, 마침 회사가 무언가 도전하기에 자유로운 분위기라서 버즈니 검색팀에 failover 시스템을 구축해보았다.

파이썬 API 앞단 nginx 레이어에 서킷브레이커 failover 시스템 구축

nginx 문서를 살펴보니 proxy_next_upstream 이라는 훌륭한 기능이 있었다. 캐싱 결과가 없는 트래픽은 의도적으로 400 exception을 발생시키도록 했다. 해당 트래픽들은 nginx proxy_next_upstream을 통해 실 서비스 API로 전달되었다. 생각보다 심플한 코드로 금방 프로토타입 형태가 만들어졌고, 테스트를 진행해보니 긴급 상황에 약 70% 이상의 트래픽을 캐싱 시스템에서 처리할 수 있다는 결과를 확인했다. 해당 부분들을 팀에 정리해서 건의했더니, 긍정적인 피드백을 받았다. 시스템을 더욱 안정적으로 발전시킬 수 있도록 팀에서 격려와 응원을 해주었다. 당시 함께 검색 백엔드 영역에서 고군분투했던 내 옆자리의 티거는 서킷브레이커ES 산소호흡기라는 별명을 붙여주었고, 이 산소호흡기 덕분에 트래픽이 급증하는 저녁 시간도 긴급하게 맥북을 켜거나 슬랙으로 장애를 알리거나 ES 클러스터들을 재부팅하는 등의 노력을 할 필요가 없어졌다. 홈쇼핑모아 유저들이 조금 더 쾌적한 서비스를 이용할 수 있다는 부분이 뿌듯했고, 퇴근 후 시간에 개인적인 시간과 여유를 가질 수 있었다. 여자친구랑 사이가 좋아졌다. 행복지수 상승!

검색 로직 개선

ES CPU가 느려지는 주요한 원인들을 찾고 싶었다. 레거시 코드중 동의어 관련 로직과 랭킹스크립트 관련 로직에서 비효율적인 부분들을 찾았고 개선했다.

동의어 관련 로직 개선 랭킹스크립트 적용 대상 최적화

일 평균 6회 이상 동작했던 서킷브레이커는 일 평균 1회 동작하는 상태로 일부 안정되었다.

ES2→ES7 마이그레이션

es major 버전을 2에서 7로 올리는 과정을 진행했다. 과정에서 데이터 누락, 의도치 않은 버그, 사이드이팩트가 발생하지 않을지 걱정이 있었다. 메트릭들을 촘촘히 구성해서 모니터링했다. 샘플링 데이터들을 만들어서 테스트를 돌려보고, 1~2주간 a/b test를 진행하는 과정을 통해 크고 작은 리스크들을 제거했다. 색인 마이그레이션 과정에서 속도를 내기위해 함께 TF를 만들어서 3일간 행아웃으로 데이터팀 데미안과 함께 페어프로그래밍을 진행했다.


deprecated query 개선 인덱스 도큐먼트 구조 개선 groovy 기반 랭킹스크립트 painless 변경
query_dsl 동적생성 파이썬 코드 리팩토링(>2000 Line) 세그멘터(외부 api 형태) 교체 aws cloudwatch 메트릭 추가(>20개)
누락 데이터 모니터링 대시보드 pandas 데이터 분석 (10000개 query 샘플 대상) A/B 테스트 실 서비스 전체 배포

실 서비스 배포 이후 p99 latency는 기존 4초에서 0.7초로 개선되었고, 서킷브레이커는 이후 0회 동작했다.

집중이 안됐던 순간들

집중이 안될때는 11층에 내려가서 자유롭게 잠을 자거나 탁구를 치거나 다트를 던지며 휴식을 취할수 있었다. 버즈니는 자유롭게, 주도적으로 생각한 아이디어들을 시도해볼 수 있는 분위기를 갖고있다. 최근에는 직원수가 많아지면서 많은 인원이 활용 가능한 3층의 버즈니 라운지 형태로 개편이 되었다. 이로인해 탁구대는 없어졌지만, 피곤할때 잠을 자거나 집중이 안될 때 내려가서 다트를 던질 수 있었다.

이안과 함께 하던 어느날, BULL을 연속으로 3번 맞추는 목표에 성공! (다트 꿀잼)

그리고 커머스팀으로

지금은 1년 6개월간의 검색팀을 지나 지금은 커머스팀에서 백엔드 역할을 하고있다. 회원 시스템 개선, 신규 기능 추가 업무를 하고있다. 새로운 커머스의 한 사이클에서는 어떤 경험들이 함께할지, 긴장도 되고 기대도 된다. 버즈니 커머스 화이팅!

레거시 유저 시스템 개선

버즈니 채용 추천 문의

버즈니에서 함께 성장하실 인재분들은 성장의 즐거움이 있는 버즈니로 오세요~
추천인 이메일: charlie@buzzni.com