정창권
저를 움직이게 하는 것은 성취감입니다. 저는 문제가 크든 작든 상관없이 문제를 해결했을 때 성취감을 얻습니다. 특히 제가 낸 아이디어로 문제를 해결했을 때 큰 성취감을 느낍니다. 저는 끊임없이 제 스스로에게 동기 부여를 하고 문제 해결을 위한 제 생각을 말하는데 주저하지 않습니다. 저는 문제 해결을 위한 다양한 의견들을 모아 하나의 해결책을 도출할 수 있다고 믿습니다. 제 생각뿐만 아니라 모든 사람들의 아이디어를 듣고 이를 바탕으로 건설적인 해결책을 찾습니다. 저는 이 마음가짐으로 동료들과 함께 문제를 해결하며 업무를 해왔습니다.
7년 동안 벡엔드 엔지니어로 이커머스 회사의 마케팅 도메인 팀에서 광고 시스템을 개발 및 운영했습니다. 최근에는 외부 디스플레이 광고 및 가격 비교 서비스를 위해 2억 개가 넘는 카탈로그 데이터를 처리하고 있습니다. 또한 키워드 검색 광고 시스템에서 사람이 관리하던 키워드 광고를 자동화하고 키워드를 6백만 개까지 확장한 경험이 있습니다. 저는 마케팅 도메인에서 비즈니스 성장에 초점을 두어 시스템 개발 및 운영을 했습니다.
업무 경험
쿠팡(Display Advertising Platform)
시니어 백엔드 엔지니어 (2020.01. ~ 현재)
사용한 기술: Spring Framework(Springboot), Flink, Spark, MySQL, Cassandra
디스플레이 광고 시스템 개선
디스플레이 광고 시스템은 오프-사이트 광고와 외부 가격 비교 사이트를 지원하는 시스템입니다. 이 시스템은 내부 카탈로그, 실적, 그리고 어디언스 등 내부 데이터를 외부 업체와 연동하는 작업을 담당하고 있습니다. 초기 MVP 시스템부터 최근까지 비즈니스 성장에 맞춰 시스템을 설계, 확장 및 개선 작업을 진행했습니다.
- 회사 내부의 모든 카탈로그를 처리하여 최대 2억개의 카탈로그를 10개 이상의 외부 업체와 연동
- 광고 퀄리티를 높이기 위해 준-실시간 카탈로그 데이터 처리 도입 및 쿠팡 내/외부 데이터를 활용하여 개선
- Spring Batch with MySQL로 구축한 시스템을 Spark Application으로 확장하여 시스템 개선
- 다양한 외부 업체 요구 사항을 유연하게 재사용할 수 있도록 설정하도록 백-오피스 개발 및 운영
- 핵심 프로젝트: 디스플레이 광고 시스템 개선 작업
기존 시스템은 MySQL 스토리지에 카탈로그 데이터를 저장하고 있었습니다. 시스템은 크기가 상대적으로 큰 카탈로그 데이터를 비정규화 상태인 JSON 값으로 저장하고 있었습니다. 그리고 해당 시스템은 준-실시간 처리로 업데이트 및 삭제 작업을 많이 수행했습니다.
그러나 데이터 row 하나당 크기의 증가 및 잦은 업데이트와 삭제 작업으로 인해 파편(Fragments)이 많이 발생하여 스토리지 성능에 악영향을 주고 있었습니다. 해당 문제를 해결하기 위해 데이터베이스 엔지니어와 협업하여 MyRocks 엔진을 도입하였고 성능을 크게 향상시켰습니다. 저 는 MyRocks 엔진을 알고 난 후 해당 엔진의 핵심 원리를 이해하고자 했습니다. 이후, MyRocks 엔진과 내부 구조가 비슷한 카산드라로 스토리지를 변경 작업을 진행했습니다. 스토리지 변경 이후 현재까지 안정적으로 시스템을 운영하고 있습니다.
마케팅 카탈로그 시스템 개편
타 도메인에서 관리하는 카탈로그를 광고 도메인에서 사용하도록 만드는 마이그레이션 시스템입니다. 비즈니스 성장에 따른 카탈로그도 증가했고 이에 맞춰 시스템 개편 작업을 진행했습니다. 초기 MySQL에서 Elasticsearch를 거쳐 최근에는 Cassandra로 마케팅 카탈로그 시스템을 구축했습니다.
- Flink 애플리케이션을 활용해 카프카 이벤트를 수신하여 카탈로그를 실시간으로 저장, 약 700K/분 데이터 처리
- MySQL에서 Elasticsearch 그리고 Elasticsearch에서 Cassandra로 시스템을 개편하며 30억 개가 넘는 카탈로그 데이터 저장
- 핵심 프로젝트: 마케팅 카탈로그 시스템 재구축
마케팅 카탈로그를 MySQL에서 Elasticsearch로 스토리지를 변경한 후, 비정형 데이터를 유연하게 저장하고 상대적으로 더 빠른 읽기 성능이 나왔습니다. 하지만 비즈니스 성장에 따라 데이터가 증가하였고 이에 따른 부차적인 문제가 발생했습니다
데이터가 커짐에 따라 처음에 설정한 샤드의 수를 조정할 필요가 있었고 이때마다 전체 데이터를 다시 인덱싱하는 작업이 필요했습니다. 특히, Disaster Recovery 테스트 시, Elasticsearch의 특정 노드가 죽고 다시 살아날 때, 데이터 샤드 재분배가 자동적으로 이뤄지지 않았습니다. 또한 키 기반의 읽기 작업도 원하는 수준의 성능을 보여주지 못했습니다.
이러한 문제를 해결하기 위해 Cassandra를 도입하여 마케팅 시스템을 재구 축했습니다. Secondary index를 사용할 수 없는 점, 범위 조회가 불가능한 점 등의 문제를 해결하며 Cassnadra를 안정적으로 적용했습니다.
쿠팡(Advertising Channel)
소프트웨어 엔지니어 (2017.01. ~ 2019.12.)
사용한 기술: Spring Framework, MySQL
키워드 검색 광고 시스템
키워드 검색 광고 시스템은 오프-사이트 광고를 위해 키워드 생성, 검증, 그리고 비딩까지 담당하여 외부 광고 업체와 연동하는 시스템입니다. 초기 MVP 시스템 설계부터 참여하여 개발 및 운영을 했습니다.
- 카탈로그 또는 내부 검색 키워드로부터 유의미한 키워드 추출 및 생성
- 매일 키워드 별 실적 기반으로 비딩 가격 재조정 및 랜딩 페이지 검증
- 자동화 시스템을 통해 외부 검색 광고 키워드 6백만개까지 확장
기타
경력
- 2020.01. ~ 현재(재직 중): Senior Back-end Engineer, Display Advertising Platform Dept. in Coupang
- 2017.01. ~ 2019.12.: Back-end Engineer, Advertising Channel Dep. in Coupang
교육
- 2011.03. ~ 2017.02.: Bachelor of Science in Computer Science and Engineering, Kyung-Hee Univ.