Anything

AWS에서 Spring boot 프로젝트 로그인 시간 오래 걸림

씬프 2021. 7. 8. 10:43
반응형

Spring boot 프로젝트를 AWS에 배포하고 로그인을 시도할 때 로컬에서와 다르게

시간이 아주 오래걸리고,

 

Creation of SecureRandom instance for session ID generation using [SHA1PRNG]

took [371,575] milliseconds.

 

위와 같은 에러 메시지를 볼 수 있음.

 

문제점

이에 대한 문제는 리눅스 서버의 난수 생성 방식에 대한 문제였다.

자바에서 커넥션을 생성할 때 난수 생성이 필요하다.

기본적으로 /dev/random을 통해 난수를 생성한다.

/dev/random은 사용자의 입력 신호가 비트의 형태로 저장되어

난수를 생성할 때 사용하는데, 여기서 문제가 저장된 비트의 size가 충분하지 않으면

/dev/random을 사용하지 않는다.

 

새로 생성한 인스턴스에서는 충분한 크기의 비트가 생성되지 않았을 것이기 때문에

로컬에서 가능하던 것이 안되는 것이다.

 

해결 방법

이에 대한 해결은 /dev/random을 사용하는 것이 아니라 /dev/./urandom을 사용한다.

/dev/random보다 속도는 빠르지만 더 좋은 난수는 되지 않는다고 한다.

하지만 블로킹되어 사용하지 못하는 서비스보다는 충분한 비트가 생성되기 전에는

사용하는 것이 좋을 것 같다.

 

JVM 옵션

-Djava.security.egd=file:/dev/./urandom 옵션을 주거나

 

jar 파일을 실행할 때

java -Djava.security.egd=file:/dev/./urandom -jar jarfile.jar

로 실행한다.

 

 

JVM 옵션은 어디서?

JVM 옵션을 어디서 바꿔야 하나 찾는데 잘 안찾아짐.

현재 openjdk-11을 사용 중일 때를 기준으로 하겠음.

jdk가 설치된 디렉터리에서 conf/security 디렉터리 하위에 java.security 파일이 존재함.

파일의 150번째 line에 securerandom.source=file:/dev/random 설정이 존재함.

이것을 securerandom.source=file:/dev/./urandom으로 변경하면 됨.