반응형
InMemory 인증번호 관리
회원가입을 할 때 핸드폰 번호로 인증번호를 전송하고 인증번호를 통해 회원을 검증했습니다.
인증번호 발행
랜덤 번호를 생성하고 휴대폰으로 랜덤번호를 전송하고 Map 번호를 저장하는 방식입니다.
인증번호 검증
현재 인증시간이 유효한지 확인하고 인증번호를 검증합니다. 인증번호가 일치하면 Map에서 key를 제거하지만 인증번호가 일치하지 않는다면 계속해서 메모리에 남아있게 됩니다.
인메모리로 관리하는 key관리시 메모리 Leak 발생

key를 요청하고 검증을 하지 않았을 때 계속해서 데이터가 Map에 참조하고 있어 GC가 메모리를 수거하지 않습니다.
해결방법
@TimeTrace
@Scheduled(cron = "0 10 * * * *")
public void clearAuthenticationMap() {
authenticationMap.entrySet().forEach((set) -> {
AuthAndTime authAndTime = getAuthAndTime(set.getKey());
if(!isBefore(authAndTime)) authenticationMap.remove(set.getKey());
});
}
이 부분을 해결하기 위해 @스케줄링
을 활용하여 일정 시간마다 Map의 만료된 키를 해제하여 Memory Leak를 해결했습니다.

반응형
'SpringBoot' 카테고리의 다른 글
[SpringBoot] ThreadLocal을 활용한 인증관리 (0) | 2024.06.20 |
---|---|
BeanPay Detail 삭제 이유 (0) | 2024.06.03 |
락 선택 이유와 성능 테스트 (0) | 2024.04.30 |
코리아노 BeanPay 고민 (0) | 2024.04.17 |
[SpringBoot] Spring Batch 이용권 만료 (0) | 2023.12.17 |