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 환경 구성 완료
- 접근 관리 콘솔에서
SecretID및SecretKey확보 - 호출 엔드포인트:
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'