
서비스를 운영하다 보면 주문 확인, 예약 안내, 인증 코드 등 다양한 알림을 보내야 하는 상황이 생깁니다. 한국 시장에서는 크게 두 가지 선택지가 있습니다. 카카오 알림톡과 SMS(문자 메시지)입니다. 이 글에서는 코드벤터 개발팀이 실제 프로젝트에 두 가지 방식을 모두 연동해보면서 느낀 비용, 개발 난이도, 도달률 차이를 솔직하게 정리합니다.
카카오 알림톡이란?
카카오 알림톡은 카카오톡 채널(구 플러스친구)을 통해 발송하는 비즈니스 메시지입니다. 텍스트 기반의 SMS와 달리 버튼, 이미지, 링크를 포함할 수 있고 카카오톡 앱 내에서 읽기 좋은 포맷으로 표시됩니다. 국내 카카오톡 사용률이 90% 이상인 만큼 도달률도 매우 높습니다.
알림톡을 발송하려면 카카오 비즈니스 채널 개설 → 템플릿 등록 및 심사 승인 → 카카오 공식 파트너사(발송 대행사) 계약의 3단계를 거쳐야 합니다. 직접 카카오 API를 두드리는 방식이 아니라 반드시 인증된 대행사(솔라피, NHN 클라우드, 알리고 등)를 통해서만 발송할 수 있습니다.
비용 비교 — 알림톡이 항상 저렴할까?
2024년 기준 주요 발송 단가는 다음과 같습니다. SMS 단문(90byte 이하)은 건당 약 8~10원, LMS(장문 2,000byte 이하)는 약 27~30원, MMS(이미지 포함)는 약 65~70원입니다. 카카오 알림톡은 건당 약 7~9원으로 단순 단가만 보면 SMS보다 저렴합니다. 그러나 수신자가 카카오톡을 차단했거나 미설치 상태라면 LMS로 대체 발송(fallback)이 이루어져 LMS 단가가 과금됩니다. 실제 운영에서는 알림톡 + fallback SMS를 합산한 평균 단가를 기준으로 비교해야 합니다.
SMS 발송 코드 (솔라피 기준)
솔라피 SMS API는 RESTful 방식으로 굉장히 단순합니다. FastAPI 환경에서 httpx를 활용한 비동기 발송 예제를 살펴보겠습니다.
# FastAPI + Solapi SMS
import hmac, hashlib, time, base64, httpx
SOLAPI_API_KEY = "your_api_key"
SOLAPI_API_SECRET = "your_api_secret"
def get_auth_header():
date = str(int(time.time() * 1000))
salt = base64.b64encode(date.encode()).decode()[:32]
data = f"{date}{salt}"
sig = hmac.new(SOLAPI_API_SECRET.encode(), data.encode(), hashlib.sha256).hexdigest()
return f"HMAC-SHA256 apiKey={SOLAPI_API_KEY}, date={date}, salt={salt}, signature={sig}"
async def send_sms(to: str, text: str):
async with httpx.AsyncClient() as client:
resp = await client.post(
"https://api.solapi.com/messages/v4/send",
headers={"Authorization": get_auth_header()},
json={"message": {"to": to, "from": "070-XXXX-XXXX", "text": text}}
)
return resp.json()
카카오 알림톡 발송 코드
알림톡은 동일하게 솔라피 API를 사용하지만 kakaoOptions 필드를 추가해야 합니다. 카카오 채널 ID와 심사 완료된 템플릿 코드가 반드시 필요합니다.
# Solapi Kakao AlimTalk
async def send_alimtalk(to: str, template_id: str, variables: dict):
async with httpx.AsyncClient() as client:
resp = await client.post(
"https://api.solapi.com/messages/v4/send",
headers={"Authorization": get_auth_header()},
json={
"message": {
"to": to,
"from": "070-XXXX-XXXX",
"kakaoOptions": {
"pfId": "YOUR_KAKAO_CHANNEL_ID",
"templateId": template_id,
"variables": variables,
"disableSms": False
}
}
}
)
return resp.json()
# Usage
await send_alimtalk(
to="01012345678",
template_id="KA01TP...",
variables={"#{name}": "Hong Gildong", "#{date}": "2026-03-05"}
)
두 채널 통합 서비스 레이어 구성
실무에서는 두 채널을 추상화된 서비스 레이어로 감싸두면 코드 변경 없이 채널을 전환할 수 있습니다. 아래는 알림톡 실패 시 자동으로 SMS로 fallback 처리하는 통합 서비스 예제입니다.
# notification_service.py
from enum import Enum
class NotificationChannel(str, Enum):
SMS = "sms"
ALIMTALK = "alimtalk"
class NotificationService:
async def send(self, to, channel, text=None, template_id=None, variables=None):
if channel == NotificationChannel.ALIMTALK and template_id:
try:
result = await send_alimtalk(to, template_id, variables)
if result.get("errorCode"):
raise ValueError(result["errorMessage"])
return result
except Exception as e:
print(f"AlimTalk failed, fallback to SMS: {e}")
return await send_sms(to, text or "Notification arrived.")
return await send_sms(to, text)
notification_svc = NotificationService()
@router.post("/reservations/{id}/confirm")
async def confirm_reservation(id: int, db=Depends(get_db)):
reservation = await db.get(Reservation, id)
await notification_svc.send(
to=reservation.phone,
channel=NotificationChannel.ALIMTALK,
template_id="KA01TP_CONFIRM",
variables={
"#{name}": reservation.user_name,
"#{datetime}": reservation.datetime.strftime("%Y-%m-%d %H:%M")
},
text=f"[Confirmed] {reservation.user_name}'s reservation is confirmed."
)
return {"status": "confirmed"}
개발 난이도 비교 — SMS가 압도적으로 쉽다
SMS는 API 키를 발급받으면 바로 발송 테스트가 가능합니다. 반면 카카오 알림톡은 채널 개설, 템플릿 등록, 심사 대기(1~3 영업일), 파트너사 계약까지 최소 1주일 이상의 준비 기간이 필요합니다. 또한 메시지 내용을 변경할 때마다 새 템플릿을 등록하고 심사를 받아야 합니다. 서비스 초기에 메시지 형식이 자주 바뀐다면 이 심사 대기 시간이 개발 속도의 발목을 잡을 수 있습니다.
도달률과 사용자 경험
도달률 측면에서는 알림톡이 유리합니다. SMS는 스팸 필터링으로 수신이 차단되는 경우가 있지만, 알림톡은 카카오톡 앱 내에서 표시되어 상대적으로 자유롭습니다. 사용자 경험 측면에서도 버튼, 이미지, 리치 콘텐츠를 포함할 수 있는 알림톡이 우수합니다. 인증 코드(OTP)처럼 즉각적인 발송이 핵심인 경우에는 SMS가 더 안정적입니다.
결론 — 어떤 걸 선택해야 할까?
알림톡을 선택할 때: 국내 B2C 서비스로 카카오톡 사용자가 주요 고객인 경우, 예약 확인·주문 안내처럼 정형화된 알림이 많을 때, 버튼과 리치 콘텐츠로 사용자 행동 유도가 필요할 때. SMS를 선택할 때: 서비스 초기라 알림 형식이 자주 바뀌는 경우, OTP 등 즉시성이 중요한 알림, 해외 사용자도 포함된 서비스.
코드벤터는 글로벌 협력 네트워크를 통해 다양한 서비스의 알림 인프라를 설계하고 구축해왔습니다. 경험상 가장 이상적인 구성은 인증 코드는 SMS, 예약·주문 등 주요 트랜잭션 알림은 알림톡으로 이원화하는 방식입니다. 위에서 소개한 통합 서비스 레이어 패턴을 활용하면 두 채널을 유연하게 관리하면서 비용과 도달률을 모두 최적화할 수 있습니다.


