ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] - 초간단 휴대폰 인증 기능 구현 (coolsms-건당20원)
    Spring 2024. 6. 14. 19:48
    반응형

    Spring Boot로 휴대폰 인증 기능 구현하기 with coolsms

     

    sms전송관련 하여 사이트들을 둘러보다가 저렴한 사이트를 발견했다. 문자발송 한 건당 20원!!

    최초 회원가입을 한다면 300P가 주어진다. 최초 15건은 무료이다!

     

    https://coolsms.co.kr/

     

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

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

    coolsms.co.kr

     

    1. 가입후 상단 메뉴에서 개발/연동 -> API Key관리 클릭

    2. 새로운 API Key 만들기

    3. 발급받은 API KEY, SECRET 키 저장해두기

     

     

     

    다른 블로그들을 둘러보니 대부분 이렇게 의존성을 주입해준다.

    dependencies {
        // 다른 의존성들...
    
        compile group: 'net.nurigo', name: 'javaSDK', version: '2.2'
    }

     

     

    대충 이러한 오류와 version문제가 발생하였다. 찾아보니 Gradle 버전 7.0 이후부터 compile 메소드가 더 이상 사용되지 않으며, 대신 implementation 또는 api를 사용하여 의존성을 추가해야 합니다. 따라서 build.gradle 파일에서 다음과 같이 수정해야 한다고 했다. Gradle버전들을 잘 확인하고 주입하자!

    A problem occurred evaluating root project ''.
    > Could not find method compile() for arguments [{group=net.nurigo, name=javaSDK, version=2.2}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

     

     

    build.gralde

    implementation group: 'net.nurigo', name: 'javaSDK', version: '2.2'

     

    application.yml

    coolsms:
      api:
        key: "발급받은 API KEY"
        secret: "발급받은 API SECRET"
        number: 01012345678

    여기서 number는 발신인을 말한다. coolsms에서 가입한 번호를 넣어주면된다. 

     

    CoolSmsService

    @Service
    public class CoolSmsService {
    
        @Value("${coolsms.api.key}")
        private String apiKey;
    
        @Value("${coolsms.api.secret}")
        private String apiSecret;
    
        @Value("${coolsms.api.number}")
        private String fromPhoneNumber;
    
        public String sendSms(String to) throws CoolsmsException {
            try {
                // 랜덤한 4자리 인증번호 생성
                String numStr = generateRandomNumber();
    
                Message coolsms = new Message(apiKey, apiSecret); // 생성자를 통해 API 키와 API 시크릿 전달
    
                HashMap<String, String> params = new HashMap<>();
                params.put("to", to);    // 수신 전화번호
                params.put("from", fromPhoneNumber);    // 발신 전화번호
                params.put("type", "sms");
                params.put("text", "인증번호는 [" + numStr + "] 입니다.");
    
                // 메시지 전송
                coolsms.send(params);
    
                return numStr; // 생성된 인증번호 반환
    
            } catch (Exception e) {
                throw new CoolsmsException("Failed to send SMS", e);
            }
        }
    
        // 랜덤한 4자리 숫자 생성 메서드
        private String generateRandomNumber() {
            Random rand = new Random();
            StringBuilder numStr = new StringBuilder();
            for (int i = 0; i < 4; i++) {
                numStr.append(rand.nextInt(10));
            }
            return numStr.toString();
        }
    }

     

     

    SmsController

    @RestController
    @RequestMapping("/api/sms")
    public class SmsController {
    
        @Autowired
        private CoolSmsService coolSmsService;
    
        @PostMapping("/send")
        public String sendSms(@RequestBody Map<String, String> body) {
            String phoneNumber = body.get("phoneNumber");
            try {
                String generatedCode = coolSmsService.sendSms(phoneNumber);
                return "Generated verification code: " + generatedCode;
            } catch (CoolsmsException e) {
                e.printStackTrace();
                return "Failed to send SMS: " + e.getMessage();
            }
        }
    }

     

     

    이와같이 코드를 모두 작성 한 뒤 PostMan으로 테스트를 해보았다. 

    {
        "phoneNumber": "01012345678"
    }

     

    초기에 설정하였던 (yml파일)Number로 부터  발송하고자하는 Number에게 발송이 된다. 

    물론 수신인 발송인 모두 나 자신으로 테스트를 하였다. 이를 활용하여 인증서비스에 활용해보자!

    반응형

    댓글

Designed by Tistory.