아래의 사이트에 들어가서 회원가입을 하여 api key를 생성한다.
세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스
손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식
coolsms.co.kr
- api키와 secret키를 노출되지 않도록 하여 잘 저장해두고 이후 사용한다
1. gradle 의존성 추가
implementation 'net.nurigo:sdk:4.3.0'
2. application.yml
coolsms:
api:
key: "your API Key"
secret: "your API Secret"
3. SmsUtil
package com.example.keyboard.config.SMS;
import jakarta.annotation.PostConstruct;
import net.nurigo.sdk.NurigoApp;
import net.nurigo.sdk.message.model.Message;
import net.nurigo.sdk.message.request.SingleMessageSendingRequest;
import net.nurigo.sdk.message.response.SingleMessageSentResponse;
import net.nurigo.sdk.message.service.DefaultMessageService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class SmsUtil {
@Value("${coolsms.api.key}")
private String apiKey;
@Value("${coolsms.api.secret}")
private String apiSecretKey;
private DefaultMessageService messageService;
@PostConstruct
private void init(){
this.messageService = NurigoApp.INSTANCE.initialize(apiKey, apiSecretKey, "https://api.coolsms.co.kr");
}
// 단일 메시지 발송
public void sendOne(String to, String verificationCode) {
Message message = new Message();
// 발신번호 및 수신번호는 반드시 01012345678 형태로 입력
message.setFrom("01012345678");
message.setTo(to);
message.setText("[조선타자기] 회원가입 인증을 위한 아래의 인증번호를 입력해주세요\n" + verificationCode);
SingleMessageSentResponse response = this.messageService.sendOne(new SingleMessageSendingRequest(message));
}
}
4. Controller 구현
- 인증번호 보내는 send 기능, 인증번호 확인하는 verify 기능 구현
@PostMapping("/send")
public ResponseEntity<Object> sendVerifyNum(@RequestParam(value="phoneNum") String phoneNum){
try {
if(phoneNum.contains("-")){
return new ResponseEntity<>("하이폰 제거 후 번호 다시 입력", HttpStatus.OK);
}
userService.sendVerifyNum(phoneNum);
return new ResponseEntity<>("인증번호 발송 완료", HttpStatus.OK);
}catch (Exception e){
System.out.println(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
@GetMapping("/verify")
public ResponseEntity<Object> checkVerifyNum(@RequestParam(value="phoneNum") String phoneNum, @RequestParam(value="verifyNum") String varifyNum){
try {
boolean check = userService.checkVerifyNum(phoneNum, varifyNum);
return new ResponseEntity<>(check, HttpStatus.OK);
}catch (Exception e){
System.out.println(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
5. Service 구현
- 랜덤 값을 구해 6자리 인증번호를 생성하고 그 인증 번호를 redis에 3분간 유효하게 하여 저장한다
- 이후 인증 확인을 할시에 redis의 번호와 입력받은 휴대폰 번호를 비교하여 로직 값을 return해 준다
public void sendVerifyNum(String phoneNum){
Random random = new Random();
// 6자리 랜덤 값 입력
int verificationCode = random.nextInt(900000) + 100000;
String verificationCodeStr = String.valueOf(verificationCode);
// 인증번호 발신
smsUtil.sendOne(phoneNum, verificationCodeStr);
//인증코드 유효기간 3분 설정
redisUtils.setData(phoneNum, verificationCodeStr, 60 * 3L);
}
public boolean checkVerifyNum(String phoneNum, String verifyNum){
String certificationNum = redisUtils.getData(phoneNum);
return certificationNum.equals(verifyNum);
}
6. 테스트
- postman을 이용하여 CoolSMS의 API가 잘 작동하는지 확인
- verify를 요청하여 인증이 통과했을 시에 return값을 전송 받는다
완료 !
'스프링' 카테고리의 다른 글
ckeditor의 이미지 업로드 및 삭제 백엔드( SpringBoot ) (0) | 2024.07.23 |
---|---|
관계형 database식별 비식별 관계, 다대다 관계 해소 (0) | 2024.01.30 |
window에 Redis-cli 설치하기/명령어 (0) | 2024.01.24 |
Spring Boot + Security 회원가입 기능 (0) | 2024.01.19 |
Spring Boot와 mybatis연동(mysql에 데이터 삽입 테스트) (0) | 2024.01.18 |