아론 벤튼은 혁신적인 모바일 애플리케이션 개발을 위한 창의적인 솔루션을 전문으로 하는 숙련된 아키텍트입니다. 그는 10년 이상 ColdFusion, SQL, NoSQL, JavaScript, HTML 및 CSS를 포함한 전체 스택 개발 분야에서 경력을 쌓았습니다. 현재 노스캐롤라이나주 그린즈버러에 위치한 Shop.com의 애플리케이션 아키텍트인 Aaron은 카우치베이스 커뮤니티 챔피언.

FakeIt 시리즈 1/5: 가짜 데이터 생성하기
다음에 대한 수많은 블로그 게시물이 있습니다. 데이터 모델링키 및 문서 패턴에 대해 설명합니다. 이 모든 게시물은 Couchbase에서 문서를 구조화하고 모델링하는 방법에 대한 훌륭한 소개를 제공하지만, 다음에 해야 할 일을 알려주는 게시물은 없습니다. 이 블로그 시리즈에서는 데이터 모델을 정의한 후에는 무엇을 해야 하나요? 라는 질문에 답해 보겠습니다.
사용자 모델
이 시리즈에서는 그린필드 이커머스 애플리케이션으로 작업할 것입니다. 대부분의 이커머스 애플리케이션과 마찬가지로 저희 애플리케이션에도 사용자가 있을 것이므로 여기서부터 시작하겠습니다.
먼저 기본 사용자 모델을 정의했습니다.
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "_id": "user_0", "doc_type": "user", "user_id": 0, "first_name": "Mac", "last_name": "Carter", "username": "Salma.Ratke", "password": "DvA6YrMGtgsKKnG", "email_address": "Ludie74@hotmail.com", "created_on": 1457172796088 } |
가장 어려운 부분인 모델을 정의하는 작업을 마쳤으니 이제 어떻게 해야 할까요?
- 이 모델을 어떻게 표현할까요?
- 이 모델을 어떻게 문서화하나요?
- 이 모델이 다른 모델의 데이터에 의존하나요?
- 이 모델에서 데이터를 어떻게 생성할 수 있나요?
- 가짜/테스트 데이터는 어떻게 생성할 수 있나요?
다행히도 다음과 같은 NodeJS 프로젝트가 있습니다. FakeIt 이 모든 질문에 답할 수 있습니다. FakeIt 는 yaml에 정의된 모델을 기반으로 json, yaml, yml, cson 또는 csv 형식의 가짜 데이터를 생성하는 명령줄 유틸리티입니다. FakerJS, ChanceJS 또는 사용자 정의 함수의 조합을 사용하여 데이터를 생성할 수 있습니다. 생성된 데이터는 다음과 같은 형식과 대상으로 출력할 수 있습니다:
- json
- yaml
- cson
- csv
- json, yaml, cson 또는 csv 파일의 Zip 아카이브
- 카우치베이스 서버
- 카우치베이스 동기화 게이트웨이 서버
JSON 모델을 표현하기 위해 YAML에서 FakeIt 모델을 정의할 수 있습니다. 이렇게 하면 문서화되고 데이터 유형이 지정된 모델을 통해 모델의 구조와 속성의 용도를 전달할 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
name: Users type: object key: _id properties: _id: type: string description: The document id built by the prefixed "user_" and the users id doc_type: type: string description: The document type user_id: type: integer description: The users id first_name: type: string description: The users first name last_name: type: string description: The users last name username: type: string description: The users username password: type: string description: The users password email_address: type: string description: The users email address created_on: type: integer description: An epoch time of when the user was created |
여러분은 아마 스스로에게 이렇게 말하고 있을 것입니다, "좋아요, YAML로 모델을 정의했는데 이게 무슨 소용이 있을까요?" 개발자가 개발을 시작할 때 직면하는 가장 큰 문제 중 하나는 작업할 데이터를 확보하는 것입니다. 문서를 수동으로 작성하고 버킷을 채우기 위해 버려지는 코드를 작성하는 데 엄청난 시간을 소비하는 경우가 많습니다. 또한 가져와야 하는 데이터베이스의 전체 또는 일부 데이터 덤프가 있을 수도 있습니다.
이러한 작업은 시간이 많이 걸리고 지루하며 데이터 덤프의 경우 사용 가능한 모델에 대한 인사이트나 문서를 제공하지 않습니다. FakeIt 모델에 모델 생성 방법을 설명하는 몇 가지 간단한 속성을 추가하면 단일 파일을 통해 끝없이 많은 양의 가짜 무작위 문서를 생성할 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
name: Users type: object key: _id properties: _id: type: string description: The document id built by the prefix "user_" and the users id data: post_build: `user_${this.user_id}` doc_type: type: string description: The document type data: value: user user_id: type: integer description: An auto-incrementing number data: build: document_index first_name: type: string description: The users first name data: build: faker.name.firstName() last_name: type: string description: The users last name data: build: faker.name.lastName() username: type: string description: The username data: build: faker.internet.userName() password: type: string description: The users password data: build: faker.internet.password() email_address: type: string description: The users email address data: build: faker.internet.email() created_on: type: integer description: An epoch time of when the user was created data: build: new Date(faker.date.past()).getTime() |
각 모델 프로퍼티에 해당 값을 생성하는 방법을 설명하는 데이터 프로퍼티를 추가했습니다. FakeIt은 값을 생성하는 5가지 방법을 지원합니다:
- pre_build: 함수를 사용하여 값을 초기화합니다.
- 빌드: 값을 작성하는 함수
- 가짜: 페이커JS 템플릿 문자열(예: {{인터넷.사용자명}})입니다.
- 값입니다: 사용할 정적 값
- post_build: 모델의 모든 프로퍼티가 설정된 후 실행되는 함수입니다.
이러한 빌드 함수는 자바스크립트 함수 본문입니다. 이러한 각 함수에는 실행 시 사용할 수 있는 다음 변수가 전달됩니다:
- 문서 - 생성된 각 문서의 배열을 값으로 하는 각 모델에 대한 키를 포함하는 객체입니다.
- 전역 - 실행 또는 빌드 함수에 의해 설정되었을 수 있는 전역 변수가 포함된 객체입니다.
- 입력 - 사용된 각 입력 파일에 대한 키가 포함된 객체로, 그 값은 파일 데이터의 역직렬화된 버전입니다.
- faker - FakerJS에 대한 참조
- chance - ChanceJS에 대한 참조
- document_index - 실행 순서에서 현재 생성된 문서의 위치를 나타내는 숫자입니다.
- require - 노드 require 함수이며, 자체 패키지를 요구할 수 있습니다. 더 나은 성능을 위해 pre_run 함수에서 요구하고 설정하세요.
예를 들어 사용자 이름 속성 빌드 함수를 살펴보면 다음과 같습니다:
|
1 2 3 |
function (documents, globals, inputs, faker, chance, document_index, require) { return faker.internet.userName(); } |
이제 모델을 생성하는 방법을 정의했으므로 이제 모델을 사용하여 가짜 데이터를 생성할 수 있습니다.
사용자 모델을 models/users.yaml 파일에 저장한 상태에서 다음 명령을 사용하여 콘솔에 직접 데이터를 출력할 수 있습니다.
|
1 |
fakeit console models/users.yaml |

이 동일한 모델을 사용하여 100개의 JSON 파일을 생성하고 다음 명령을 사용하여 출력/라는 디렉터리에 저장할 수 있습니다.
|
1 |
fakeit directory –count 100 –verbose output models/users.yaml |

또한 다음 명령을 사용하여 1,000개의 JSON 파일로 구성된 zip 아카이브를 만들 수 있습니다:
|
1 |
fakeit directory –count 1000 –verbose output/users.zip models/users.yaml |
다음 명령을 사용하여 모델의 단일 CSV 파일을 생성할 수도 있습니다:
|
1 |
fakeit directory –count 25 –format csv –verbose output/ models/users.yaml |
이렇게 하면 모델 이름인 단일 CSV 파일이 생성됩니다(이 경우 이름: Users, 결과 파일 이름은 Users.csv).

JSON 파일, Zip 아카이브 또는 CSV 파일을 사용하든 CLI 도구를 사용하여 이 모든 파일을 Couchbase Server로 가져올 수 있습니다. 도심형 로더 (*.json 및 *.zip 파일의 경우) 또는 cbimport (*.json 및 *.csv 파일용)
정적 파일을 생성하는 것은 유용하지만, 사용 가능한 CLI 도구를 통해 Couchbase Server로 파일을 가져와야 하는 추가 단계가 있습니다. FakeIt은 출력 대상으로 Couchbase Server 및 동기화 게이트웨이도 지원합니다. users.yaml 모델에서 10,000개의 JSON 문서를 생성하고 다음 명령을 사용하여 로컬로 실행 중인 Couchbase Server의 ecommerce라는 버킷으로 출력할 수 있습니다:
|
1 |
fakeit couchbase –server 127.0.0.1 –bucket ecommerce –count 10000 –verbose models/users.yaml |

결론
지금까지 속성 값이 어떻게 생성되어야 하는지 문서화하고 설명하기 위해 YAML을 사용하여 사용자의 JSON 모델을 표현하는 방법을 살펴보았습니다. 이 단일 users.yaml 파일은 콘솔, JSON 파일, JSON 파일의 Zip 아카이브, CSV 파일로 출력할 수 있으며 심지어 Couchbase로 직접 출력할 수도 있습니다. FakeIt은 개발 속도를 높이고 대규모 개발 데이터 세트를 생성할 수 있는 환상적인 도구입니다. 모든 개발자가 쉽게 반복할 수 있는 데이터세트를 위해 FakeIt 모델을 코드베이스의 일부로 저장할 수 있습니다.
FakeIt은 Couchbase 배포의 개발 및 테스트를 쉽게 하기 위한 도구입니다. 대량의 데이터를 생성할 수는 있지만 진정한 부하 테스트 도구는 아닙니다. 다음과 같은 로드 테스트 및 크기 조정에 사용할 수 있는 CLI 도구가 있습니다. cbc-pillowfight 그리고 cbworkloadgen
다음 단계
- FakeIt 시리즈 2/5: 공유 데이터 및 종속성
- 페이크잇 시리즈 3/5: 정의를 통해 본 린 모델
- FakeIt 시리즈 4/5: 기존 데이터로 작업하기
- FakeIt 시리즈 5/5: 동기화 게이트웨이를 통한 신속한 모바일 개발

[...] FakeIt 시리즈 5편 중 1편: 가짜 데이터 생성하기 FakeIt이 단일 YAML 파일을 기반으로 대량의 임의 데이터를 생성할 수 있다는 사실을 알게 되었고 [...]
[...] 지금까지 FakeIt 시리즈에서 가짜 데이터를 생성하고, 데이터와 종속성을 공유하고, 소규모 모델에 정의를 사용하는 방법을 살펴봤습니다. 오늘은 [...]을 살펴보겠습니다.
[...] FakeIt 시리즈 5편 중 1편: 가짜 데이터 생성 [...]
Couchbase 5.0 이상에서는 Couchbase의 사용자 이름과 비밀번호를 지정해야 합니다.
"fakeit couchbase" 명령에 -username(또는 -u) 및 -password(또는 -p) 매개변수를 추가하여 이 작업을 수행할 수 있습니다.