Faker는 가짜 데이터를 생성하는 데 사용되는 JavaScript 라이브러리로 실제 데이터베이스가 없어도 개발 및 테스트 목적으로 가짜 데이터를 생성할 수 있다. Faker는 여러 가지 형식의 가짜 데이터를 생성할 수 있으며, 이름, 주소, 이메일 주소, 전화번호, 회사 이름 등과 같은 다양한 유형의 데이터를 생성할 수 있다.
npm i faker
개발을 하다보면 테스트 데이터가 많이 필요하다. 수많은 데이터를 일일히 데이터 베이스에 데이터를 넣어줄수 없기 때문에 faker를 이용하여 데이터를 생성하고 데이터 베이스에 데이터를 저장해보려고 한다. 해당 링크에 들어가면 조금더 자세한 설명을 볼수 있다. https://www.npmjs.com/package/@faker-js/faker?activeTab=readme
간단한 예제 코드를 살펴보고 실제로 프로젝트에 적용하는 코드를 작성해 볼것이다.
// faker 모듈 가져오기
const faker = require("faker");
// 가짜 이름 생성
const name = faker.name.findName();
console.log("이름:", name);
// 가짜 주소 생성
const address = faker.address.streetAddress();
console.log("주소:", address);
// 가짜 이메일 주소 생성
const email = faker.internet.email();
console.log("이메일:", email);
// 가짜 회사 이름 생성
const company = faker.company.companyName();
console.log("회사:", company);
이렇게 코드를 작성하고 결과를 보면 잘 생성이 된것을 확인할수 있다.
이제 faker를 이용해 실제로 블로그 프로젝트에서 faker를 활용해 테스트 데이터를 생성할것이다.
const faker = require("faker");
const { User, Blog, Comment } = require("./src/models");
generateFakeData = async (userCount, blogsPerUser, commentsPerUser) => {
if (typeof userCount !== "number" || userCount < 1)
throw new Error("userCount must be a positive integer");
if (typeof blogsPerUser !== "number" || blogsPerUser < 1)
throw new Error("blogsPerUser must be a positive integer");
if (typeof commentsPerUser !== "number" || commentsPerUser < 1)
throw new Error("commentsPerUser must be a positive integer");
const users = [];
const blogs = [];
const comments = [];
console.log("Preparing fake data.");
for (let i = 0; i < userCount; i++) {
users.push(
new User({
username: faker.internet.userName() + parseInt(Math.random() * 100),
name: {
first: faker.name.firstName(),
last: faker.name.lastName(),
},
age: 10 + parseInt(Math.random() * 50),
email: faker.internet.email(),
})
);
}
users.map(async (user) => {
for (let i = 0; i < blogsPerUser; i++) {
blogs.push(
new Blog({
title: faker.lorem.words(),
content: faker.lorem.paragraphs(),
islive: true,
user,
})
);
}
});
users.map((user) => {
for (let i = 0; i < commentsPerUser; i++) {
let index = Math.floor(Math.random() * blogs.length);
comments.push(
new Comment({
content: faker.lorem.sentence(),
user,
blog: blogs[index]._id,
})
);
}
});
// 가공된 데이터들을 insertMany() 메서드로 MongoDB에 저장
console.log("fake data inserting to database...");
await User.insertMany(users);
console.log(`${users.length} fake users generated!`);
await Blog.insertMany(blogs);
console.log(`${blogs.length} fake blogs generated!`);
await Comment.insertMany(comments);
console.log(`${comments.length} fake comments generated!`);
console.log("COMPLETE!!");
};
module.exports = { generateFakeData };
이렇게 faker를 이용하여 데이터들을 받아왔고 받아온 데이터들을 가공해서 express에서 MongoDB에 데이터를 넣는 코드를 작성해 보았다.
이 데이터베이스가 연결되고 함수를 실행해주고 MongoDB compass를 통해 생성된 데이터를 확인해 보면 의도한 개수대로 데이터가 생성된것을 확인할수 있다.