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으로 변경하면 됨.
'Anything' 카테고리의 다른 글
Spring Boot JPA에서 LocalDateTime 처리 (0) | 2021.07.10 |
---|---|
DAO와 Repository의 차이 (0) | 2021.07.09 |
Mustache에서 세션 값 노출 설정 (0) | 2021.07.07 |
Spring 로그인 수동 테스트시 회원가입 반복 작업 최소화 (0) | 2021.07.06 |
[AWS] Windows에서 AWS Linux SSH 연결 (0) | 2021.06.17 |