프로젝트에 쓰일 user 데이터가 필요했다.
현재 프로젝트는 대용량 트래픽, 대용량 데이터을 처리 해보는 목적을 갖고 있다.
그에 맞게 user 데이터가 10만 건이 필요했다.
Mockaroo
더보기


더미데이터를 생성하는 웹 사이트이다.
총 170개의 타입을 지정할 수 있으며, 어떤 식으로 데이터가 생성 되는지 preview를 통해 빠르게 확인할 수 있다.
단 무료버전으로는 1000개의 행만 생성할 수 있었다. 10만 건의 데이터가 필요한 나는 다른 길을 알아봤다.
만약 생성해야 할 데이터가 1000개 이하라면 Mockaroo가 훨씬 직관적이고 편한 방법이다.
Java Faker
더보기


Java Faker는 더미데이터를 생성할 수 있는 외부 라이브러리다.
gradle에 의존성만 부여해 주면 더미데이터를 생성할 수 있었다.
Faker 공부에 할애할 시간이 없었던 터라 GPT에게 작성해달라고 부탁했고, 10만건의 데이터를 얻을 수 있었다.
package com.example.javafaker.generator;
import com.github.javafaker.Faker;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Set;
@Component
public class UserDataGenerator {
@PostConstruct
public void generateCsvFile() {
Faker faker = new Faker();
Set<String> uniqueValues = new HashSet<>();
int numberOfUsers = 100000; // 10만건의 데이터를 생성
String csvFile = "users.csv";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try (FileWriter writer = new FileWriter(csvFile)) {
// CSV 헤더 쓰기
writer.write("created_at,id,updated_at,nickname,user_account_id,password\n");
for (int i = 1; i <= numberOfUsers; i++) {
String nickname;
String userAccountId;
// nickname 중복 및 길이 확인
do {
nickname = faker.name().username().replace(".", "");
} while (uniqueValues.contains(nickname) || nickname.length() > 16);
uniqueValues.add(nickname);
// userAccountId 중복 및 길이 확인
do {
userAccountId = faker.name().username().replace(".", "");
} while (uniqueValues.contains(userAccountId) || userAccountId.length() > 16);
uniqueValues.add(userAccountId);
// password 길이 확인
String password;
do {
password = faker.internet().password();
} while (password.length() > 64);
// createdAt과 updatedAt에 대한 타임스탬프 생성
Date createdAt = new Date(System.currentTimeMillis() - faker.number().numberBetween(1, 30) * 24L * 60 * 60 * 1000);
Date updatedAt = new Date(System.currentTimeMillis() - faker.number().numberBetween(1, 15) * 24L * 60 * 60 * 1000);
// CSV에 줄 쓰기
writer.write(dateFormat.format(createdAt) + "," + i + "," + dateFormat.format(updatedAt) + "," + nickname + "," + userAccountId + "," + password + "\n");
}
System.out.println("CSV 파일 생성 완료: " + csvFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
위의 코드로 인해 10만건의 user 정보가 담긴 csv 파일을 얻을 수 있었고, 이 csv 파일을 postgreSQL 콘솔창으로 데이터를 넣을 수 있었다.
COPY users FROM 'C:/Users/user/Desktop/javafaker/javafaker/users.csv' WITH CSV HEADER;
아래의 쿼리로 로컬 DB에 정상적으로 데이터가 생성 되었다.

SELECT COUNT(*) FROM users;

'Java' 카테고리의 다른 글
Java) 데몬 쓰레드와 사용자 쓰레드 (0) | 2023.09.18 |
---|---|
Java) 프로세스와 쓰레드 (0) | 2023.09.14 |
Java) 병목현상 해결 과정 (0) | 2023.08.23 |
JMeter 변수 설정 (0) | 2023.08.15 |
JMeter 성능 테스트 (0) | 2023.08.15 |