ROI 자동 계산 시스템
비용 추적, 매출 기여 분석, ROAS 계산, 자동 ROI 리포트, 캠페인 성과 비교 시스템을 구축합니다.
ROI 자동 측정이 마케팅 효율화의 핵심
마케팅 ROI의 중요성
ROI(Return on Investment)는 투자 대비 수익률입니다. 마케팅에서 ROI를 정확히 측정하면 어떤 채널에 더 투자하고 어떤 채널을 줄여야 하는지 데이터 기반으로 결정할 수 있습니다.
많은 기업이 마케팅 예산을 "감"으로 배분합니다. "SNS가 중요하니까 더 투자하자", "경쟁사가 광고를 늘렸으니 우리도" 같은 의사결정은 비효율적입니다. ROI 자동 계산 시스템은 각 채널의 실제 투자 수익을 숫자로 보여주어, 예산 1원까지 최적으로 배분할 수 있게 합니다.
핵심 마케팅 ROI 지표:
ROI (투자 수익률): (매출 - 마케팅 비용) / 마케팅 비용 x 100%. 예: 100만원 투자 → 500만원 매출 = ROI 400%. 마이너스면 적자입니다.
ROAS (광고 수익률): 매출 / 광고비. 예: ROAS 4.0 = 1만원 투자 → 4만원 매출. 일반적으로 ROAS 3.0 이상이면 수익성 있음.
CAC (고객 획득 비용): 총 마케팅 비용 / 신규 고객 수. 예: 월 300만원 마케팅 → 100명 신규 = CAC 3만원.
LTV (고객 생애 가치): 평균 주문가 x 연간 구매 횟수 x 평균 유지 기간. LTV:CAC 비율이 3:1 이상이면 건강한 비즈니스.
CPA (전환당 비용): 총 비용 / 전환 수. 리드 생성 비즈니스에서 중요.
채널별 자동 계산
실시간 추적
자동 산출
채널별 비교
| 지표 | 계산 공식 | 좋은 기준 | 적용 상황 |
|---|---|---|---|
| ROI | (매출-비용)/비용 x 100% | 100% 이상 (2배 이상 회수) | 전체 마케팅 효율 평가 |
| ROAS | 매출 / 광고비 | 3.0 이상 | 유료 광고 채널 평가 |
| CAC | 총 비용 / 신규 고객 수 | LTV의 1/3 이하 | 고객 획득 효율 |
| LTV | AOV x 연구매횟수 x 유지기간 | CAC의 3배 이상 | 장기 수익성 평가 |
| CPA | 총 비용 / 전환 수 | 상품 마진의 50% 이하 | 리드 생성 캠페인 |
| Payback Period | CAC / (AOV x 마진율) | 3개월 이내 | 현금흐름 관리 |
비용 추적 시스템 구축
// =============================================
// 마케팅 비용 추적 시스템 - 완전 구현
// =============================================
class Marketing_Cost_Tracker {
private $table_name;
public function __construct() {
global $wpdb;
$this->table_name = $wpdb->prefix . 'marketing_costs';
}
// 데이터베이스 테이블 생성
public function activate() {
global $wpdb;
$charset = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS {$this->table_name} (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
channel VARCHAR(50) NOT NULL,
sub_channel VARCHAR(100) DEFAULT '',
campaign VARCHAR(255) DEFAULT '',
amount DECIMAL(12,2) NOT NULL DEFAULT 0,
currency VARCHAR(3) DEFAULT 'KRW',
cost_date DATE NOT NULL,
cost_type ENUM('advertising','content','tool','labor','other') DEFAULT 'advertising',
notes TEXT DEFAULT '',
auto_imported TINYINT(1) DEFAULT 0,
source VARCHAR(50) DEFAULT 'manual',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_channel_date (channel, cost_date),
INDEX idx_date (cost_date),
INDEX idx_campaign (campaign(100))
) {$charset};";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
// 비용 기록 (단건)
public function record_cost($data) {
global $wpdb;
return $wpdb->insert($this->table_name, array(
'channel' => sanitize_text_field($data['channel']),
'sub_channel' => sanitize_text_field($data['sub_channel'] ?? ''),
'campaign' => sanitize_text_field($data['campaign'] ?? ''),
'amount' => (float)$data['amount'],
'currency' => $data['currency'] ?? 'KRW',
'cost_date' => $data['date'],
'cost_type' => $data['cost_type'] ?? 'advertising',
'notes' => sanitize_textarea_field($data['notes'] ?? ''),
'auto_imported' => (int)($data['auto_imported'] ?? 0),
'source' => sanitize_text_field($data['source'] ?? 'manual'),
));
}
// 채널별 비용 합계
public function get_costs_by_channel($date_from, $date_to) {
global $wpdb;
return $wpdb->get_results($wpdb->prepare(
"SELECT channel,
SUM(amount) as total_cost,
COUNT(*) as entries,
COUNT(DISTINCT campaign) as campaigns,
MIN(cost_date) as first_cost,
MAX(cost_date) as last_cost
FROM {$this->table_name}
WHERE cost_date BETWEEN %s AND %s
GROUP BY channel
ORDER BY total_cost DESC",
$date_from, $date_to
), ARRAY_A);
}
// 캠페인별 비용 상세
public function get_costs_by_campaign($date_from, $date_to, $channel = null) {
global $wpdb;
$where = "cost_date BETWEEN %s AND %s";
$params = array($date_from, $date_to);
if ($channel) {
$where .= " AND channel = %s";
$params[] = $channel;
}
return $wpdb->get_results($wpdb->prepare(
"SELECT channel, campaign,
SUM(amount) as total_cost,
COUNT(DISTINCT cost_date) as days_active
FROM {$this->table_name}
WHERE {$where}
AND campaign != ''
GROUP BY channel, campaign
ORDER BY total_cost DESC",
...$params
), ARRAY_A);
}
// 일별 비용 추이
public function get_daily_costs($date_from, $date_to) {
global $wpdb;
return $wpdb->get_results($wpdb->prepare(
"SELECT cost_date, channel, SUM(amount) as daily_cost
FROM {$this->table_name}
WHERE cost_date BETWEEN %s AND %s
GROUP BY cost_date, channel
ORDER BY cost_date ASC",
$date_from, $date_to
), ARRAY_A);
}
// 총 비용 합계
public function get_total_cost($date_from, $date_to) {
global $wpdb;
return (float)$wpdb->get_var($wpdb->prepare(
"SELECT COALESCE(SUM(amount), 0) FROM {$this->table_name}
WHERE cost_date BETWEEN %s AND %s",
$date_from, $date_to
));
}
}
// Make.com 연동: 광고 비용 자동 가져오기 REST API
add_action('rest_api_init', function() {
// Google Ads 비용 임포트
register_rest_route('roi/v1', '/import/google-ads', array(
'methods' => 'POST',
'callback' => function($req) {
$data = $req->get_json_params();
$tracker = new Marketing_Cost_Tracker();
$imported = 0;
foreach ($data['campaigns'] ?? array() as $campaign) {
$tracker->record_cost(array(
'channel' => 'google_ads',
'sub_channel' => $campaign['network'] ?? 'search',
'campaign' => $campaign['name'],
'amount' => $campaign['cost'],
'date' => $campaign['date'],
'auto_imported' => 1,
'source' => 'make_google_ads',
));
$imported++;
}
return new WP_REST_Response(array('imported' => $imported));
},
'permission_callback' => function($req) {
return $req->get_header('X-API-Key') === get_option('dashboard_api_key');
},
));
// Meta(Facebook/Instagram) Ads 비용 임포트
register_rest_route('roi/v1', '/import/meta-ads', array(
'methods' => 'POST',
'callback' => function($req) {
$data = $req->get_json_params();
$tracker = new Marketing_Cost_Tracker();
$imported = 0;
foreach ($data['campaigns'] ?? array() as $campaign) {
$tracker->record_cost(array(
'channel' => 'meta_ads',
'sub_channel' => $campaign['platform'] ?? 'facebook',
'campaign' => $campaign['name'],
'amount' => $campaign['spend'],
'date' => $campaign['date'],
'auto_imported' => 1,
'source' => 'make_meta_ads',
));
$imported++;
}
return new WP_REST_Response(array('imported' => $imported));
},
'permission_callback' => function($req) {
return $req->get_header('X-API-Key') === get_option('dashboard_api_key');
},
));
// 수동 비용 입력
register_rest_route('roi/v1', '/costs', array(
'methods' => 'POST',
'callback' => function($req) {
$data = $req->get_json_params();
$tracker = new Marketing_Cost_Tracker();
$tracker->record_cost($data);
return new WP_REST_Response(array('status' => 'recorded'));
},
'permission_callback' => function() { return current_user_can('manage_options'); },
));
});
비용 추적에 포함해야 할 항목
정확한 ROI를 계산하려면 모든 마케팅 비용을 빠짐없이 추적해야 합니다. 흔히 누락되는 비용: (1) 광고비: Google Ads, Meta Ads, Naver 검색광고 등 (Make.com으로 자동 임포트). (2) 도구 비용: SEO 도구(Ahrefs, SEMrush), 이메일 서비스(Mailchimp), Make.com 구독료 등. (3) 콘텐츠 비용: 블로그 글 외주, 디자인 비용, 동영상 제작비. (4) 인건비: 마케팅 담당자 급여의 채널별 배분. (5) 기타: 호스팅 비용, 도메인, SSL 등 기술 인프라 비용. 도구/인건비는 월초에 수동으로 한 번 입력하고, 광고비는 Make.com으로 매일 자동 임포트하는 것을 권장합니다.
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.