카테고리 없음
범용성 높은 함수는 개발자를 편하게 해줘요~!
꽃달린감나무
2024. 2. 8. 14:07
728x90
현재 진행하고 있는 DailySchool이라는 팀프로젝트를 진행하고 있다.
여기서 내 함수에서의 내가 만든 문제점을 발견했다
문제의 로직들
1. 비밀번호 재설정 시도를 위해 이메일을 통해 인증번호를 확인하는 절차안에서 redis에 {이메일 : 인증번호} 형식으로 저장하게 된다.
2.본인 인증 절차가 완료되면, redis에 {이메일 : verifeid} 형식으로 기존의 값에 verifeid를 덮어 씌운다
이게 왜 문제일까?
아래 코드를 보자
-- 비밀번호 재설정 코드를 레디스에 저장하기 위한 함수이다.
public void savePasswordResetVerificationCodeToRedis(String to, String passwordResetVerificationCode){
try{
//redis에 email : 인증번호 형식으로, 인증번호를 저장할 때 aes256Util로 암호화해서 저장(인증번호 만료시간 3분)
redisTemplate.opsForValue().set(
to,
passwordResetVerificationCode,
ValidTime.PASSWORD_CODE_VALID_TIME.getTime(),
TimeUnit.MILLISECONDS
);
} catch (IllegalArgumentException e){
log.error("잘못된 데이터 형식을 레디스 저장시도");
throw new RuntimeException("비밀번호 재설정 인증코드 레디스 저장 중 오류 발생", e);
}
}
-- 비밀번호 인증이되면 email : passwordResetVerificationCode 를 email : verified(단순 문자열)로 바꾸는 메소드다.
public void convertPasswordResetVerificationCodeToVerified(String email){
try {
// 인증코드가 같으면, key : value를 email : verified로 변경
redisTemplate.opsForValue().set(
email,
VERIFIED,
ValidTime.PASSWORD_RESET_CODE_VALID_TIME.getTime(),
TimeUnit.MILLISECONDS
);
} catch (IllegalArgumentException e) {
log.error("잘못된 데이터 형식을 레디스 저장시도");
throw new RuntimeException("비밀번호 재설정 인증코드 레디스 저장 중 오류 발생", e);
}
}
이렇게 되면, 하나의 메소드는 하나의 기능만을 담당하도록 만들기 규칙을 지키고 있기 때문에, redis에 어떤 값을 저장할때마다..메소드를 만들어줘야한다..ㅠㅠ,
어떻게 해결해볼건데?
범용성 있는 redis저장 함수를 만들어 보기로했다. 요렇게 되면 각 목적에 맞는 redis 저장함수를 만들 필요가 없다. ㅎㅎ 흠 그렇게 큰 변화는 아니지만 바꾸고 나니 개발할 때, 편하다 ㅎㅎ
public void set(String key, String value, Long timeout, ErrorCode errorCode){
try{
redisTemplate.opsForValue().set(
key,
value,
timeout,
TimeUnit.MILLISECONDS
);
} catch (IllegalArgumentException e){
log.error("잘못된 데이터 형식을 레디스에 저장 시도");
throw new InvalidDataException(errorCode);
}
}
아직 보완할 부분이 많지만 일단, 같이 하고 있는 팀원분들이 현직자분들이 계셔서 리뷰를 받아봐야겠다 ㅎㅎ
728x90