테스트 데이터는 무엇을 닮아야 하나
lorem ipsum은 영문 통계를 잘 닮지만 한글 레이아웃에는 맞지 않습니다. 무엇을 재현하고 무엇을 포기할지 정리했습니다.
화면을 만들 때 채울 내용이 필요합니다. 대체로 lorem ipsum을 넣습니다.
lorem ipsum이 실제로 닮은 것
같은 분량의 세 텍스트를 재 봤습니다.
글자 수 단어 수 평균 단어 길이
lorem ipsum 231 36 5.4
실제 영문 213 35 5.1
실제 한글 97 24 3.1
lorem ipsum의 평균 단어 길이가 실제 영문과 거의 같습니다. 라틴어 어원 텍스트를 골라 다듬은 것이라 영문의 통계를 잘 흉내 냅니다.
영문 레이아웃 테스트에는 적절합니다. 줄바꿈 위치, 문단 높이, 폰트 크기 판단이 실제와 비슷하게 나옵니다.
한글에서는 어긋난다
한글은 같은 내용을 훨씬 적은 글자로 담습니다.
lorem ipsum 231자 → 렌더 폭 231
실제 한글 97자 → 렌더 폭 168
글자 수는 2.4배 차이인데 화면 폭은 1.4배 차이입니다. 한글 글자 하나가 영문 두 자 폭을 차지하기 때문입니다.
여기서 두 가지가 어긋납니다.
글자 수 제한을 잘못 잡습니다. "제목은 30자까지"를 lorem으로 시험하면 짧아 보이는데, 한글 30자는 영문 60자 폭입니다. 반대로 영문 사용자에게는 30자가 너무 짧습니다.
줄바꿈이 다릅니다. 영문은 단어 단위로 끊기고 한글은 글자 단위로도 끊깁니다. 긴 단어 하나가 넘칠 때의 동작이 달라서, lorem으로는 그 경우를 못 봅니다.
다국어 화면이면 언어별로 실제 텍스트를 넣어 봐야 합니다.
평균보다 경계가 중요하다
레이아웃이 깨지는 자리는 평균값이 아니라 극단입니다.
"" 빈 문자열
" " 공백만
"a" 한 글자
"a" × 255 최대 길이
"👨👩👧👦" 자소 1, length 11
"한"(조합형) length 3, 보기엔 1자
"\"><script>" 이스케이프 검사
"0" "-1" "1e400" 숫자로 읽힐 수 있는 문자열
"NULL" null 로 읽힐 수 있는 문자열
이름이 한 글자인 사용자, 이름이 없는 사용자, 이모지가 들어간 사용자가 실제로 있습니다. 평균 길이의 lorem만 넣으면 이 경우들이 화면에서 어떻게 되는지 모릅니다.
"0"과 "NULL"은 특히 자주 걸립니다. 문자열로 들어온 "0"이 어딘가에서 거짓으로 평가되거나, 이름이 NULL인 사람의 데이터가 사라지는 일이 실제로 보고됩니다.
무작위 데이터의 함정
수천 건이 필요하면 무작위로 만들게 됩니다. 그런데 무작위는 실제 분포와 다릅니다.
실제 데이터는 한쪽으로 쏠려 있습니다. 사용자 대부분은 주문이 0~2건이고 소수가 수백 건입니다. 무작위 균등 분포로 만들면 그 소수가 없어서, 목록이 길어질 때의 성능 문제가 드러나지 않습니다.
실제 데이터에는 중복이 있습니다. 같은 이름, 같은 이메일 도메인, 같은 시각에 몰린 요청. 무작위로 만들면 전부 유일해서 중복 처리 로직이 시험되지 않습니다.
실제 데이터에는 빈 값이 있습니다. 선택 입력란은 대체로 비어 있습니다. 모든 필드를 채운 데이터로만 시험하면 빈 값 렌더링을 못 봅니다.
재현 가능해야 한다
테스트 데이터가 매번 달라지면 실패를 재현할 수 없습니다.
Math.random() // 매번 다르다
hash(seed + index) % N // 같은 시드면 같은 데이터
시드를 고정한 생성기를 쓰면 같은 데이터가 반복해서 나옵니다. 실패한 케이스를 그대로 다시 만들 수 있고, 팀원끼리 같은 데이터를 봅니다.
무작위가 필요한 자리와 재현이 필요한 자리가 다르다는 점은 다른 곳에서도 반복됩니다 — A/B 배정과 샤딩 키가 같은 이유로 결정적이어야 합니다.
확인 순서
- 다국어 화면이면 언어별 실제 텍스트를 넣어 봅니다. lorem으로는 폭이 안 맞습니다
- 빈 문자열·한 글자·최대 길이를 목록에 넣습니다
- 이모지와 조합형 문자를 하나씩 넣습니다. 글자 수 세기와 자르기가 걸립니다
"0"·"NULL"·"-1"같은 문자열을 넣습니다- 대량 데이터는 균등 분포가 아니라 실제 분포에 가깝게 만듭니다
- 생성기에 시드를 둡니다. 실패를 재현할 수 있어야 합니다
tools.onuel.dev의 Lorem Ipsum 생성기는 문단·문장·단어 단위로 분량을 정해 뽑고, 줄 반복은 같은 줄을 원하는 횟수만큼 번호를 붙여 늘립니다. 식별자가 필요하면 UUID v4, 숫자 범위는 난수 생성기이고, 만든 데이터의 길이를 확인할 때는 단어·문자 수 세기가 자소 단위로 셉니다.
- #테스트
- #더미데이터
- #레이아웃