본문 바로가기
Spring

[Spring] Twilio api를 이용한 문자전송 서비스

by 태진아밴드 2019. 9. 26.

한국번호가 아닌 사람에게 문자를 전송해야 하는 부분이 개발되어야 하는 일이 생겼다.

 

기존에는 휴대폰 인증 서비스로 kcb문자 인증 서비스를 사용하는 중이였는데

 

일단 외국번호로 전송이 가능한지를 메일로 문의했었다.

 

 

외국번호로는 안되요..!😒

 

휴대폰인증을 위해 인증번호를 전송해야 했기 때문에 문자 전송서비스를 따로 만들수 밖에 없었다.

 

이것저것 찾아보다가 Twilio라는 외국 사이트에서 문자서비스 및 다양한 서비스를 제공하고있었다.

 

 

https://www.twilio.com/

 

Twilio - Communication APIs for SMS, Voice, Video and Authentication

Cloud communications platform for building SMS, Voice & Messaging applications on an API built for global scale. Get started with a free trial.

www.twilio.com

 

일단 회원가입부터 진행하자. 참고로 naver메일로는 가입이 안된다고 해서 gmail로 가입했다.

 

회원가입 후 결제 카드를 등록하고나면 SID와 TOKEN을 부여받게 된다.

 

등록 이후에는 

 

 

https://www.twilio.com/console/sms/settings/geo-permissions

 

Twilio | Login

Give $10, Get $10 Share Twilio using a personal referral link and get awarded for every successful referral.

www.twilio.com

 

여기로 이동해서 permission체크를 모두 해줘야 한다.

 

저 설정을 해주지 않으면 설정하지 않은 국가로는 문자 전송이 안된다. 

 

 

모두 체크해주자..!

 

 

준비는 끝났고 이제 코딩만 하면된다. 매우매우 간단하다.👍

 

일단 pom.xml에 라이브러리를 추가해주자.

 

 

<!-- twilio -->
<dependency>
	<groupId>com.twilio.sdk</groupId>
    <artifactId>twilio</artifactId>
    <version>7.38.1</version>
</dependency>

 

추가해주고 나서 예제를 돌리는데 에러가 발생해서 찾아봤더니

 

httpclient랑 httpcore 라이브러리가 없어서 에러가 나길래그 둘도 추가해주었다.

 

 

<!-- httpclient -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.8</version>
</dependency>
<!-- httpcore -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.10</version>
</dependency>

 

 

그리고 문자 전송을 위한 클래스를 구현해준다.

 

 

public class SendSMSTwilio {
	
  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "발급받은 SID";
  public static final String AUTH_TOKEN = "발급받은 TOKEN";
  
  // SMS 전송
  public static int sendSMS (String country, String phoneNum) {

	Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
    
    // 휴대폰 인증번호 생성
    int authNum = randomRange(100000, 999999);
    
    
    // 전송대상 휴대폰 번호
    String sendTarget = "+"+ country + phoneNum;
    
    // 전송 메세지
    String authMsg = "The authentication number is [" + authNum + "]" ;
    
    
    Message message = Message.creator(
    	// to
    	new PhoneNumber(sendTarget),
        // from
    	new PhoneNumber("Twilio에서 발급받은 번호"), 
        // message
    	authMsg).create();
    
	return authNum;
	
  }
    
  // 인증번호 범위 지정
  public static int randomRange(int n1, int n2) {
    return (int) (Math.random() * (n2 - n1 + 1)) + n1;
  }
  
  
}

 

인증번호 생성을 위한 randomRange메서드를 하나 만들어 주고

 

국가코드와 휴대폰번호를 입력받아서 전송해주는 sendSMS 메서드를 하나 구현해 주었다.

 

Twilio 사이트 내의 예제가 매우 간단하고 잘 되어있어서 크게 어려울게 없었다.

 

sendSMS에 국가코드와 휴대폰번호를 입력해주면

 

 

 

 

이와 같이 문자가 정상적으로 전송된다.

 

이를 활용해서 Controller단에서 sendSMS 메서드를 호출해서 인증번호를 리턴시켜준 뒤

 

이 후 입맛에 따라 인증에 따른 기타 절차들을 만들어 주면 된다.

 

여윽시 api가 체고시다..!👍