SSML이란? AI 음성의 발음·속도·쉼을 조절하는 마크업 언어
TL;DR
SSML(Speech Synthesis Markup Language)은 TTS가 텍스트를 어떻게 읽을지 발음, 음량, 음높이, 속도, 쉼 같은 정보를 태그로 지정하는 XML 기반 마크업 언어입니다. 같은 대본이라도 숫자를 한 자리씩 읽게 하거나 문장 사이에 쉼을 넣고 특정 단어의 발음을 보정할 수 있습니다. 다만 모든 TTS 서비스와 음성이 같은 태그를 지원하지 않으므로 지원 목록을 확인하고 실제 오디오를 들어 봐야 합니다.
핵심 3줄 요약
- 핵심 1
SSML은 말할 내용뿐 아니라 말하는 방식을 지정합니다. 대본에 태그를 더해 발음, 속도, 음높이, 음량과 쉼을 조절합니다. - 핵심 2
TTS와 SSML은 역할이 다릅니다. TTS가 텍스트를 음성으로 바꾸는 엔진이라면 SSML은 엔진에 읽는 방법을 전달하는 입력 형식입니다. - 핵심 3
표준이 있어도 결과와 지원 범위는 서비스마다 다릅니다. 지원하지 않는 태그, 음성별 차이, XML 문법 오류와 문자 제한을 발행 전에 점검해야 합니다.
이 글에서 다룰 내용
- SSML의 한 문장 정의
- 안내 방송 대본으로 보는 쉬운 예시
- speak, break, say-as, phoneme, prosody 태그의 역할
- TTS, XML, 발음 사전, 음성 프롬프트와의 차이
- AI 음성 콘텐츠와 음성 에이전트에서 쓰는 순서
- 서비스별 태그 호환성과 실제 청취 검수가 필요한 이유
- 자주 묻는 질문과 공식 출처
SSML을 한 문장으로 정의하면 무엇인가요?
SSML은 음성 합성 시스템이 텍스트를 어떤 발음, 음량, 음높이, 속도와 리듬으로 읽을지 XML 태그로 표시하는 표준 마크업 언어입니다.
W3C는 SSML을 웹과 다른 애플리케이션에서 합성 음성을 만들 때 쓰는 XML 기반 마크업 언어로 설명합니다. 핵심 목적은 작성자가 발음, 음량, 음높이, 말하기 속도 같은 음성 출력 요소를 여러 합성 플랫폼에서 일관된 형식으로 지정하게 하는 데 있습니다.
SSML은 음성 파일 자체가 아닙니다. 대본과 읽는 방법을 함께 적은 텍스트 문서에 가깝습니다. TTS 엔진은 이 문서를 읽고 태그가 지시하는 방식으로 오디오를 만듭니다.
한 줄 정리: TTS에 평문을 보내면 엔진이 읽는 방식을 대부분 정하고 SSML을 보내면 작성자가 발음과 쉼 같은 일부 요소를 더 구체적으로 지정합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 AI 음성으로 매장 안내 방송을 만든다고 가정해 보겠습니다.
대본은 신제품 AI24를 소개합니다. 상담 전화는 1588-1234입니다. 평문만 보내면 TTS가 AI24를 예상과 다르게 읽거나 전화번호를 큰 숫자처럼 묶어 읽을 수 있습니다. 두 문장 사이의 쉼도 너무 짧을 수 있습니다.
SSML에서는 speak 태그 안에 전체 대본을 넣고 break 태그로 문장 사이의 쉼을 지정할 수 있습니다. say-as 태그로 전화번호를 한 자리씩 읽도록 알리고 phoneme이나 sub 태그로 제품명의 발음을 보완할 수도 있습니다. prosody 태그를 지원하는 서비스라면 말하기 속도, 음높이와 음량을 조정할 수 있습니다.
이렇게 만든 SSML은 TTS 서비스에 입력됩니다. 서비스는 태그를 해석한 뒤 음성 파일이나 오디오 스트림을 반환합니다. 태그가 대본의 의미를 새로 만드는 것은 아닙니다. 사람이 의도한 읽기 방식을 합성 엔진에 전달합니다.
쉬운 예시: 평문이 무엇을 말할지만 담는다면 SSML은 어디서 쉬고 숫자를 어떻게 읽으며 어느 발음을 보완할지까지 덧붙인 대본입니다.
자주 쓰는 SSML 태그는 무엇인가요?
speak 태그
SSML 문서의 시작과 끝을 감싸는 최상위 태그입니다. Amazon Polly 문서는 SSML 입력 전체를 speak 태그 안에 넣도록 안내하고 Google Cloud도 speak를 SSML 응답의 루트 요소로 설명합니다.
break 태그
단어나 문장 사이의 쉼을 조절합니다. 짧은 안내 멘트의 호흡을 나누거나 항목 사이에 잠시 멈추게 할 때 유용합니다. Google Cloud 문서에서는 시간이나 상대적인 강도로 쉼을 지정할 수 있습니다.
say-as 태그
숫자, 날짜, 시간, 통화, 전화번호나 철자를 어떤 유형으로 읽을지 알려 줍니다. 같은 문자라도 문맥에 따라 읽는 방법이 여러 개인 경우에 도움이 됩니다.
phoneme과 sub 태그
phoneme 태그는 발음 기호를 지정하고 sub 태그는 화면에 적힌 표현 대신 다른 말로 읽게 합니다. 사람 이름, 브랜드명과 약어처럼 기본 발음이 자주 어긋나는 단어를 다룰 때 씁니다.
prosody 태그
말하기 속도, 음높이와 음량 같은 운율 요소를 조정합니다. 다만 적용 가능한 속성과 범위는 서비스와 음성 종류에 따라 다를 수 있습니다.
핵심 인사이트: 태그 이름을 많이 아는 것보다 실제 대본에서 발음 오류와 부자연스러운 쉼을 찾아 필요한 태그만 쓰는 편이 효과적입니다.
AI 음성을 사용할 때 왜 중요한가요?
첫째, 숫자와 약어의 읽는 방식을 명확히 할 수 있습니다. 전화번호, 날짜, 시간, 단위와 제품 코드는 문자만 보고 읽으면 뜻이 달라지기 쉽습니다.
둘째, 긴 문장의 호흡을 정리할 수 있습니다. 안내 방송, 교육 콘텐츠와 오디오북은 문장 구조가 보여도 귀로 들을 때는 경계가 모호할 수 있습니다. 적절한 쉼과 속도는 이해를 돕습니다.
셋째, 반복 제작의 기준을 남길 수 있습니다. 같은 대본을 다시 생성하거나 여러 언어·목소리로 바꿀 때 어떤 단어의 발음을 보정했고 어디서 쉬었는지 문서로 관리할 수 있습니다.
넷째, 음성 인터페이스의 응답을 다듬을 수 있습니다. 음성 에이전트가 주문 번호를 읽거나 경고 문구를 말할 때 중요한 부분을 또렷하게 전달하도록 조정합니다.
다섯째, TTS 기본값에만 의존하지 않고 문제 지점을 좁힐 수 있습니다. 대본, 음성 모델, 언어 설정과 SSML을 분리해 기록하면 어떤 변경이 결과에 영향을 줬는지 비교하기 쉽습니다.
헷갈리는 용어와 무엇이 다른가요?
SSML과 TTS
TTS(Text-to-Speech)는 텍스트를 음성으로 바꾸는 기술이나 서비스입니다. SSML은 TTS에 텍스트와 읽는 방법을 전달하는 마크업 형식입니다. SSML만으로 음성이 만들어지지는 않으며 SSML을 처리하는 음성 합성 엔진이 필요합니다.
SSML과 XML
XML은 데이터를 태그로 구조화하는 범용 마크업 문법입니다. SSML은 XML 문법을 사용해 음성 합성용 요소와 속성을 정의한 특정 언어입니다. 모든 XML 문서가 SSML은 아닙니다.
SSML과 발음 사전
SSML은 한 문서 안에서 발음과 읽기 방식을 지정할 수 있습니다. 발음 사전이나 사용자 정의 어휘집은 여러 대본에서 반복되는 이름과 전문 용어의 발음 규칙을 모아 재사용하는 데 더 알맞습니다. 서비스에 따라 SSML에서 외부 발음 사전을 연결할 수도 있습니다.
SSML과 음성 프롬프트
생성형 음성 모델은 자연어 지시로 말투, 감정이나 속도를 요청할 수 있습니다. SSML은 정해진 태그와 속성으로 입력을 구조화합니다. 자연어 지시 지원 여부와 SSML 지원 여부는 제품마다 다르므로 같은 기능으로 단정하면 안 됩니다.
SSML과 자막 마크업
자막 파일은 화면에 텍스트를 언제 표시할지 시간을 기록합니다. SSML은 TTS가 텍스트를 어떻게 말할지 지정합니다. 영상 제작에서는 둘을 함께 쓸 수 있지만 목적과 처리 단계는 다릅니다.
비교 정리: TTS는 음성을 만들고 XML은 문법의 바탕을 제공하며 SSML은 TTS가 읽는 방식을 구조화합니다. 발음 사전은 반복 어휘를 관리하고 자막은 화면 표시 시간을 다룹니다.
실전에서는 어떻게 사용하나요?
안내 방송과 고객 알림
전화번호, 주문 번호, 시간과 금액을 정확히 읽게 하고 문장 사이에 쉼을 넣습니다. 여러 지점에서 같은 대본을 쓴다면 SSML 원본과 최종 오디오를 함께 보관합니다.
교육 콘텐츠와 오디오북
제목과 본문 사이의 호흡을 나누고 약어와 외래어 발음을 보정합니다. 속도를 한 번에 크게 바꾸기보다 짧은 구간을 들어 보며 조정합니다.
음성 에이전트
사용자 이름, 예약 시간, 확인 번호처럼 틀리면 혼란이 큰 값을 별도로 표시합니다. 동적으로 들어오는 텍스트는 XML 예약 문자를 안전하게 이스케이프한 뒤 SSML 문서에 넣어야 합니다.
다국어 음성 제작
언어와 음성을 선택하고 서비스가 해당 언어에서 지원하는 태그를 확인합니다. 같은 태그를 쓰더라도 언어와 음성 모델에 따라 결과가 달라질 수 있으므로 언어별 청취 검수가 필요합니다.
반복 가능한 제작 흐름
먼저 평문 대본으로 기본 음성을 만듭니다. 발음, 숫자 읽기와 쉼에서 문제가 난 부분을 표시한 뒤 필요한 SSML 태그만 추가합니다. 마지막으로 실제 재생 장치에서 듣고 사용한 서비스·음성·언어·SSML 버전을 함께 기록합니다.
실전 팁: SSML부터 복잡하게 작성하지 말고 평문 오디오에서 문제가 확인된 구간만 태그로 보정하세요. 수정 이유를 대본 옆에 남기면 재생성할 때 비교하기 쉽습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 모든 서비스가 W3C의 모든 태그를 지원하는 것은 아닙니다. Google Cloud와 Amazon Polly는 지원하는 SSML 태그의 부분집합을 문서로 안내합니다. Microsoft도 음성 종류에 따라 지원 범위가 달라질 수 있다고 설명합니다.
둘째, 같은 태그가 같은 소리를 보장하지 않습니다. W3C 명세도 음성 합성 처리기마다 실제 출력이 달라질 수 있음을 밝힙니다. 속도를 10% 바꾸거나 같은 쉼을 넣어도 음성과 엔진에 따라 체감 결과가 다를 수 있습니다.
셋째, XML 문법을 지켜야 합니다. 태그를 닫지 않거나 따옴표와 꺾쇠괄호 같은 예약 문자를 그대로 넣으면 요청이 실패할 수 있습니다. Google Cloud는 예약 문자를 이스케이프하도록 안내합니다.
넷째, 지원하지 않는 태그를 보내면 무시되거나 오류가 날 수 있습니다. Amazon Polly는 지원하지 않는 태그를 특정 음성 형식에 사용하면 오류가 발생한다고 명시합니다. 발행 전에 선택한 음성과 엔진의 지원표를 확인하세요.
다섯째, 글자 수와 비용 계산 기준을 확인합니다. 일부 서비스는 SSML 문자도 요청 제한이나 과금 문자 계산에 반영합니다. 이 기준은 서비스마다 다르므로 현재 공식 문서를 확인해야 합니다.
여섯째, 자연스러운 소리가 정확한 발음을 뜻하지는 않습니다. 사람 이름, 회사명, 주소, 날짜, 금액과 법적 고지는 원문과 최종 오디오를 사람이 대조해야 합니다.
주의: SSML은 음성 품질을 자동으로 보장하는 마법의 설정이 아닙니다. 지원 범위 확인, XML 검증과 실제 청취를 거쳐야 안전하게 쓸 수 있습니다.
자주 묻는 질문
Q1. SSML은 무엇의 약자인가요?
Speech Synthesis Markup Language의 약자입니다. 한국어로는 음성 합성 마크업 언어라고 부를 수 있습니다.
Q2. SSML을 쓰려면 코딩을 알아야 하나요?
기본 태그 몇 개는 비교적 쉽게 쓸 수 있습니다. 다만 SSML은 XML 기반이므로 태그 구조, 속성 따옴표와 예약 문자 처리를 지켜야 합니다. 중요한 작업은 서비스 예제에서 시작해 검증 도구와 실제 청취로 확인하는 편이 안전합니다.
Q3. 모든 TTS 서비스에서 같은 SSML을 사용할 수 있나요?
아닙니다. W3C 표준이 있지만 각 서비스와 음성 엔진은 일부 태그만 지원하거나 자체 확장 태그를 제공할 수 있습니다. 옮기기 전 지원 태그 목록을 비교해야 합니다.
Q4. SSML로 특정 사람의 목소리를 만들 수 있나요?
SSML은 발음, 속도, 음높이, 음량과 쉼 같은 읽기 방식을 지정합니다. 특정 사람의 목소리를 복제하는 기술은 보이스 클로닝이나 사용자 정의 음성에 가깝고 별도의 동의·권한·제품 기능이 필요합니다.
Q5. SSML을 쓰면 발음 오류가 모두 사라지나요?
아닙니다. phoneme, sub, say-as 같은 태그가 발음과 읽기 방식을 보완하지만 언어·음성·엔진별 지원 범위가 다릅니다. 최종 오디오를 듣고 고유명사와 숫자를 원문과 대조해야 합니다.
출처
마무리
SSML은 TTS가 텍스트를 어떤 발음, 속도, 음높이, 음량과 쉼으로 읽을지 태그로 지정하는 XML 기반 마크업 언어입니다. 평문 대본으로 해결하기 어려운 숫자 읽기, 고유명사 발음과 문장 호흡을 더 분명하게 전달할 때 유용합니다.
감자나라ai님이 AI 안내 방송이나 음성 콘텐츠를 만든다면 먼저 평문으로 들어 보고 문제가 있는 구간만 SSML로 보정해 보세요. 선택한 서비스와 음성이 해당 태그를 지원하는지 확인하고 최종 오디오는 원문과 대조해 듣는 과정까지 포함해야 합니다.
