- ์๋๋ IamPort๋ผ๋ ๊ฒฐ์ ๋ํ์ฌ์ API๋ฅผ ์ด์ฉํ์ฌ ๋ณธ์ธ์ธ์ฆ์ PASS๋ฑ์ผ๋ก ํ๋ ค๊ณ ํ์ผ๋.. ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ API์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ ์ ๋ฑ๋ก์ฆ์ ํตํด์ ํด๋น ํ์ฌ์ ๊ณ์ฝ์ ํด์ผ API๊ฐ ์ฌ์ฉ๊ฐ๋ฅ ํ์๋ค..
- ๊ทธ๋์ ์๊ฐํ ๋ฐฉ๋ฒ์ ํ๋งค์์ ํธ๋ํฐ์ผ๋ก SMS ๋ฌธ์ ๋ฐ์ก์ ํตํด์ ๋ณธ์ธ์ธ์ฆ์ ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์๋ค.. (coolSMS API)
- ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ํฐ๋ฒํธ๋ฅผ ํตํ ์ธ์ฆ์ผ ๋ฟ ํ๋งค์์ ์ค์ ๊ฐ์ธ์ ๋ณด์ ์ผ์นํ๋์ง๋ ๊ตฌํํ์ง ๋ชปํ์๋ค.. (ํด๋ํฐ์ ํ ์๋ฆผ ๊ธฐ๋ฅ ๋ฃ๊ธฐ ์ํจ)
- ๊ทธ๋๋ ๊ณ ๊ฐ ์ ๋ณด๋ ์ ์งํด์ผํ๋, ์๋ฒ์ ๊ฐ์ ์ ์ฅํ๊ธฐ๋ก ํจ.
(1) SMS ํ ์ด๋ธ
Redis๋ฅผ ํตํ ์์ ๊ฐ์ผ๋ก ์ด์ํ๋ ค ํ์ผ๋, ๊ฐ๋จํ๊ณ ๋น ๋ฅด๊ฒ ๊ตฌํํ๊ธฐ ์ํด DBํ ์ด๋ธ์ ๋ง๋ค์๋ค.
1. ์ด๋ฆ, ์๋
์์ผ, ํฐ๋ฒํธ๋ฅผ POST๋ก ์์ฒญ ๋ฐ์.
2. ํด๋น ํ์ ์ ๋ณด๋ฅผ ์ด์ฉํด ์ด๋ฏธ ๊ฐ์
ํ ํ์์ธ์ง ํ์ธ.
3. ๋๋ค ์ธ์ฆ๋ฒํธ ์์ฑ
4. SMS ์ธ์ฆ ๋ฉ์์ง ์์ฑ ๋ฐ coolSMS๋ฅผ ์ด์ฉํ ๋ฌธ์ ๋ฉ์์ง ์ ์ก API ์์ฒญ
5. SMS ์ธ์ฆ ๋ฉ์์ง ์ ๋ณด ์๋ฒ DB์ ์ฅ
(๋ฌธ์์ธ์ฆ ๊ตฌํ ํฌ์คํ
)
- ์์ฒญ ๋ฐ๋ [PostSignUpAuthyReq.java]
- SellerController.java
- SellerService.java
@Transactional(rollbackFor = BaseException.class) public PostSignUpAuthyRes userAuthy(PostSignUpAuthyReq signUpAuthy) throws BaseException { // 1) ํ์๊ฐ์ ๊ฐ๋ฅํ์ง?? ์ด๋ฏธ ๋ฑ๋ก๋ ํ์์ธ์ง?? int duplicateUser; try{ duplicateUser = sellerDao.userAuthy(signUpAuthy); }catch(Exception exception){ throw new BaseException(POST_USERS_NOT_FOUND); // 2021 : ๊ฐ์ ํ์ง ์์ ํ์์ ๋๋ค. } if (duplicateUser == 1){ try{ // 2) ๋๋ค ์ธ์ฆ๋ฒํธ ์์ฑ (๋ฒํธ) Random rand = new Random(); String certificationNum = ""; for(int i=0; i<6; i++) { String ran = Integer.toString(rand.nextInt(10)); certificationNum+=ran; } // 3) ์ธ์ฆ ๋ฉ์์ง ์์ฑ Message message = new Message(); message.setFrom("01043753181"); message.setTo(signUpAuthy.getPhoneNum()); message.setText("ํ์๊ฐ์ ๋ณธ์ธ์ธ์ฆ ํ์ธ์ ๋๋ค.\n["+certificationNum+"]"); // 4) coolSMS API ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ํธ๋ํฐ์ ์ ์ก SingleMessageSentResponse response = this.messageService.sendOne(new SingleMessageSendingRequest(message)); log.info("coolSMS API์์ฒญ :{}", response); // 5) DB์ ์ ์ก ์ธ์ฆ์ ๋ณด ์ ์ฅ int smsSendRes = smsDao.smsAuthy(signUpAuthy, certificationNum, "S"); return new PostSignUpAuthyRes(smsSendRes); }catch(Exception exception){ throw new BaseException(COOLSMS_API_ERROR); // 5010 : SMS ์ธ์ฆ๋ฒํธ ๋ฐ์ก์ ์คํจํ์์ต๋๋ค. } } else{ throw new BaseException(POST_USERS_ALREADY_EXISTS); // 2016 : ์ด๋ฏธ ๊ฐ์ ํ ํ์์ ๋๋ค. } }
- SellerDao.java
ํ๋งค์ ํ ์ด๋ธ์ ํด๋น ์ด๋ฆ๊ณผ ์๋ ์์ผ, ํฐ๋ฒํธ๋ก ๊ฐ์ ๋์ด ์๋ ์ ์ ์กฐํ.public int userAuthy(PostSignUpAuthyReq signUpAuthy) { String query = "SELECT NOT EXISTS(\n" + " SELECT * FROM Merchandisers\n" + " WHERE name = ? AND\n" + " birthday = ? AND\n" + " phone = ? AND \n" + " status = 'A'\n" + ")"; Object[] params = new Object[]{ signUpAuthy.getName(), signUpAuthy.getBirth(), signUpAuthy.getPhoneNum() }; return this.jdbcTemplate.queryForObject(query, int.class, params); }
- ํธ๋ํฐ์ ํตํด ์ ์ก๋ ๋ฉ์์ง๋ฅผ ์ ๋ ฅํ์ฌ ๋ณธ์ธํ์ธ์ ์งํํ๋ค.
- ๋ณธ์ธ์ธ์ฆ ๋ฒํธ์ ์ ํจ๊ธฐ๊ฐ์ 3๋ถ, DB์์ ํ์๊ฐ์ผ๋ก๋ถํฐ 3๋ถ์ด ์ง๋ ๊ธฐ๋ก์ ์ํ๋ฅผ 'D'๋ก ๋ฐ๊ฟ์ ์ ํจํ์ง ์๊ฒํด์ผํจ.
- ๋ฐฐ์น๋ฅผ ์์ง ์์ฑํ์ง ๋ชปํด์ ์กฐํ์์ DB์ created(์์ฑ๋ ์๊ฐ)๊ฐ 3๋ถ ์ด๋ด์ธ ๋ง์ง๋ง ์ธ์ฆ์์ฒญ ๋ฒํธ๋ฅผ ์กฐํํ๊ธฐ๋ก ํ์๋ค.
(1) ๋ก์ง ํ๋ก์ฐ
1. ๋ณธ์ธ์ธ์ฆ ์์ฒญ์ ์ฌ์ฉํ๋ ์ ๋ณด + ํฐ์ผ๋ก ์์ ๋ฐ์ ๋ณธ์ธ์ธ์ฆ ๋ฒํธ๋ฅผ ๋ฐ๋์ ๋ด์ POST๋ก ์์ฒญ
2. ํด๋น ํ์์ ์ธ์ฆ ์์ฒญ์ ๋ํ ์ ๋ณด๊ฐ ๋ณด๋ธ์ง 3๋ถ ์ด๋ด์ด๊ณ , ๋ง์ง๋ง์ ๋ณด๋ธ ์ธ์ฆ๋ฒํธ๋ฅผ ํ์ธ
3. ๋ฒํธ๊ฐ ์ผ์นํ๋ค๋ฉด ๋ณธ์ธ์ธ์ฆ ์๋ฃ.
- ์์ฒญ๋ฐ๋
- SellerController.java
- SellerService.java
public PostSignUpAuthyRes userAuthyPass(PostSignUpAuthyReq passReq) throws BaseException{ try{ int userPass = smsDao.smsAuthyPass(passReq); return new PostSignUpAuthyRes(userPass); }catch(Exception exception){ throw new BaseException(COOLSMS_API_ERROR); // 5010 : SMS ์ธ์ฆ๋ฒํธ ๋ฐ์ก์ ์คํจํ์์ต๋๋ค. } }
- SellerDao.java
public int smsAuthyPass(PostSignUpAuthyReq signUPValid){ String query = "SELECT EXISTS(\n" + " SELECT\n" + " *\n" + " FROM Sms\n" + " WHERE phone = ? AND\n" + " name = ? AND\n" + " uid = ? AND\n" + " certification_num = ? AND\n" + " status = 'S' AND\n" + " created >= DATE_ADD(NOW(), INTERVAL -3 MINUTE)\n" + " ORDER BY created DESC LIMIT 1)"; Object[] params = new Object[]{ signUPValid.getPhoneNum(), signUPValid.getName(), signUPValid.getBirth(), signUPValid.getCertificationNum(), }; return this.jdbcTemplate.queryForObject(query, int.class, params); }
๋ค์์ ๋ณธ์ธ ์ธ์ฆ ํ ํ์๊ฐ์ ์ ํ๋ ์ ์ฐจ์ ๋ํด ํฌ์คํ ํ๋๋ก ํ๊ฒ ๋ค.