본문 바로가기

자바

자바 아이디,닉네임,전화번호,생일 등 (더미데이터 생성기)

반응형

이번에 영화관 사이트를 만들면서

더미 데이터가 필요해졌다. 더미 데이 터란 게 많이 있으면 있을수록 좋기 때문에, 수작업 대신 자바로 생성기를 만들어보았다.

굉장히 많은 정보를 랜덤으로 생성할 때 쓸모있다.

난 오라클에 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구문이다.

INSERT 생성

그대로 복사해서 오라클에서 실행만 하면 된다.

모든 게 랜덤이기 때문에 다양한 통계자료와 실감 나는 사이트가 완성될 거 같다. ㅎㅎ

반응형