HiDevelop

범용성 높은 함수는 개발자를 편하게 해줘요~! 본문

카테고리 없음

범용성 높은 함수는 개발자를 편하게 해줘요~!

꽃달린감나무 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