비즈스프링에서 현재 진행중인 애드몬스터 쇼츠 광고시스템을 기술적으로 살펴보려고 합니다.
지난 시간에는 쇼츠 광고시스템을 구성하는 광고 구조 및 운영에 필요한 내용에 대해 살펴보았었는데요.
이번 시간엔 광고 송출에 대한 내용에 관해 기술적 관점으로 살펴보겠습니다.
이전 글 보기: 비즈스프링 쇼츠 광고시스템 기술적 관점으로 살펴보기 (1)
쇼츠 광고시스템 광고의 송출 과정
쇼츠 광고시스템 광고의 송출 과정은 다음과 같습니다.
- 광고 등록
- 광고 검수
- 검수 완료 및 광고 데이터 적재
- 노출/잔액요건에 따른 광고 소재 선별 및 출력
이 과정에 대해 기술적으로 살펴보겠습니다.
광고 등록
광고 목록에 출력하고 싶은 광고를 등록합니다.
가장 큰 광고 전략 단위인 캠페인, 중간 단위인 광고 그룹, 마지막으로 실제 게재되는 광고인 소재를 등록합니다.
등록이 완료되면, 소재는 자동적으로 검수 단계에 진입하게 됩니다.
광고 검수
광고 등록이 완료되면 광고가 바로 게재가 되는 것이 아닌, 검수를 받아 승인을 받게 됩니다.
검수란 해당 소재 생성시에 기입 했던 설정 내용이 이용 약관 혹은 규정에 어긋나지 않는지, 소재 내용이 실제 쇼츠 내용과 관련성이 있는 지 등을 확인하는 단계입니다.
광고 검수는 비즈스프링에서 진행하게 되며 내용에 따라 검수 보류 혹은 검수 완료 처리됩니다.
검수 완료 및 광고 데이터 적재
검수 처리가 완료되면 광고 목록에 출력을 하기 위해 Redis에 데이터를 저장하게 됩니다.
노출/잔액요건에 따른 광고 소재 선별 및 출력
사용자에게 보여 줄 광고를 선별하고 광고 페이지에 출력합니다.
사용자가 해당 광고를 보았는지, 해당 광고가 출력하기에 알맞은 상태인지 등을 Redis에 있는 데이터를 이용하여 확인 후 조건에 맞는 광고 데이터를 전송하여 광고 목록 페이지에 출력합니다.
Redis
애드몬스터 쇼츠 광고시스템 광고 등록 단계에서 Redis와 Kafka Streams를 이용하게 됩니다. 이전 글에서는 Kafka Streams에 대해 설명을 하였으니 이번 시간에는 Redis에 대해 알아보겠습니다.

Redis란?
Redis(Remote Dictionary Server)란 키(Key)와 값(Value)의 쌍으로 이루어진(프로그래밍의 Map) 구조의 데이터를 가진 인 메모리(In-Memory) 데이터베이스 관리 시스템입니다.
하드디스크에 데이터를 저장하는 일반 데이터베이스와 다르게 컴퓨터 메모리에 데이터를 저장 및 처리하는 것이 특징입니다.
이러한 특징으로 인하여 Redis는 메시지 브로커, 캐시 서버 등 데이터가 복잡하지 않으면서도 빠른 읽기 및 쓰기 성능을 요하는 곳에 사용하고 있습니다.
Redis Cluster
Redis Cluster란 Redis 서버를 여러개의 노드로 구성하고 Redis 에 들어오는 데이터를 자동으로 Sharding 해주는 기술입니다.

Redis Cluster는 Master-Slave 노드를 구성하고 있dmau, Master-Slave 노드의 특징은 다음과 같습니다.
- 각 노드별로 하나의 Master 존재
- 각 Master는 최소 1개 이상의 Slave 존재
- Master는 Read-Write Mode로 동작
- 데이터 쓰기의 경우 Master node에서 처리
- Slave는 Read-Only Mode로 동작
- 데이터 읽기의 경우 Master 혹은 Slave에서 처리
Redis Master-Slave 노드 방식에는 한 가지 단점이 존재합니다. 바로 다음과 같은 경우입니다.
- 데이터 쓰기 시 여러 개의 Master 노드 중 하나의 노드에 저장됩니다. 이 상황에서는 별 다른 문제가 없습니다.
- Client(데이터를 요청한 주체)가 데이터 읽기를 요청 시에 다른 Master 노드에 저장되어 있는 데이터를 요청하게 되면 해당 데이터가 저장된 Master 노드의 정보를 알려주게 됩니다.
Client는 해당 정보를 이용하여 해당 Master 노드에 다시 데이터를 요청해서 받을 수 있습니다.- 즉, 해당 데이터가 어디에 존재하는지 알지 못한 상태에서는 데이터 취득에 번거로움이 발생할 수 있습니다.
하지만, Redis Cluster를 지원하는 라이브러리(Lettuce, Redisson 등)은 대부분 Master 노드 정보를 통해 자동으로 데이터를 취득하는 기능을 제공하고 있기 때문에 해당 단점을 상쇄 시킬 수 있습니다.

쇼츠 광고플랫폼에서 사용하는 Redis 데이터
쇼츠 광고플랫폼에서 사용하는 데이터 중 Redis에 적재해서 사용하는 데이터는 광고의 정보, 광고 소비자의 정보를 사용하고 있습니다.
광고 정보
광고 정보의 경우 Hash 자료형으로 데이터를 저장 및 사용하고 있습니다. Hash 자료형은 Key-Value 한 쌍으로 이루어져 있는 레코드 유형입니다.(Java의 Map 혹은 Python의 Dictionary와 유사한 구조입니다)
광고의 정보를 캠페인, 광고 그룹 별로 데이터를 저장하여 사용함으로써 빠른 시간에 데이터 취득 및 광고 목록 출력에 도움을 주고 있습니다.
캠페인
127.0.0.1:6379> hgetall bsa:campaign:cmp-10-000000000001
1) "_class"
2) "kr.co.bizspring.ads.redis.domain.RedisCampaign"
3) "accountNo"
4) "2"
5) "campaignNm"
6) "캠페인명"
7) "campaignNo"
8) "1"
9) "createdAt"
10) "2025-01-14T12:43:11.395164332"
...
15) "locked"
16) "0"
17) "paused"
18) "0"
캠페인 ON/OFF 여부(locked), 캠페인 게시 상태(paused) 등을 체크하여 해당 캠페인 하위에 존재하는 광고 가능 여부를 체크합니다.
광고 그룹
127.0.0.1:6379> hgetall bsa:adgroup:grp-20-000000000009
1) "_class"
2) "kr.co.bizspring.ads.redis.domain.RedisAdgroup"
3) "accountNo"
4) "1"
5) "adgroupNm"
6) "광고그룹명"
7) "adgroupNo"
8) "9"
...
19) "locked"
20) "0"
21) "paused"
22) "0"
광고그룹 ON/OFF 여부(locked), 광고그룹 게시 상태(paused), 광고 일 예산 정보(budget)를 체크하여 광고 가능 여부를 체크합니다.
광고 소비자 정보
광고 소비자의 경우 Set 자료형으로 데이터를 저장 및 사용하고 있습니다. Set 자료형은 고유한 데이터를 여러 개 가지고 있는 순서 없는 집합 자료구조입니다.(Java의 Set 혹은 Python의 Set와 유사한 구조입니다.)
소비자별 조회한 광고의 정보를 가지고 있습니다.
198.18.1.244:6379> smembers bsa:user_ads:queen001__#__ads-20-000000000009:idx
1) "bsa:user_ads:userId:queen001"
2) "bsa:user_ads:campaignId:cmp-20-000000000009"
정보 목록은 Hash 구조로 이루어져 있습니다.
해당 목록 조회 시 광고 목록 송출, 조회 및 리워드 여부를 체크합니다.
198.18.2.215:6379> type bsa:user_ads:queen100__#__ads-10-000000000012
hash
198.18.1.244:6379> hgetall bsa:user_ads:queen100__#__ads-10-000000000012
1) "action.[preview]"
2) "preview,722563781OLZ4AJ0,1737012359172,2025-01-16 16:25:59"
...
13) "userId"
14) "queen100"
이상으로, 애드몬스터 쇼츠 광고시스템 중 광고 송출에 필요한 내용에 대해 정리해보았습니다. 쇼츠 광고플랫폼에 대해 궁금한 점이 있다면 언제든지 문의 해주시길 바랍니다.
감사합니다.
최신 마케팅/고객 데이터 활용 사례를 받아보실 수 있습니다.