๐Ÿ“Œ OTP ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ์ฒ˜๋ฆฌ ํ๋ฆ„ ์ •๋ฆฌ

๐Ÿ“ ๊ฐœ์š”

ํšŒ์‚ฌ๋ณ„ ์ธ์ฆ ๋ฐฉ์‹์— ๋”ฐ๋ผ OTP(One-Time Password) ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ๋ณธ ๊ธฐ๋Šฅ์€ ์‚ฌ๋‚ด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•ฑ ๋กœ๊ทธ์ธ ์‹œ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ์ˆ˜๋‹จ์œผ๋กœ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, ๊ฐ ํšŒ์‚ฌ์˜ ์ •์ฑ…์— ๋”ฐ๋ผ SMS, FCM(Google Push) ๋ฐฉ์‹์œผ๋กœ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ–ˆ๋‹ค. OTP ๋ฐœ๊ธ‰๋ถ€ํ„ฐ ์ธ์ฆ ๊ฒ€์ฆ, ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก๊นŒ์ง€์˜ ์ „ ๊ณผ์ •์„ ์„ค์ • ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ๋‹ค.


โš™๏ธ ์ „์ฒด ๊ตฌ์„ฑ ํ๋ฆ„

โœ… 1. OTP ์š”์ฒญ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์š”์ฒญ (์ด๋ฉ”์ผ + ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ)
  2. ์‚ฌ์šฉ์ž ์ •๋ณด ํ™•์ธ โ†’ ํ•ด๋‹น ํšŒ์‚ฌ์˜ OTP ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋ฐ ๋ฐฉ์‹ ํ™•์ธ
  3. OTP ์ƒ์„ฑ โ†’ ์„ค์ •๋œ ๋ฐฉ์‹์œผ๋กœ OTP ์ „์†ก (SMS / FCM)
  4. ์ „์†ก ์„ฑ๊ณต ์‹œ DB์— OTP ์ €์žฅ

โœ… 2. OTP ์ธ์ฆ ์ฒ˜๋ฆฌ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž ์ž…๋ ฅ OTP ์ˆ˜์‹ 
  2. DB์— ์ €์žฅ๋œ OTP์™€ ๋น„๊ต
  3. ์ผ์น˜ ์‹œ OTP ์‚ญ์ œ, ์ธ์ฆ ์„ฑ๊ณต ์ฒ˜๋ฆฌ
  4. JWT ํ† ํฐ ๋ฐœ๊ธ‰ ๋ฐ ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก

โœ… 3. OTP ์š”์ฒญ API ์ฒ˜๋ฆฌ (requestOtp())

int otp = OtpProvider.generateOTP(mobile_number, otpDuration, now.toString());
mdotp.setMobileNo(mobile_number);
mdotp.setOtp(String.valueOf(otp));