com.google.common.cache.CacheLoader
는 Google Guava 라이브러리의 일부입니다. Gradle에서 이 라이브러리를 사용하려면 build.gradle
파일에 Guava 의존성을 추가해야 합니다.
Gradle 의존성 추가
build.gradle
에 아래와 같이 Guava 의존성을 추가하세요:
dependencies {
implementation 'com.google.guava:guava:32.0.1-jre'
}
위 버전은 Guava의 최신 안정 버전 중 하나입니다. 필요에 따라 더 최신 버전이 있을 경우 업데이트할 수 있습니다.
의존성을 추가한 후 ./gradlew build
명령을 실행하여 라이브러리를 프로젝트에 적용하세요.
Maven 의존성 추가
Guava 라이브러리를 Maven 프로젝트에 추가하려면 pom.xml
파일에 다음과 같이 Guava 의존성을 추가해야 합니다.
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.0.1-jre</version>
</dependency>
소스코드
package smartView.system.security.service;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import org.springframework.stereotype.Service;
import com.google.common.cache.LoadingCache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
@Service("otpService")
public class OtpService {
private static final Integer EXPIRE_MINS = 3;
private LoadingCache<String, Integer> otpCache;
public OtpService(){
super();
otpCache = CacheBuilder.newBuilder().
expireAfterWrite(EXPIRE_MINS, TimeUnit.MINUTES).build(new CacheLoader<String, Integer>() {
public Integer load(String key) {
return 0;
}
});
}
public int generateOTP(String key){
Random random = new Random();
int otp = 100000 + random.nextInt(900000);
otpCache.put(key, otp);
return otp;
}
public int getOtp(String key){
try{
return otpCache.get(key);
}catch (Exception e){
return 0;
}
}
public void clearOTP(String key){
otpCache.invalidate(key);
}
}
OtpService
클래스는 OTP(One Time Password, 일회용 비밀번호)를 생성하고 관리하는 서비스로, 주로 인증번호 발급 및 검증 과정에서 사용됩니다. OTP는 일회성 비밀번호로 설정된 만료 시간 이후에 자동으로 삭제됩니다. 여기서는 Google Guava의 캐싱 기능을 이용해 OTP를 캐시에 저장하고, 만료 시간을 설정하여 시간 내에 사용되지 않으면 자동 삭제되도록 구현하였습니다.
- 클래스 및 의존성
@Service("otpService")
: Spring의 서비스 컴포넌트로, 이 클래스는 Spring 컨텍스트에 등록되어 OTP 관련 기능을 제공합니다.- Guava Cache:
LoadingCache
를 이용해 OTP를 저장하며, 특정 시간이 지나면 캐시에서 자동으로 삭제됩니다.
- 필드 및 상수
EXPIRE_MINS
: OTP의 만료 시간을 나타내며, 여기서는 3분으로 설정되어 있습니다.otpCache
: 캐시에 OTP를 저장하며, 키는 사용자 ID나 이메일 등, 고유한 문자열이고 값은 생성된 OTP입니다.
- 생성자
OtpService()
: 생성자에서CacheBuilder
를 통해 OTP 캐시를 초기화합니다.expireAfterWrite(EXPIRE_MINS, TimeUnit.MINUTES)
는 OTP가 생성된 후 3분이 지나면 만료되도록 설정합니다.load()
는 캐시가 비어있을 때 호출되며, 기본적으로0
을 반환합니다.
주요 메서드
generateOTP(String key)
:- 주어진
key
에 대해 6자리의 랜덤한 OTP를 생성합니다. 100000 + random.nextInt(900000)
은 6자리 숫자를 생성하는 코드입니다.- 생성된 OTP는 캐시에 저장됩니다.
- 주어진
getOtp(String key)
:- 주어진
key
로 저장된 OTP를 반환합니다. 캐시에 존재하지 않으면0
을 반환합니다.
- 주어진
clearOTP(String key)
:- 주어진
key
에 대해 캐시에 저장된 OTP를 무효화(삭제)합니다. OTP를 사용한 후 호출하여 캐시를 지울 수 있습니다.
- 주어진
OTP 서비스 사용 시나리오
- 사용자가 로그인 또는 인증을 시도하면,
generateOTP()
를 호출하여 OTP를 생성하고 사용자의 이메일이나 전화번호로 전송합니다. - 사용자가 받은 OTP를 입력하면, 서버에서
getOtp()
로 캐시된 OTP를 가져와 사용자 입력과 비교하여 일치하는지 확인합니다. - OTP가 사용되었거나 만료되면
clearOTP()
로 캐시에서 해당 OTP를 제거합니다.
코드 사용 예시
OtpService otpService = new OtpService();
// 1. OTP 생성
int otp = otpService.generateOTP("user123");
System.out.println("Generated OTP: " + otp); // 예시 출력: Generated OTP: 654321
// 2. OTP 검증
int storedOtp = otpService.getOtp("user123");
if (storedOtp == otp) {
System.out.println("OTP 인증 성공");
} else {
System.out.println("OTP 인증 실패");
}
// 3. OTP 삭제
otpService.clearOTP("user123");
'언어 > Java' 카테고리의 다른 글
구글 이메일 전송, Java 코드 예제 (0) | 2024.11.19 |
---|---|
Java 문자열 대문자 변환 & 소문자 변환 & 공백 제거 (0) | 2023.11.20 |
Java Pattern Class 메서드 정리 (0) | 2023.11.20 |
Java Matcher Class 메서드 정리 (1) | 2023.11.20 |
JAVA mongoDB 연결, 조회, 등록, 업데이트 (0) | 2023.11.14 |