서버에 설정을 살펴보던 중에 "java.security.egd" 옵션을 발견하게 되었고, 해당 설정이 어떠한 역할을 하는지 궁금하여 찾아본 내역을 정리해 보자.
정의
jvm 설정 중에 하나로
Java에 "SecureRandom" 클래스를 초기화 하는 방식에 영향을 미치는 옵션이다.
대부분의 설정값은 default값이 존재한다.
해당 default값을 사용하지 않고 따로 설정을 해주었다는 것은
기존에 default값을 사용할 때 어떠한 문제가 발생해서 따로 설정을 해주었을 것이다.
default값을 사용하면 어떠한 문제가 발생하는지 찾아보자.
java 8 이전에 버전에서는 "/dev/random" 값이 default 값이었다고 한다.
해당 값으로 설정이 되어있으면 Tomcat이 구동 되는데 blocking이 걸려 오래 걸리는 현상이 발생할 수도 있다고 한다.
그 이유로는 "SecureRandom" 클래스를 초기화시 난수를 생성할 충분한 임의성이 부여되어야 하는데
그렇지 못한 경우에는 충분한 임의성에 도달할 때까지 blocking 된다고 한다.
org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG]
took [45,169] milliseconds.
이러한 문제로 "/dev/urandom" 값을 설정하여
위의 상황에서 충분한 임의성에 도달하지 못해도 blocking되지 않고 초기화될 수 있도록 한다.
하지만, java 8 버전 이후 부터는 java.security.egd의 default 값이 "/dev/urandom"이라고 한다.