이번에 영화관 사이트를 만들면서
더미 데이터가 필요해졌다. 더미 데이 터란 게 많이 있으면 있을수록 좋기 때문에, 수작업 대신 자바로 생성기를 만들어보았다.
굉장히 많은 정보를 랜덤으로 생성할 때 쓸모있다.
난 오라클에 insert 할 데이터를 만들기 위해 만들었다. 필요한 부분만 뽑아서 수정, 추가해서 써도 무방하다.
원하는 데이터를 생성할 때 좋은 방법이다.
먼저 부연 설명 없이 바로 코드를 보여주겠다.
- 이름 랜덤 생성
package kr.th.bo.util;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class IDNEW {
public static String nName() {
List<String> 성 = Arrays.asList("김", "이", "박", "최", "정", "강", "조", "윤", "장", "임", "한", "오", "서", "신", "권", "황", "안",
"송", "류", "전", "홍", "고", "문", "양", "손", "배", "조", "백", "허", "유", "남", "심", "노", "정", "하", "곽", "성", "차", "주",
"우", "구", "신", "임", "나", "전", "민", "유", "진", "지", "엄", "채", "원", "천", "방", "공", "강", "현", "함", "변", "염", "양",
"변", "여", "추", "노", "도", "소", "신", "석", "선", "설", "마", "길", "주", "연", "방", "위", "표", "명", "기", "반", "왕", "금",
"옥", "육", "인", "맹", "제", "모", "장", "남", "탁", "국", "여", "진", "어", "은", "편", "구", "용");
List<String> 이름 = Arrays.asList("가", "강", "건", "경", "고", "관", "광", "구", "규", "근", "기", "길", "나", "남", "노", "누", "다",
"단", "달", "담", "대", "덕", "도", "동", "두", "라", "래", "로", "루", "리", "마", "만", "명", "무", "문", "미", "민", "바", "박",
"백", "범", "별", "병", "보", "빛", "사", "산", "상", "새", "서", "석", "선", "설", "섭", "성", "세", "소", "솔", "수", "숙", "순",
"숭", "슬", "승", "시", "신", "아", "안", "애", "엄", "여", "연", "영", "예", "오", "옥", "완", "요", "용", "우", "원", "월", "위",
"유", "윤", "율", "으", "은", "의", "이", "익", "인", "일", "잎", "자", "잔", "장", "재", "전", "정", "제", "조", "종", "주", "준",
"중", "지", "진", "찬", "창", "채", "천", "철", "초", "춘", "충", "치", "탐", "태", "택", "판", "하", "한", "해", "혁", "현", "형",
"혜", "호", "홍", "화", "환", "회", "효", "훈", "휘", "희", "운", "모", "배", "부", "림", "봉", "혼", "황", "량", "린", "을", "비",
"솜", "공", "면", "탁", "온", "디", "항", "후", "려", "균", "묵", "송", "욱", "휴", "언", "령", "섬", "들", "견", "추", "걸", "삼",
"열", "웅", "분", "변", "양", "출", "타", "흥", "겸", "곤", "번", "식", "란", "더", "손", "술", "훔", "반", "빈", "실", "직", "흠",
"흔", "악", "람", "뜸", "권", "복", "심", "헌", "엽", "학", "개", "롱", "평", "늘", "늬", "랑", "얀", "향", "울", "련");
Collections.shuffle(성);
Collections.shuffle(이름);
return 성.get(0) + 이름.get(0) + 이름.get(1);
}
public static void main(String[] args) { // 이름
for (int i = 0; i < 500; i++) {
if(i % 10 == 0) {
System.err.println();
}
System.err.print(nName()+" ");
}
}
}
성과 이름을 여러 가지 담은 LIST를 Collections.shuffle() 함수를 사용해 랜덤으로 정렬해준다.
그 후에 성과 이름을 합쳐서 보여주면 이름들이 나온다 이제 긁어서 쓰면 끝!
이런 식으로 여러 가지를 랜덤으로 생성할 수 있는데 몇 가지 보여주도록 하겠다.
- 아이디 랜덤 생성
IDNEW 클래스 일부
public static String nId() {
String text = "";
String ran = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for(int i = 0; i < 6; i++) {
text += ran.charAt((int)(Math.random() * ran.length()));
}
return text;
}
public static String nNo2() {
return (int)(Math.random() * 99)+1 +"";
}
public static void main(String[] args) { // 아이디
for (int i = 0; i < 500; i++) {
if(i % 10 == 0) {
System.err.println();
}
System.err.print(nId()+nNo2()+" ");
}
}
이것도 마찬가지로 메커니즘은 같다. 알파벳 대소문자를 랜덤으로 뽑아 그 뒤에 랜덤 숫자를 붙이는 것이다.
아이디는 보통 유니크하기 때문에 겹쳐선 안된다. 하지만 위처럼 랜덤으로 뽑으면 겹 칠일은 매우 매우 적을 것이다.
좀 더 겹치지 않게 만들려면 글자 수를 늘리거나 뒤에 숫자의 폭을 늘리면 좀 더 확률이 늘어나게 된다.
다음은 전화번호이다.
- 전화번호 랜덤 생성
IDNEW 클래스의 일부
public static String nPhone() {
List<String> 번호 = Arrays.asList("010","011","012","013");
Collections.shuffle(번호);
return 번호.get(0);
}
public static String nNo() {
return (int)(Math.random() * 8999)+1000 +"";
}
public static void main(String[] args) { // 전화번호
for (int i = 0; i < 500; i++) {
if(i % 10 == 0) {
System.err.println();
}
System.err.print(nId()+nNo2()+" ");
}
}
전화번호는 앞자리 010~013까지 랜덤으로 그 뒤는 1000부터 9999까지 랜덤으로 뽑도록 했다. 원래라면 0001 부 터지만,
그렇게 하면 굉장히 귀찮아지기 때문에 0001~0999 까지는 포기했다.
전화번호도 겹치면 안 될 수도 있다. 이건 아이디보다 겹칠 확률이 조금이라도 많기 때문에 더미 데이터를 자신이 매우 많이 넣을 것이다. 하면 앞자리를 010부터 019까지 늘린다거나 하면 된다.
다음은 생일이다.
- 생일 랜덤 생성
IDNEW 클래스의 일부
public static List<String> 도 = Arrays.asList("00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18");
public static List<String> 년도 = Arrays.asList("19","20");
public static List<String> 월 = Arrays.asList("01","02","03","04","05","06","07","08","09","10","11","12");
public static List<String> 일 = Arrays.asList("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30");
public static String nBirDate() {
Collections.shuffle(년도);
Collections.shuffle(월);
Collections.shuffle(일);
String text = 년도.get(0);
if(text.equals("19")) {
text += ((int)(Math.random() * 69) + 30) + "";
}else if(text.equals("20")) {
Collections.shuffle(도);
text += 도.get(0);
}
return text+"/"+월.get(0)+"/"+일.get(0);
}
public static void main(String[] args) { // 생일
for (int i = 0; i < 500; i++) {
if(i % 10 == 0) {
System.err.println();
}
System.err.print(nBirDate()+" ");
}
}
생일은 1900년도와 2000년도로 나뉘어 있는데 랜덤으로 뽑아서 만약 19년도일 경우 1930년도부터 1999년도까지 만들어주고 2000년도 일 경우 2000년도부터 2018년도까지로 설정했다.
그 후에 달과 월은 Collections.shuffle() 함수를 통해 랜덤으로 붙여주었다. 이 방법으로 다양한 연령층의 생일을 얻게 되었다.
다음은 대망의 닉네임이다.
- 닉네임 랜덤 생성
IDNEW 클래스의 일부
public static String nNick() {
List<String> 닉 = Arrays.asList("기분나쁜","기분좋은","신바람나는","상쾌한","짜릿한","그리운","자유로운","서운한","울적한","비참한","위축되는","긴장되는","두려운","당당한","배부른","수줍은","창피한","멋있는",
"열받은","심심한","잘생긴","이쁜","시끄러운");
List<String> 네임 = Arrays.asList("사자","코끼리","호랑이","곰","여우","늑대","너구리","침팬치","고릴라","참새","고슴도치","강아지","고양이","거북이","토끼","앵무새","하이에나","돼지","하마","원숭이","물소","얼룩말","치타",
"악어","기린","수달","염소","다람쥐","판다");
Collections.shuffle(닉);
Collections.shuffle(네임);
String text = 닉.get(0)+네임.get(0);
return text;
}
public static void main(String[] args) { // 닉네임
for (int i = 0; i < 500; i++) {
if(i % 10 == 0) {
System.err.println();
}
System.err.print(nNick()+" ");
}
}
사실 닉네임은 아이디와 다르게 자신을 표현하는 거이기 때문에, 좀 더 의미가 있어야 된다고 생각했다.
그래서 생각해보다가 카카오톡에 캡처 모자이크 기능에서 착안해서 앞에는 기분을 나타내는 형용사를 붙이고 뒤에는 동물을 붙여서 재밌고, 다양한 닉네임을 만들 수 있게 하였다.
지금까지 더미 데이터 생성에 필요한 것들을 랜덤으로 생성해보았다.
그냥 시퀀스나 for문을 돌려서 만들 수 도 있지만 이렇게 생성기를 만들어 놓으면, 조금 더 실제 사용자들과 같이 다양하게 보이고 보는 맛이 있을 거 같다. 또한 자신이 원하는 게 있으면 바로바로 추가해서 만들 수 있기 때문에 좋다.
예시로 위 생성기를 통해 만든 오라클 DB 더미 데이터 INSERT구문이다.
그대로 복사해서 오라클에서 실행만 하면 된다.
모든 게 랜덤이기 때문에 다양한 통계자료와 실감 나는 사이트가 완성될 거 같다. ㅎㅎ
'자바' 카테고리의 다른 글
자바(JAVA) 채팅 프로그램(2) (웹 소켓 TCP/IP) (1) | 2019.06.27 |
---|---|
자바(JAVA) 채팅 프로그램(1) (웹 소켓 TCP/IP) (0) | 2019.06.27 |