2023-11-24 작성

Java에서 Generator 규칙에 따라 거래코드 만들기 (SecureRandom 난수 생성)

거래코드 생성 규칙이 아래와 같다고 가정하자.
=> 거래날짜yyyyMMdd(8)+난수(10)

Generator 파일을 만들어서 타 서비스에서 거래코드를 쉽게 가져다 쓸 수 있도록 소스를 만들어보았다. 이때 난수는 SecureRandom 클래스를 이용해서 알파벳, 숫자내에서 랜덤으로 10자리 생성된다.

Generator.java

import java.security.SecureRandom;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Generator {
	private final static String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

	/**
	 * 거래코드 생성 규칙 : 거래날짜(8)+난수(10)
	 * 
	 * @return 거래코드
	 */
	public String getTrxCode() {
		String rule1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
		String rule2 = _secureRandom(10);
		return rule1 + rule2;
	}

	/**
	 * 난수 생성
	 * 
	 * @param genNum 생성할 자릿수
	 * @return 난수
	 */
	private String _secureRandom(int genNum) {
		SecureRandom random = new SecureRandom();
		StringBuffer sb = new StringBuffer();

		for (int i = 0; i < genNum; i++) {
			int index = random.nextInt(CHARS.length()); // 무작위로 문자열의 인덱스 반환
			sb.append(CHARS.charAt(index)); // index의 위치한 랜덤값
		}
		return sb.toString();
	}
}

TrxCodeGenerator.java

public interface TrxCodeGenerator {
	String generate();
}

TrxCodeGeneratorImpl.java

public class TrxCodeGeneratorImpl implements TrxCodeGenerator {

	private final Generator generator = new Generator();

	@Override
	public String generate() {
		return generator.getTrxCode();
	}
}

BeanConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {

	@Bean
	TrxCodeGenerator trxCodeGenerator() {
		return new TrxCodeGeneratorImpl();
	}
}

서비스단에서 사용시

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.company.helloBoard.common.config.TrxCodeGenerator;
import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class TestServiceImpl implements TestService {
	
	@Autowired
	TrxCodeGenerator trxCodeGenerator;

	@Override
	public String getTrxCode() {
		
		String trxCode = trxCodeGenerator.generate();
		log.info("거래코드 : {}", trxCode); // 거래코드 : 20231123sMsKzr0R6c
	}
}