🍈

디스플레이 광고 시스템 분석하기 2편

디스플레이 광고 시스템 분석하기 1편에서 시스템의 역할에 대해서 간단하게 살펴봤다. 이번에는 이 시스템이 어떻게 시작되었는지 알아보자.

시스템의 탄생

디스플레이 광고 시스템은 배치 작업으로 이뤄졌다. 여러 이유가 있었지만, 피드 파일을 결과물로 내야하고 팀 내에서 스프링 프레임워크를 활용한 배치 작업을 주로 사용하고 있었기 때문이다. 더욱이 초기 시스템은 프로토타입으로 언제든지 사라질 수 있었기 때문에 시스템에 대한 설계와 방향성에 대해 많은 자원을 투자하지 않았다. 정제되지 않은 요구 사항과 적은 자원으로 적시에 결과물을 만들어내는 것이 중요했다. 

처음 만들어진 시스템은 앞서 살펴봤던 4단계가 명확하게 나눠지지 않았다. 핵심 개념은 있었지만, 초기에는 2단계가 있었다. 시스템은 컴포징과 셀렉팅을 합쳐서 진행하는 과정과 필터링과 컨버팅을 합친 과정으로 나눠졌다. 이 두 단계를 바탕으로 시스템도  두 개의 배치 잡으로 구성했다.

스프링 프레임워크를 활용해서 배치 잡을 만들었다. 데이터베이스에서 카탈로그 데이터를 읽어 컴포징과 셀렉팅 과정을 진행했다. 그리고 처리한 결과 데이터를 다시 데이터베이스에 저장했다. 이후에 다른 배치 잡이 앞서 저장한 처리 결과를 다시 데이터베이스로부터 읽어 필터링과 컨버팅 작업을 진행했다. 컨버팅 이후의 결과물은 피드 파일로 저장했다. 요약하자면 두 개의 배치를 순차적으로 실행하면서 카탈로그 데이터, 중간 결과 데이터, 그리고 최종 결과 데이터를 만들어냈다. 

문제점

카탈로그 일부가 광고 대상이 되지 않고 시스템에 의해 제외되는 문제가 발생했다. 시스템이 필터링 작업에서 불필요하게 더 많은 카탈로그를 제외시켰을까. 아니다. 문제의 원인은 필터링 작업 전에 셀렉팅 작업을 진행했기 때문이다. 

셀렉팅 단계는 하나의 상품에서 다수의 판매자가 있을 때 하나를 선택하는 작업이다. 시스템이 셀렉팅 작업에서 A 판매자와 B 판매자의 상품 중에서 A 판매자의 상품을 선택하고 이후에 시스템이 필터링 작업에서 A 판매자의 모든 상품을 제외한다고 생각해보자. B 판매자의 상품으로 광고할 수 있음에도 불구하고 해당 상품은 외부 광고에서 제외되었다.

시스템이 만들어지고나서 점차 비즈니스를 확장했다. 그러나 외부 업체를 확장하고 피드 파일의 형식 변경하는데 있어서 자원을 많이 낭비하고 있었다. 피드 컨버팅에 대한 모든 부분이 하드 코딩되어 있었기 때문이다. 외부 업체에 대한 피드 파일을 만들 때 마다 컨버팅에 대한 작업을 진행하고 배포를 진행했다. 물론 하드 코딩되어있기 때문에 파일에 대한 수정이 필요할 때 마다도 추가 배포를 진행했다. 외부 업체에 광고를 진행하는데 개발 및 배포에 대한 의존성 강해서 자원 낭비가 있었다. 뿐만 아니라 요구 사항을 바로 반영하지 못해 비즈니스에 부정적인 영향을 주었다.

피드 파일을 만드는 시간이 점점 늘어나면서 하나의 피드 파일을 만드는데 5-6시간이 걸렸다. 카탈로그 수가 많아지고 변경되는 카탈로그도 많아질수록 시스템이 다루는 데이터는 많아졌다. 배치 작업을 최대한 병렬 처리할 수 있도록 변경했음에도 불구하고 성능 측면에서 한계가 있었다. 배치 잡을 수행하는 인스턴스를 별도록 할당했지만 다수의 데이터베이스 읽기 작업, 데이터 처리를 더 빠르게 진행할 수 없었다. 

번외

시스템 초기에는 카탈로그 데이터를 팀 내의 데이터베이스가 아니라 다른 팀의 데이터베이스를 직접 접근했다. 그 당시 마이크로 서비스 아케텍쳐 작업이 이뤄지고 있었지만, 빠른 시스템 온보딩을 위해 어쩔 수 없이 타 팀의 데이터베이스를 직접 접근했다. 많은 작업에서도 그렇지만 사실 원론적인 이상향과 현실은 많은 간극이 있다고 생각했다. 마이크로 서비스 아키텍쳐를 한다고 해서 반드시 그러한 아키텍쳐를 구현하는 것은 힘들다. 그렇다고해서 무분별하게 아키텍쳐를 만들자는 말은 아니다. 마이크로 서비스 아키텍쳐를 지향하면서 현실적인 제약과 타협이 필요하다. 물론 몇 년 후, 시스템이 타 팀의 데이터베이스를 직접 접근하지 않도록 변경했다.

마케팅 특성인지는 잘 모르겠으나 시간이 중요하다. 지금 당장 아니면 최대한 빠르게 반영해야할 비즈니스가 있는가하면 한참 개발하는 와중에도 엎어지는 비즈니스도 있다. 다른 도메인도 마찬가지일 수 있지만, 마케팅 도메인지 더 민감하지 않을까. 이러한 성격을 가진 도메인인 것을 알았다면 처음부터 시스템을 구성할 때 도움이 되었을 것 같다.