| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MIND 2023 #후기
- 카카오인증토큰받기
- tag
- spring
- jenkins
- ci/cd
- input
- static
- 카카오인가코드받기
- 백엔드 로드맵
- 카카오사용자정보가져오기
- html
- 백엔드공부
- 엔티티 매니저
- button
- 예외
- form
- Spring API
- 백엔드스쿨
- 제로베이스
- 엔티티 생명주기
- Docker
- Interface
- 상속
- GitHub_Actions
- oAuth2
- Java
- 인스턴스
- feignClient
- 어떤 개발자?
Archives
- Today
- Total
HiDevelop
범용성 높은 함수는 개발자를 편하게 해줘요~! 본문
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