Tencent Cloud SMS 서비스 통합 및 활용

1. Tencent Cloud SMS 개요 및 신청 절차

사용자 인증, 알림 전송 등에 필요한 문자 메시지 발송 기능을 제공하는 Tencent Cloud SMS는 다양한 오픈 API를 통해 구현할 수 있습니다. 주요 단계는 다음과 같습니다.

  • 계정 생성 및 플랫폼 접근: Tencent Cloud 콘솔에서 계정을 등록하고, SMS 서비스를 활성화합니다.
  • 발신자 서명 등록: 공식 웹사이트 또는 페르소나 계정(예: WeChat Official Account)을 통해 인증된 서명을 등록해야 하며, 이는 국가 규제(예: 중국 산업정보기술부)에 따라 필수입니다.
  • 메시지 템플릿 작성: 사용자 입력값을 포함한 동적 템플릿을 미리 제출하고 승인받습니다. 예: {1}의 인증번호는 {2}입니다.
  • 무료 체험 제공: 초기 100건의 무료 발송 권한이 제공됩니다.
  • API 문서 참조: 최신 버전은 v3이며, 공식 문서를 통해 코드 예제를 확인하세요.

2. API와 SDK의 차이점 이해

API (Application Programming Interface)는 외부 시스템과 상호작용하기 위한 명세로, 요청/응답 형식이 고정되어 있으며, Postman 등을 활용해 직접 테스트 가능합니다. 인증 정보(예: SecretKey)를 포함하여 호출합니다.

SDK (Software Development Kit)는 특정 언어(예: Python, Java)에 맞춰 사전에 래핑된 라이브러리입니다. 설치 후 간단한 함수 호출로 서비스를 사용할 수 있습니다.

# 예시: Python SDK 사용
pip install tencentcloud-sdk-python

주요 사용 조건:

  • 서비스가 활성화되었고, 서명 및 템플릿이 승인됨
  • 국내 발송 시, 별도의 텍스트 패키지 구매 필요 (무료 제공 포함)
  • Python 2.7 ~ 3.6 환경 구성 완료
  • 접근 관리 콘솔에서 SecretIDSecretKey 확보
  • 호출 엔드포인트: sms.tencentcloudapi.com

3. Tencent Cloud SMS 기능의 커스터마이징 래퍼 클래스

다음은 실제 프로젝트에 적용 가능한 문자 인증 코드 생성 및 발송 모듈입니다. 인증번호를 동적으로 생성하고, Tencent Cloud SMS API를 안전하게 래핑했습니다.


# -*- coding: utf-8 -*-
from utils.response import APIResponse
import random
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.sms.v20210111 import sms_client, models
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from . import settings

def generate_verification_code(length=4):
    """랜덤 4자리 인증번호 생성"""
    return ''.join(str(random.randint(0, 9)) for _ in range(length))

def send_sms_to_user(phone_number, code):
    """
    사용자에게 인증번호 전송
    :param phone_number: 수신자 전화번호 (숫자만)
    :param code: 발송할 인증 코드
    :return: 성공 여부
    """
    try:
        # 인증 정보 설정
        cred = credential.Credential(settings.SECRET_ID, settings.SECRET_KEY)

        # HTTP 설정
        http_profile = HttpProfile()
        http_profile.reqMethod = "POST"
        http_profile.reqTimeout = 30
        http_profile.endpoint = "sms.tencentcloudapi.com"

        # 클라이언트 프로파일 설정
        client_profile = ClientProfile()
        client_profile.signMethod = "TC3-HMAC-SHA256"
        client_profile.language = "en-US"
        client_profile.httpProfile = http_profile

        # SMS 클라이언트 생성 (광저우 지역)
        client = sms_client.SmsClient(cred, "ap-guangzhou", client_profile)

        # 요청 객체 생성
        request = models.SendSmsRequest()

        # 필수 파라미터 설정
        request.SmsSdkAppId = settings.APP_ID
        request.SignName = settings.SIGN_NAME
        request.TemplateId = settings.TEMPLATE_ID
        request.TemplateParamSet = [code, "2"]  # 템플릿 변수 대체
        request.PhoneNumberSet = [f"+86{phone_number}"]
        request.SessionContext = ""
        request.ExtendCode = ""
        request.SenderId = ""

        # API 호출
        response = client.SendSms(request)
        print(response.to_json_string(indent=2))
        return True

    except TencentCloudSDKException as e:
        print(f"SMS 발송 실패: {e}")
        return False

환경 변수 예시 (설정 파일 내부):


SECRET_ID = 'FYm3D872pdGg0'
SECRET_KEY = 'iFbkeT6Ya1Qi'
APP_ID = '143172'
SIGN_NAME = '柏众号'
TEMPLATE_ID = '1677'

태그: Tencent Cloud SMS API Python SDK TC3-HMAC-SHA256 인증번호

6월 17일 00:56에 게시됨