Tomcat 서버 구동시 Creation of SecureRandom instance for session ID generation Warning 해결
빈 리눅스 / 우분투 인스턴스에서 Spring Boot 웹 애플리케이션을 runnable Jar파일로 구동할 때 마주한 오류.
Exception처럼 프로그램이 종료되는 것도 아니고, 애플리케이션 로직에도 문제는 없지만
서버에 요청을 보냈을 때 응답을 받기까지 매우 오랜 시간이 걸리는 상황이 발생했다.
Creation of SecureRandom instance for session ID generation using \[SHA1PRNG\] took \[43,222\] milliseconds.
요청에서 응답까지 43초가 걸렸다. 다른 요청에서는 213초까지 걸리기도 했다.
원인을 분석한 포스트를 여러 개 찾아봤다.
https://goni9071.tistory.com/entry/connection-reset
https://goni9071.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-devrandom-vs-devurandom
https://lng1982.tistory.com/261
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6202721
요약하자면
자바는 Connection을 생성하기 위해 자바의 랜덤난수 생성을 활용하는데,
랜덤난수를 생성하기 위한 인자값으로 "기존 하드웨어의 노이즈"를 사용한다고 함.
따라서 신규 인스턴스에 새로 서버를 만들면, 랜덤난수를 생성에 필요한 인자값이 부족해서 발생할 수 있는 문제라고 한다.
난수 생성을 담당하는 /dev/random을 /dev/./urandom 으로 변경하면 해결할 수 있다.
JVM 옵션에서
-Djava.security.egd=file:/dev/./urandom
을 주거나,
jar 파일로 실행할 경우
java -Djava.security.egd=file:/dev/./urandom -jar jar파일명.jar
옵션을 주어 실행하면 된다.