데이터베이스 더미데이터
개요
더미 데이터가 있으면 좋겠다 싶은 때가 종종 있다.
테스트 할 때, 서비스를 만들고 누군가에게 보여줄때.
이럴 때 사용할 수 있는 방법에 대해 정리해보려한다.
Mockaroo
Mockaroo는 Mock이라는 단어에서 착안하여 재치있는 네이밍을 한 서비스로 더미데이터를 생성할 수 있는 사이트다.
메인회면을 보면 다음과 같이 필드 이름과 타입을 설정할 수 있는 페이지가 나온다.
필드 이름은 테이블의 컬럼에 해당하고 타입은 생성될 더미데이터의 타입을 의미한다. 예를 들어 id의 Row Number는 1, 2, 3과 같이 순차적으로 증가하는 값으로 데이터가 생성되고 Email Address와 같은 타입은 주소 형식의 데이터가 생성된다.
우리의 서비스와 어울리는 타입을 설정하여 넣어주면 된다.
타입 다음으로 나오는 Blank는 생성되는 데이터 중에서 null인 값의 비율을 의미한다. 예를 들어 어떤 속성에 널을 허용하고 있다면 blank 퍼센트를 조절하여 실제 서비스와 유사하게 데이터를 만들어 넣을 수 있다.
그 다음 M을 옆으로 뉘어놓은 것 같은 버튼은 Formula로 생성될 데이터를 커스텀할 수 있다.
예시를 보면 알 수 있듯이 자동으로 생성되는 모든 값에 + 1을 하고 싶다던지 날짜 포멧을 변경하고 싶다던지 하는 것들을 여기서 설정할 수 있다.
만약 속성을 삭제하고 싶다면 가장 오른쪽 X버튼을 누르면 되고 새로운 속성을 만들고싶다면 하단의 ADD ANOTHER FIELD
버튼을 눌러 만들 수 있다.
이 부분을 보면 생성할 row의 수 즉, 만들고 싶은 더미데이터의 양을 설정할 수 있다. 무료로 만들 수 있는 데이터는 최대 1000개로 만약 더 많은 데이터를 만들고 싶다면 유료 플랜을 결제해야한다. 2024.08 기준 실버 요금제를 결제할 경우 1년에 60달러, 데이터는 최대 10만건 까지 생성이 가능하다. 다른 기능들도 있는 것 같은데 직접 결제하고 사용해보지 않아서 정확하게는 모르겠다.
format은 sql넣을 경우 sql을 선택한다.
처음 사용할 때 Table Name을 제대로 변경했는지 확인한 뒤 데이터를 생성해야한다. 생성되는 데이터는 insert…와 같이 주어지기 때문에 대상 테이블을 우리가 넣고자하는 테이블의 이름으로 설정해주어야한다.
만약 테이블 생성도 필요하다면 옆의 include create table
박스를 체크해주면 된다.
여기까지 했으면 하단의 preview
버튼을 눌러 확인해보자.
의도한대로 데이터가 나오는 것이 확인되면 generate data
버튼을 눌러 파일을 다운받으면 된다.
이렇게 하고 사이트를 닫으면 내가 설정한 값들이 날아간다. 백업용으로 남겨놓고 싶다면 스키마 기능을 이용하면 된다. 하단의 SAVE AS
버튼을 누르면 지금 설정대로 스키마를 만들 수 있다. 이렇게 하면 내 계정에 저장되어 나중에 다시 사용할 수 있다.
프로시저
프로시저란 MySQL에서 일종의 함수 프로그래밍을 할 수 있는 기능이다.
자세한 내용은 데이터베이스편을 참조…
DELIMITER //
CREATE PROCEDURE insert_dummy_data()
BEGIN
DECLARE i INT DEFAULT 1;
START TRANSACTION;
WHILE i <= 500000 DO
INSERT INTO dummy_data (name, value)
VALUES (CONCAT('Name', i), FLOOR(RAND() * 1000));
SET i = i + 1;
END WHILE;
COMMIT;
END //
DELIMITER ;
CALL insert_dummy_data();
반복문을 돌며 임의의 값을 넣는 함수를 작성하고 호출하면 된다.
이렇게 하면 빠르게 많은 데이터를 넣을 수 있다는 장점이 있지만 모카루처럼 랜덤식의 다양한 데이터를 넣기 힘들다는 단점이 있다.
만약 프로덕션 환경과 최대한 비슷한 데이터를 넣고싶다면 mockaroo를 추천한다.
프로그래밍 언어 활용하기
예를 들어 더미데이터를 넣는데 하나의 칼럼만 중요한 상황이라면 더 좋은 방법이 있다.
바로 랜덤한 값을 생성하도록 프로그래밍 언어로 스크립트를 작성하는 방법이다.
랜덤한 값을 생성한 뒤 sql의 문법에 맞추어 템플레이팅 시켜주고 파일로 저장하면 된다.
파이썬으로 예를 들어보면…
import random
import string
def generate_unique_strings(num_strings, min_length=3, max_length=30):
unique_strings = set()
while len(unique_strings) < num_strings:
length = random.randint(min_length, max_length)
random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=length))
unique_strings.add(random_string)
return list(unique_strings)
# 설정: 10,000건의 문자열 생성
num_strings = 10000
unique_strings = generate_unique_strings(num_strings)
# SQL 삽입 쿼리 생성 및 저장
with open('insert_data.sql', 'w') as file:
for i, string in enumerate(unique_strings, start=1):
sql_query = f"INSERT INTO club (id, title, content, category_id) VALUES ({i}, '{string}', 'Sample content', 1);\n"
file.write(sql_query)
print(f"Generated SQL insert queries and saved to 'insert_data.sql'.")
데이터가 적다면 실제 서비스 환경과 비슷한 데이터를 생성해주겠지만 수가 많아지면 그러기 힘드니 그럴 땐 프로시저나 이와 같이 직접 스크립트를 작성하는 방법으로 사용할 수 있겠다.