Discord 초대 코드별 신규 유저 잔존율 비교: 커뮤니티 파트너십 품질 평가 가이드
Discord 초대 코드별 신규 유저를 코호트로 묶어 D1·D7·D30 잔존율과 활성화율을 비교하는 실전 가이드입니다. 초대 수가 아닌 커뮤니티 참여와 게임 전환까지 분석해 파트너십 품질과 캠페인 투자 우선순위를 판단하는 방법을 다룹니다.

핵심 요약
Discord 초대 코드별 신규 유저 잔존율은 파트너마다 고유한 초대 코드를 발급하고 가입 이벤트를 코호트로 묶어 D1·D7·D30 활성률을 비교하면 측정할 수 있습니다. 단순 가입자 수보다 잔존율, 초기 활성화율, 게임 전환율, 표본 신뢰구간을 함께 봐야 커뮤니티 파트너십의 실제 품질을 평가할 수 있습니다.
- 초대 코드 하나를 파트너·캠페인·언어권 단위로 분리합니다.
- Discord 봇의
GuildMemberAdd이벤트와 초대 사용량 변화를 기록합니다. - 동일한 기간과 동일한 잔존 기준으로 코호트를 비교합니다.
- 표본 수가 작은 파트너는 신뢰구간과 함께 해석하고 단일 순위로 계약 여부를 결정하지 않습니다.
Discord 초대 코드별 잔존율 비교는 왜 필요한가?
파트너십 성과를 가입자 수로만 평가하면 대규모 노출을 만든 파트너가 항상 우수해 보입니다. 그러나 게임 커뮤니티에서는 가입 후 하루 만에 떠나는 유저 1,000명보다 실제로 채널을 읽고 이벤트에 참여하며 게임을 설치하는 유저 200명이 더 높은 사업적 가치를 만들 수 있습니다.
Discord 초대 코드별 코호트 분석은 다음 질문에 답하는 데 유용합니다.
| 질문 | 확인할 지표 |
|---|---|
| 어떤 파트너가 오래 머무는 유저를 데려오는가? | D7·D30 잔존율 |
| 유입 직후 커뮤니티에 적응하는가? | 첫 24시간 활성화율 |
| 홍보 문구와 실제 게임 기대가 일치하는가? | 게임 페이지 방문·위시리스트·설치 전환율 |
| 파트너의 영향력이 일시적인가? | 주차별 코호트 추이 |
| 계약 단가가 합리적인가? | 잔존 유저당 비용과 활성 유저당 비용 |
여기서 Discord 잔존율은 커뮤니티 잔존율입니다. 게임의 실제 D7 리텐션과 동일하지 않으므로 가능하다면 사용자의 명시적 동의를 받은 뒤 Discord 식별자와 게임 계정을 연결해 별도 분석해야 합니다.
Discord 신규 유저 잔존율은 어떻게 계산하는가?
먼저 신규 유저와 활성 유저의 정의를 고정해야 합니다. 추천 기준은 다음과 같습니다.
- 신규 유저: 해당 Discord 서버에 처음 가입한 사용자. 재가입자는 신규 코호트에서 제외합니다.
- 활성 유저: 가입 후 정해진 기간 안에 의미 있는 행동을 한 사용자입니다. 예를 들어 게임 관련 채널 열람, 메시지 작성, 이벤트 참여, 역할 수령 등을 사용할 수 있습니다.
- D1: 가입 후 1일차에 활성 조건을 충족한 비율입니다.
- D7: 가입 후 7일차에 활성 조건을 충족한 비율입니다.
- D30: 가입 후 30일차에 활성 조건을 충족한 비율입니다.
D7의 경우 정확히 7일차 활동을 보는 방식과 7일 이후 한 번이라도 활동했는지를 보는 롤링 방식이 있습니다. 어느 방식을 선택하든 모든 파트너에게 같은 기준을 적용해야 합니다. 시간대도 UTC 또는 한국 표준시 중 하나로 통일합니다.
예를 들어 1월 1일부터 1월 31일까지 가입한 사용자 중 2월 28일 이전에 7일차를 맞은 사람만 D7 계산 대상에 포함해야 합니다. 아직 7일이 지나지 않은 최근 가입자를 분모에 넣으면 파트너별 잔존율이 왜곡됩니다.
초기 활성화율은 다음처럼 계산할 수 있습니다.
핵심 행동은 커뮤니티의 목적에 맞게 정합니다. 출시 전 게임이라면 공지 채널 열람과 역할 수령을 기준으로 삼고 출시 후라면 파티 모집 참여, 버그 리포트, 게임 계정 연동 등을 사용할 수 있습니다.
초대 코드별 유입을 어떻게 추적할까?
Discord의 GET /invites/{invite.code}?with_counts=true API는 특정 초대 링크의 현재 사용량을 조회할 수 있습니다. 하지만 GuildMemberAdd 이벤트가 과거 가입자의 초대 코드를 직접 전달하는 것은 아닙니다. 실무에서는 봇이 초대 링크 사용량을 주기적으로 캐시한 뒤 가입 전후의 증가량을 비교해 사용된 코드를 추정합니다.
1단계: 초대 코드 체계를 먼저 설계한다
초대 코드를 재사용하지 말고 파트너와 캠페인의 조합마다 별도 코드를 발급합니다.
| 필드 | 예시 | 목적 |
|---|---|---|
partner_id | creator_kr_014 | 파트너 식별 |
campaign_id | launch-week-1 | 캠페인 구분 |
locale | ko-KR | 언어권 비교 |
invite_code | AbC123 | Discord 링크 식별 |
landing_variant | wishlist-a | 랜딩 페이지 실험 구분 |
하나의 코드를 여러 인플루언서가 함께 사용하면 이후에 유입 품질을 분리할 수 없습니다. 링크가 외부에 유출된 경우에는 해당 코호트를 별도 이상치 그룹으로 표시합니다.
2단계: Discord 가입 이벤트와 초대 사용량을 기록한다
아래 예시는 discord.js v14와 GuildMembers Gateway Intent를 사용하는 최소 형태입니다. 실제 운영에서는 이벤트를 데이터베이스에 저장하고 길드별 처리 큐와 재시도 로직을 추가해야 합니다.
import { Client, GatewayIntentBits } from 'discord.js';
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers],
});
const inviteUses = new Map<string, number>();
async function refreshInvites(guild: any) {
const invites = await guild.invites.fetch();
for (const invite of invites.values()) {
inviteUses.set(invite.code, invite.uses ?? 0);
}
}
client.once('ready', async () => {
for (const guild of client.guilds.cache.values()) {
await refreshInvites(guild);
}
});
client.on('guildMemberAdd', async (member) => {
const before = new Map(inviteUses);
const invites = await member.guild.invites.fetch();
const usedInvite = invites.find((invite) => {
const previousUses = before.get(invite.code) ?? 0;
return (invite.uses ?? 0) > previousUses;
});
if (!usedInvite) {
await saveJoin({
userId: member.id,
guildId: member.guild.id,
inviteCode: null,
joinedAt: new Date().toISOString(),
attributionStatus: 'unknown',
});
return;
}
await saveJoin({
userId: member.id,
guildId: member.guild.id,
inviteCode: usedInvite.code,
joinedAt: new Date().toISOString(),
attributionStatus: 'matched',
});
await refreshInvites(member.guild);
});
동시에 여러 명이 가입하면 같은 사용량 증가를 두 이벤트가 함께 읽을 수 있습니다. 따라서 길드별로 가입 이벤트를 순차 처리하고 주기적으로 초대 사용량을 재동기화해야 합니다. 봇이 오프라인인 동안 발생한 가입은 정확히 복구하기 어렵기 때문에 해당 시간대의 데이터를 unknown으로 분리하는 편이 안전합니다. 삭제·만료된 초대 링크와 Vanity URL도 별도 예외로 처리해야 합니다.
3단계: 코호트 데이터를 저장한다
최소한 다음 필드를 저장하면 잔존율과 파트너 비용을 연결할 수 있습니다.
| 필드 | 설명 |
|---|---|
user_id_hash | 원본 식별자를 대체한 해시 또는 내부 익명 ID |
partner_id | 초대 코드에 연결된 파트너 |
campaign_id | 유입 캠페인 |
joined_at | 최초 가입 시각 |
invite_code | 사용된 초대 코드 또는 unknown |
activated_at | 첫 핵심 행동 시각 |
d1_active, d7_active, d30_active | 각 잔존 기준 충족 여부 |
game_linked | 명시적 동의 후 게임 계정 연동 여부 |
acquisition_cost | 파트너 비용을 코호트에 배분한 금액 |
개인정보는 필요한 범위에서만 수집하고 원본 Discord ID를 분석 테이블에 그대로 보관하지 않는 것이 좋습니다. 계정 연동이나 마케팅 활용은 서버 공지와 개인정보 처리방침에 목적을 명확히 적어야 합니다.
파트너별 코호트 잔존율을 어떻게 비교할까?
PostgreSQL에 이미 일차별 활성 여부를 계산해 두었다면 다음과 같이 비교할 수 있습니다.
SELECT
partner_id,
COUNT(*) AS cohort_size,
AVG(CASE WHEN d7_active THEN 1.0 ELSE 0.0 END) AS d7_retention,
AVG(CASE WHEN d30_active THEN 1.0 ELSE 0.0 END) AS d30_retention,
AVG(CASE WHEN activated_at IS NOT NULL THEN 1.0 ELSE 0.0 END) AS activation_rate
FROM discord_user_cohorts
WHERE joined_at >= TIMESTAMP '2026-01-01'
AND joined_at < TIMESTAMP '2026-02-01'
AND joined_at <= CURRENT_TIMESTAMP - INTERVAL '30 days'
AND attribution_status = 'matched'
GROUP BY partner_id
HAVING COUNT(*) >= 30
ORDER BY d7_retention DESC;
이 쿼리의 HAVING COUNT(*) >= 30은 통계적 정답이 아니라 탐색용 최소 기준입니다. 계약 규모를 결정할 때는 파트너별 유입 수와 기간에 따라 더 큰 표본을 요구하고 95% 신뢰구간을 함께 제시해야 합니다.

잔존율만으로 순위를 정하지 않는다
유입 규모가 다른 파트너를 비교할 때는 다음 네 가지를 함께 봅니다.
| 지표 | 의미 | 의사결정 활용 |
|---|---|---|
| 가입자 수 | 도달 및 유입 규모 | 노출 확장성 판단 |
| 활성화율 | 가입 직후의 기대 일치도 | 온보딩·홍보 문구 개선 |
| D7·D30 잔존율 | 커뮤니티에 남는 정도 | 장기 파트너 후보 선정 |
| 잔존 유저당 비용 | 실제 남은 유저 확보 비용 | 계약 단가 협상 |
파트너 A가 1,000명을 데려와 D7 잔존율 8%를 기록하고 파트너 B가 200명을 데려와 25%를 기록했다면 단순 가입자는 A가 많지만 D7 잔존 유저는 각각 80명과 50명입니다. 예산 확대 여부는 목표가 도달인지 장기 커뮤니티 성장인지에 따라 달라집니다.
커뮤니티 파트너십 품질 점수는 어떻게 설계할까?
내부 비교용으로는 모든 지표를 0에서 1 사이로 정규화한 뒤 가중합을 사용할 수 있습니다.
위 가중치는 예시일 뿐입니다. 출시 전에는 위시리스트와 커뮤니티 활성화에 높은 가중치를 둘 수 있고 출시 후에는 게임 설치 후 실제 플레이와 결제 전환에 더 큰 가중치를 둘 수 있습니다. 모든 파트너에 같은 산식을 적용하고 원점수, 표본 수, 신뢰구간을 함께 저장해야 합니다.
실무 판정은 다음처럼 네 그룹으로 나누면 이해하기 쉽습니다.
| 유입 규모 | 잔존율 | 해석 | 권장 조치 |
|---|---|---|---|
| 높음 | 높음 | 확장 가치가 큰 핵심 파트너 | 장기 계약과 공동 캠페인 검토 |
| 높음 | 낮음 | 관심은 만들지만 기대 불일치 가능 | 홍보 소재와 타깃 재검토 |
| 낮음 | 높음 | 규모는 작지만 팬 품질이 좋음 | 성과형 단가와 장기 육성 검토 |
| 낮음 | 낮음 | 현재 조건에서 효율이 낮음 | 일시 중단 후 원인 분석 |
통계적 함정과 비교 조건
파트너 간 차이가 실제 품질 차이인지 확인하려면 다음 조건을 맞춰야 합니다.
- 같은 분석 기간과 같은 게임 빌드 또는 출시 단계
- 같은 언어권과 유사한 광고 소재
- 이벤트 보상, 역할 지급, 경품 여부
- 가입 요일과 시간대
- 모더레이션 정책과 채널 구조 변경
- 봇 계정, 중복 가입, 링크 유출 데이터
표본 수가 작은 파트너는 극단적인 잔존율이 쉽게 나타납니다. 탐색 단계에서는 30명 이상을 참고하되 중요한 계약 판단에서는 100명 이상의 코호트와 95% 신뢰구간을 권장합니다. 두 비율의 차이를 검정할 때 표본이 충분하면 두 비율 검정, 작은 표본이나 희소 이벤트에는 Fisher의 정확 검정을 사용할 수 있습니다. 여러 파트너를 반복 비교한다면 다중 비교에 따른 오탐도 고려해야 합니다.
Discord 잔존율을 게임 성과와 어떻게 연결할까?
Discord 가입은 게임 설치나 매출이 아닙니다. 따라서 파트너십의 최종 가치를 보려면 별도의 동의 기반 전환 경로가 필요합니다.
- 파트너별 Discord 초대 코드로 커뮤니티 유입을 기록합니다.
- 서버 온보딩 메시지에서 UTM이 포함된 Steam 또는 게임 랜딩 페이지를 제공합니다.
- 위시리스트, 데모 설치, 실제 플레이, 구매 같은 이벤트를 게임 분석 도구에 기록합니다.
- 사용자가 동의해 Discord와 게임 계정을 연결한 경우에만 두 코호트를 결합합니다.
- Discord D7 잔존율과 게임 플레이 D7 리텐션을 별도 지표로 보고 상관관계를 검토합니다.
이렇게 하면 가입자는 많지만 게임으로 전환되지 않는 파트너와 커뮤니티 규모는 작아도 실제 플레이어를 꾸준히 보내는 파트너를 구분할 수 있습니다.
자주 묻는 질문 FAQ
Discord guildMemberAdd 이벤트에서 사용된 초대 코드를 바로 알 수 있나요?
아니요. 이벤트에는 일반적으로 초대 코드가 직접 포함되지 않습니다. 봇이 가입 전후의 초대 사용량을 비교해 추정하며 동시 가입, 봇 오프라인, 삭제된 링크가 있으면 unknown으로 분류해야 합니다.
파트너별 잔존율은 몇 명부터 믿을 수 있나요?
절대적인 기준은 없습니다. 30명 이상은 탐색용, 100명 이상은 주요 계약 판단의 출발점으로 볼 수 있으며 반드시 표본 수와 95% 신뢰구간을 함께 확인해야 합니다.
Discord D7 잔존율이 게임 D7 리텐션을 의미하나요?
아닙니다. Discord D7은 커뮤니티 활동 유지율이고 게임 D7은 실제 플레이 유지율입니다. 두 지표는 각각 계산하고 동의 기반 계정 연동이 가능한 경우에만 전환 관계를 분석해야 합니다.
정리
Discord 초대 코드별 신규 유저 잔존율 비교의 핵심은 링크별 가입자 수를 세는 데 있지 않습니다. 파트너·캠페인별 코드를 분리하고 가입 이벤트를 안정적으로 수집한 뒤 동일한 코호트 기준으로 활성화율, D1·D7·D30 잔존율, 게임 전환율을 비교해야 합니다.
최종 평가에서는 잔존율이 높은 파트너를 무조건 확대하기보다 표본 신뢰도, 유입 비용, 타깃 적합성, 장기 게임 전환을 함께 고려하세요. 이 데이터가 쌓이면 커뮤니티 파트너십을 감이나 팔로워 수가 아니라 실제 남아 활동하는 유저의 가치로 평가할 수 있습니다.



