- Published on
더미 데이터로 커뮤니티 체감 검증하기 — 카테고리·작성자 분산 회고
- Authors

- Name
- Hyo814
더미 데이터로 커뮤니티 체감 검증하기 — 카테고리·작성자 분산 회고
포트폴리오용 커뮤니티 서비스를 만들 때 가장 무시받는 작업이 더미 데이터입니다. 기능은 다 되는데 화면을 켜보면 "글 3개, 전부 admin 작성" 이라서, 실제 쓰이는 서비스처럼 보이지 않습니다. 이번 카페 커뮤니티에서 더미 데이터 때문에 고생한 회고를 남깁니다.
1. 처음 만든 더미 데이터 — 뭐가 문제였나
처음에는 단순하게 접근했습니다.
for i in range(30):
Post.objects.create(
title=f'샘플 글 {i}',
content='...',
author=admin_user,
)
이 데이터로 화면을 열었을 때 발견한 문제:
- 게시판이 8개인데 글이 "자유게시판" 한 곳에 몰림 → 다른 카테고리 들어가면 텅 빈 페이지
- 작성자가 전부
admin→ 커뮤니티처럼 안 보이고 혼자 떠드는 블로그 같음 - 날짜가 전부 현재 시각 → 정렬/시간 포맷 검증 불가능
- 글 내용이 "샘플 글 1" 같은 단조로운 문자열 → 페이지네이션 UI에서 줄바꿈·말줄임이 제대로 보이는지 판단 안 됨
기능 테스트는 통과하는데 시각적인 품질이 전혀 안 맞았습니다.
2. 기준 1 — 카테고리별로 20개 이상 분산
페이지네이션을 한 페이지 10개로 잡았으니, 적어도 2페이지 이상 넘어가는 분량이 있어야 페이지네이션 UI가 말이 됩니다. "1페이지만 있으면 숫자만 보이고 이전/다음이 비활성화" 상태라 실전 검증이 안 됩니다.
# board/management/commands/populate_dummy_posts.py
CATEGORY_CODES = [
'free', 'review', 'job', 'ticket',
'creative', 'suggest', 'tip', 'online',
]
for code in CATEGORY_CODES:
for i in range(25): # 카테고리별 25개
Post.objects.create(
category=code,
title=TITLES[code][i % len(TITLES[code])],
...
)
처음에는 "전체 200개 뿌려지면 적당히 섞이겠지" 라고 생각했는데, 카테고리 필터를 걸면 해당 카테고리의 글 수만 나타나는 걸 잊고 있었습니다. 총량이 아니라 카테고리별 하한선이 기준입니다.
3. 기준 2 — 작성자를 5~10명으로 분산
작성자가 admin 하나면 커뮤니티가 아니라 공지사항입니다. 더미 유저를 미리 만들어 두고, 글마다 랜덤하게 배정했습니다.
# board/management/commands/populate_dummy_posts.py
import random
from accounts.models import User
DUMMY_NICKS = ['방탈출러버', '추리광', '강남토박이', '주말러너', ...]
def ensure_dummy_users():
users = []
for nick in DUMMY_NICKS:
user, _ = User.objects.get_or_create(
username=f'dummy_{nick}',
defaults={'nickname': nick},
)
users.append(user)
return users
def handle(self, *args, **options):
users = ensure_dummy_users()
for code in CATEGORY_CODES:
for i in range(25):
Post.objects.create(
category=code,
author=random.choice(users),
...
)
포인트:
- 닉네임을 실제 커뮤니티 톤에 맞게 지었습니다.
user1,user2는 티가 너무 납니다. dummy_프리픽스를 붙여서, 나중에 "더미 유저만 지우기" 가 가능하게 했습니다.
4. 기준 3 — 시각을 과거로 흩뿌리기
모든 글이 오늘 작성으로 찍히면 "3분 전, 3분 전, 3분 전…" 이 나열되어 시간 포맷 테스트가 안 됩니다.
import random
from datetime import timedelta
from django.utils import timezone
now = timezone.now()
post = Post.objects.create(...)
# 최근 90일 사이 임의 시각으로 덮어쓰기
post.created_at = now - timedelta(
days=random.randint(0, 90),
hours=random.randint(0, 23),
minutes=random.randint(0, 59),
)
post.save(update_fields=['created_at'])
Post.objects.create시점에서는created_at이auto_now_add=True때문에 현재 시각으로 박힙니다. 그래서 생성 후 덮어쓰기 가 필요합니다.- 2단계로 나눠 저장하는 건 약간 지저분하지만, 더미 데이터 한정이라 타협했습니다. 필드를
auto_now_add대신default=timezone.now로 두면 생성 시점에 직접 넣을 수 있습니다.
이 덕분에 상세 페이지에서 "N분 전", "N시간 전", "YYYY-MM-DD" 같은 분기 포맷을 한 번에 시각적으로 확인할 수 있었습니다.
5. 기준 4 — 본문은 최소 1문단 이상의 실제 한국어
"샘플 1", "샘플 2" 는 목록 화면에서 모든 행이 같은 너비라 말줄임표(...) 테스트가 안 됩니다. 카테고리별로 "자주 나올 법한 글 패턴"을 15~30개 정도 미리 적어두고, 로테이션으로 돌렸습니다.
REVIEW_TITLES = [
'어제 다녀온 XX테마 후기입니다',
'난이도 5성짜리 추천 좀 해주세요',
'처음 가는 사람인데 동선 조언 부탁드립니다',
# ... 25개 정도
]
이 작업이 가장 지겹지만, 포트폴리오를 보는 사람이 "실제로 쓰이는 서비스처럼" 느끼는가는 여기서 갈립니다.
6. 더미 데이터 전용 command로 분리
더미 데이터는 절대 운영에 나가서는 안 됩니다. 그래서 카페 시드(populate_cafe_data)와 분리해서 populate_dummy_posts라는 별도 커맨드로 두고, Makefile에서만 묶었습니다.
seed-cafe:
python manage.py populate_cafe_data
python manage.py sync_cafe_theme_seed
seed-dev: seed-cafe
python manage.py populate_dummy_posts
운영 배포 스크립트는 seed-cafe만 호출합니다. 실수로 더미가 들어가도 dummy_ 프리픽스 덕분에 회수할 수는 있지만, 애초에 안 들어가는 게 최선입니다.
7. 회고 — "기능 완성" 과 "서비스 완성" 은 다르다
이번 프로젝트에서 가장 크게 배운 건, 더미 데이터 품질이 서비스 첫인상의 80% 를 차지한다는 점입니다. 기능 체크리스트가 다 체크돼도, 화면이 비어 보이거나 가짜 같으면 완성도가 반으로 떨어집니다.
몇 가지 체크리스트로 정리하면:
- 카테고리별로 페이지네이션 2페이지 이상 분량
- 작성자 최소 5명 이상 분산
- 생성 시각을 과거로 흩뿌려 시간 포맷 분기 모두 커버
- 제목/본문은 실제 커뮤니티 톤의 문장
- 더미 유저/게시글은 프리픽스로 식별 가능하게
- 운영 배포 스크립트는 시드와 더미를 분리 실행
다음 프로젝트에서는 이 리스트를 그대로 들고 갈 생각입니다.