keembloo

[Spring] 스프링 문자 인증 구현하기 - coolSMS API 사용방법 본문

Spring

[Spring] 스프링 문자 인증 구현하기 - coolSMS API 사용방법

keembloo 2023. 11. 15. 11:22
728x90

 

https://coolsms.co.kr/

 

세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스

손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식

coolsms.co.kr

 

사이트에 회원가입을 하고 로그인한다.

좌측바에서 API Key 관리에 들어간다.

처음 사용할때 Key 생성을 해야한다.

 

이때 생성된 Key와 Secret 번호는 잘 가지고 있어야한다. 나중에 설정해줄때 필요하다.

 

좌측바에서 발신번호관리로 들어간다.

보통은 회원가입할때 핸드폰을 인증받으면 자동으로 등록이 되지만 내역이 없다면 발신번호 등록을 해준다.

 


 

이제 스프링에서 설정을 해줘야한다.

프로젝트는 MVC2 3티어 패턴을 사용하고 있다.

 

build.gradle에 디펜더시에 의존성을 추가해준다.

    implementation 'net.nurigo:sdk:4.3.0' // 문자 인증

 

 


application.properties 에 Key를 입력해줘야한다.

coolsms 사이트에서 개인 고유 api key를 입력해주면된다.

 

(하지만 전 저 방법으로 실패했습니다.. 성공하신분은 알려주세요..  AP IKEY를 코드에 직접 입력했습니다.

따라하실 분들은 이 단계를 건너 뛰셔도 됩니다. 공부하시라고 이 기록은 남겨두겠습니다)

 

사실 서비스에 직접적으로 key를 작성해도되지만 이는 보안성을 위하여 권장하지 않는다.
application.properties에 작성하여 깃이그노어를 활용하면 깃에 코드를 올릴때
application.properties 파일은 올라가지 않는다. 이를 활용하면 좋다.

 

 

coolsms.api.key=your_api_key	// api key
coolsms.api.secret=your_api_secret	// api secret
coolsms.fromnumber=your_sender_number	// 보내는사람 연락처

// 각자 고유의 키값을 입력해줘야한다.
// 따옴표는 작성하지 않아도 된다. 읽어들일때 알아서 String으로 읽는다.
// 공문에는 2줄만 작성되어있지만
// 마지막 보내는 사람의 연락처는 개인보안을 위해 추가하였다.

 

 


 

이제 서비스에서 코드를 작성하면된다.

서비스 클래스를 하나 추가해준다.

 

 

@Component // 빈생성
public class MessageSendingService {
/*
	이부분은 동작하지 않아서 밑에 21번째줄 코드에 직접 Key를 입력하시면됩니다.
	@Value("${coolsms.api.key}")
     private String apiKey;

     @Value("${coolsms.api.secret}")
     private String apiSecret;
     
*/

    @Value("${coolsms.fromnumber}") // 발신자번호를 가져옴
    private String fromNumber;

    private final DefaultMessageService messageService;

    public MessageSendingService() {
        // 반드시 계정 내 등록된 유효한 API 키, API Secret Key를 입력해주셔야 합니다!
        // coolSMS 라이브러리 통신
        this.messageService = NurigoApp.INSTANCE.initialize("INSERT_API_KEY", "INSERT_API_SECRET_KEY", "https://api.coolsms.co.kr");
    }

 


 

이제 기존 로직을 작성하던 서비스 클래스로 가서 

방금 새로 생성한 MessageSendingService 클래스의 함수를 호출해준다.

 

messages 변수는 "수신번호"와 "문자내용"을 map형태로 갖는 list이다.

(저는 여러명에게 보낼 것이기 때문에 이렇게 진행하였습니다.)

// 최상단부에 새로생성한 클래스의 빈등록
@Autowired
private MessageSendingService messageSendingService;
    
// 기존의 기능 로직 함수    
@Transactional
    public boolean memberCouponw(int cno , List<String> mnoList ){ //
    // 메세지 보낼 회원들 정보와 메세지 내용 리스트를 담을 객체 선언
            List<Map<String,String>> messages = new ArrayList<Map<String,String>>();
    /*


        다른 로직 코드 생략...


    */
    //messageSendingService 클래스로 호출하여 매개변수전달
            messageSendingService.sendSMS( messages );
            return true;
}

 

 


다시 만들었던 MessageSendingService 클래스로 돌아와서 코드를 작성해준다.

 

@Component // 빈생성
public class MessageSendingService {
/*
	이부분은 동작하지 않아서 밑에 21번째줄 코드에 직접 Key를 입력하시면됩니다.
	@Value("${coolsms.api.key}")
     private String apiKey;

     @Value("${coolsms.api.secret}")
     private String apiSecret;
     
*/

    @Value("${coolsms.fromnumber}") // 발신자번호를 가져옴
    private String fromNumber;

    private final DefaultMessageService messageService;

    public MessageSendingService() {
        // 반드시 계정 내 등록된 유효한 API 키, API Secret Key를 입력해주셔야 합니다!
        // coolSMS 라이브러리 통신
        this.messageService = NurigoApp.INSTANCE.initialize("INSERT_API_KEY", "INSERT_API_SECRET_KEY", "https://api.coolsms.co.kr");
    }

    public void sendSMS(List<Map<String,String>> messages ) {
        System.out.println("messages = " + messages);
        ArrayList<Message> messageList = new ArrayList<>();

        for (int i = 0 ; i < messages.size(); i++) {
            Message coolsms = new Message();
            coolsms.setFrom(fromNumber);    // 보낸사람 번호 설정
            coolsms.setTo(messages.get(i).get("memberphone"));     // 받는 사람 번호 설정
            coolsms.setText(messages.get(i).get("messageText"));
            //System.out.println("fromNumber : "+fromNumber);

  /*    단일메세지 보내기
  		한명에게만 보낼 분들은 26번째줄부터 33번째줄의 코드를 생략하시고
        아래의 코드를 추가하세요 ! 이경우는 46번째줄 코드도 생략하셔야합니다.
        
        Message coolsms = new Message();
        coolsms.setFrom(fromNumber);    // 보낸사람 번호 설정
        coolsms.setTo(phoneNumber);     // 받는 사람 번호 설정
        coolsms.setText(messageText);   // 문자메세지 내용 설정
        // 데이터 전송하여 API 통신 실행 함수 호출
        SingleMessageSentResponse response = messageService.sendOne(new SingleMessageSendingRequest(coolsms));
*/

            messageList.add(coolsms); // list에 문자전송 양식 추가
        }

// 아래는 다중문자 전송할 때의 예외처리 코드입니다. 문자전송 실패시 알려줍니다.
        try {
            // send 메소드로 단일 Message 객체를 넣어도 동작합니다!
            // 세 번째 파라미터인 showMessageList 값을 true로 설정할 경우 MultipleDetailMessageSentResponse에서 MessageList를 리턴하게 됩니다!
            //MultipleDetailMessageSentResponse response = this.messageService.send(messageList, false, true);

            // 중복 수신번호를 허용하고 싶으실 경우 위 코드 대신 아래코드로 대체해 사용해보세요!
            // 데이터 전송하여 API 통신 실행 함수 호출
            MultipleDetailMessageSentResponse response = this.messageService.send(messageList,true);

            System.out.println(response);

            //return response;
        } catch (NurigoMessageNotReceivedException exception) {
            System.out.println(exception.getFailedMessageList());
            System.out.println(exception.getMessage());
        } catch (Exception exception) {
            System.out.println(exception.getMessage());
        }
       // return null;
    }

 

 

 

API를 호출하고 공문에 나온대로 작성해주면 된다.

 

 

참고 : coolSMS 공식 깃

https://github.com/coolsms/coolsms-java-examples

 


 

728x90