스프링으로 CoolSMS로 문자 SMS 인증 시스템을 구현해보았다. SMS 문자를 발송하는 부분이랑 발송한 랜덤인증번호를 Redis로 저장해두었다가 검증하는 과정으로 두 파트로 나누어 포스트를 정리해본다.
2021.12.22 - [Back-end/Spring & Spring Boot] - [Spring boot] 문자 SMS 인증 구현하기(1)
2021.12.22 - [Back-end/Spring & Spring Boot] - [Spring boot] 문자 SMS 인증 구현하기(2)
SMS API 서비스
문자 인증 API 서비스를 찾다가 제일 가격이 저렴하고 Spring과 무료 연동이 가능해 이 서비스를 선택하게 되었다.
세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스
손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식
coolsms.co.kr
처음 가입 시 본인 인증 후 API 키를 발급 받게 된다.
이때 문제가 하나 있는데 대표 번호가 없다는 것이다. 개인 번호로 하기엔 조금.. 개인 정보의 문제도 있고 해서 번호를 하나 구매하였다.
아톡이 젤 저렴하고 월 2200원에 070으로 시작하는 번호를 얻을 수 있다.
대표 번호
아톡
070 인터넷 전화어플 아톡, 저렴한 국제전화는 물론 투넘버 및 안심번호 서비스를 제공합니다.
atalk.co.kr
아톡에 가입했다면 다시 coolSMS 가입 절차로 돌아가서 대표 번호로 070으로 발급한 번호를 등록해주면 된다. 다 등록했다면 SMS 서비스는 1건 당 20원이 청구되는데 처음에는 300포인트를 주기 때문에 15번 정도 무료로 이용 가능하다.
Spring에 연동
build.gradle에 SDK 추가
implementation 'net.nurigo:javaSDK:2.2'
application.properties에 API 정보 추가
coolsms.apikey = 개인APIKEY
coolsms.apisecret = 개인APISECRET
coolsms.fromnumber = 대표번호
coolSMS 사이트에 가서 내 정보를 확인하고 이것은 공개되면 안되는 부분이기에 properties에 설정해준 뒤 .gitignore에 설정해서 외부에 공개되지 않도록 한다.
.gitignore 설정
이렇게 추가해주면 git에 올릴 때는 properties파일이 안 올라가게 된다. -> 주의할 것!!
MessageService.java
이 부분은 coolSMS에서 가이드를 제공해서 쉽게 만들 수 있다. 내 코드는 다음과 같다. 랜덤한 숫자 4자리 인증번호를 생성해서 보냈다. @Value 어노테이션으로 properties에서 API 정보를 다 가져와서 사용했다.
public class MessageService {
private final SmsCertification smsCertification;
@Value("${coolsms.apikey}")
private String apiKey;
@Value("${coolsms.apisecret}")
private String apiSecret;
@Value("${coolsms.fromnumber}")
private String fromNumber;
private String createRandomNumber() {
Random rand = new Random();
String randomNum = "";
for (int i = 0; i < 4; i++) {
String random = Integer.toString(rand.nextInt(10));
randomNum += random;
}
return randomNum;
}
private HashMap<String, String> makeParams(String to, String randomNum) {
HashMap<String, String> params = new HashMap<>();
params.put("from", fromNumber);
params.put("type", "SMS");
params.put("app_version", "test app 1.2");
params.put("to", to);
params.put("text", randomNum);
return params;
}
// 인증번호 전송하기
public String sendSMS(String phonNumber) {
Message coolsms = new Message(apiKey, apiSecret);
// 랜덤한 인증 번호 생성
String randomNum = createRandomNumber();
System.out.println(randomNum);
// 발신 정보 설정
HashMap<String, String> params = makeParams(phonNumber, randomNum);
try {
JSONObject obj = (JSONObject) coolsms.send(params);
System.out.println(obj.toString());
} catch (CoolsmsException e) {
System.out.println(e.getMessage());
System.out.println(e.getCode());
}
return "문자 전송이 완료되었습니다.";
}
문자 SMS 전송까지 간단하게 다뤄보았고 발송한 인증번호 검증 파트는 다음 포스트로
2021.12.22 - [Back-end/Spring & Spring Boot] - [Spring boot] 문자 SMS 인증 구현하기(2)
'Back-end' 카테고리의 다른 글
[Spring boot] multipart, form-data, requestPart 테스트 코드 작성하기 (0) | 2022.01.01 |
---|---|
[Spring boot] 문자 SMS 인증 구현하기(2) (0) | 2021.12.22 |
빌더 패턴(Builder Pattern)이란? (0) | 2021.12.19 |
[ Spring boot ] CORS란? 스프링부트에서의 CORS 설정 (0) | 2021.12.12 |
[Spring] Spring Security에 대해 (2) (0) | 2021.12.07 |