Amazon Web Services 한국 블로그

Amazon Polly를 통한 음성 읽기 서버리스 앱 개발하기

Amazon Polly는 딥 러닝 학습 기술을 사용하여 사람 목소리처럼 들리는 음성을 합성하는 인공 지능 서비스입니다. 25 개국 언어로 52 가지(한국어 서연 목소리 포함)의 목소리가 포함되어 있어 이상적인 목소리를 선택하여 다양한 국가에서 사용할 수 있는 음성을 제공하는 애플리케이션을 제작할 수 있습니다. 또한, 실시간 대화를 지원하는 데 요구되는 일관성 있는 빠른 응답 시간을 제공합니다. 오프라인 재생 또는 재배포를 위해 Polly의 오디오 파일을 캐시하고 저장할 수 있습니다. (즉, 재활용이 가능하므로 추가 과금이 발생하지 않습니다.)

이 글은 Amazon Polly를 사용하여 텍스트를 음성으로 변환하는 서버리스 서비스 기반 애플리케이션을 구축하는 방법을 소개합니다. 이 애플리케이션은 텍스트를 여러 언어로 받아 들인 다음 웹 브라우저에서 재생할 수 있는 오디오 파일로 변환하는 간단한 사용자 인터페이스를 제공합니다.

소스 콘텐츠로 블로그 게시물을 사용하지만 여러분이 원하시면 모든 유형의 텍스트를 사용할 수 있습니다.예를 들어, 차를 운전하거나 자전거를 타는 동안 뉴스 기사 또는 책을 읽거나, 식사를 준비하는 동안 조리법을 읽어주는 애플리케이션에 사용할 수 있습니다.

아래는 본 샘플 서비스에 대한 아키텍처 입니다.

실습 개요

이 애플리케이션은 세 가지 서비스를 제공합니다.

  • 첫 번째는 HTML, CSS, Javascript 및 이미지를 정적 웹 페이지로 호스팅 합니다. Amazon S3(Simple Storage Service)에서 호스팅되는 정적 웹 페이지를 기반으로 실행합니다.
  • 두 번째는 새로운 게시물에 대한 텍스트 정보를 MP3 파일로 변환하는 방법을 제공합니다.
    1. MP3로 생성할 텍스트 정보는 Amazon API Gateway에 의해 노출 된 RESTful 웹 서비스에 의해 수신됩니다.
    2. Amazon API Gateway는 MP3 파일 생성 프로세스를 초기화하는 전용 Lambda 함수인 “New Post”를 설정합니다.
    3. 한자를 한글로 변환하고자 할 경우에 사용할 “Hanja to Korean” Lambda 함수를 호출 할 수 있도록 설정합니다.
    4. “New Post” Lambda 함수는 게시물에 대한 메타 정보를 DynamoDB 테이블에 저장합니다.
    5. 전체 프로세스를 비동기적으로 실행하기 위해 Amazon SNS를 사용하여 새 게시물에 대한 정보를 받고 변환을 시작하도록 프로세스를 분리합니다.
    6. 새 게시물의 텍스트를 오디오 파일로 변환하기 위한 Lambda 함수인 “Convert to Audio”는 Amazon SNS 주제에서 트리거 되도록 설정합니다.
    7. “Convert to Audio” Lambda 함수는 Amazon Polly를 사용하여 텍스트를 지정된 언어의 음성을 이용하여 오디오 파일로 변환합니다.
    8. 생성된 오디오 파일인 MP3 파일은 전용 S3 버킷에 저장합니다.
    9. 텍스트가 MP3로 변환된 S3 버킷에 대한 참조 URL 정보 및 해당 게시물 처리 상태에 대한 정보는 DynamoDB 테이블에 업데이트 합니다.
  • 세 번째는 게시물에 대한 정보(S3 버킷에 저장된 MP3 파일에 대한 링크 포함)를 검색하는 것입니다.
    1. RESTful 웹 서비스는 Amazon API Gateway를 사용하여 배포합니다. Amazon API Gateway는 게시물에 대한 정보를 검색하는 방법을 제공합니다. 이 방법은 게시물의 텍스트와 MP3 파일이 저장되는 S3 버킷에 대한 링크가 포함됩니다. 이 시나리오에서 이 웹 서비스는 Amazon S3에서 호스팅되는 정적 웹 페이지에서 호출됩니다.
    2. Amazon API Gateway는 게시 데이터를 검색하기 위한 로직을 배포한 “Get Post” Lambda 함수를 호출합니다.
    3. “Get Post” Lambda 함수는 DynamoDB 테이블에서 게시물에 대한 정보(Amazon S3에 대한 참조 URL을 포함)를 검색합니다.

아래 실습 가이드에 따라 다음과 같은 순서로 진행됩니다. 아래 실습을 직접 수행하려면 Amazon Polly 서비스가 제공되는 리전을 선택하십시오. (이 예제는 Seoul 리전에서 한국어 언어 설정 상태에서 진행합니다.)

  1. DynamoDB 테이블 만들기
  2. mp3 저장을 위한 S3 버킷 만들기
  3. SNS 주제 만들기
  4. IAM 역할 만들기
  5. “New Post” Lambda 함수 만들기
  6. “Hanja to Korean” Lambda 함수 만들기
  7. “Convert to Audio” Lambda 함수 만들기
  8. “Get Post” Lambda 함수 만들기
  9. Lambda 함수를 RESTful 웹 서비스로 만들기
  10. 정적 웹 서비스를 위한 S3 버킷 만들기
  11. 최종 테스트

실습 가이드 및 소스 코드

  1. 실습 문서 다운로드 받기 (위 실습 순서에 따른 상세 실습 문서입니다.)
  2. 정적 웹 페이지에 사용할 소스코드 다운로드 받기 (index.html, scripts.js, styles.css)
  3. 한자를 한글로 변환하기 위한 소스코드 다운로드 받기 (Java package)
  4. Lambda 함수에서 사용할 소스코드 다운로드 받기 (NewPost, ConvertToAudio,GetPost)

실습 결과

실습을 진행하면 다음과 같은 결과물을 제작할 수 있습니다. Amazon S3를 이용하여 정적 웹 서비스가 제공되는 페이지를 만들고, API Gateway로 RESTful API를 호출 받고, 로직은 Lambda에 구현한 텍스트를 입력하면 음성으로 읽어주는 MP3 결과물을 생성합니다.

텍스트를 음성으로 변환 요청하기

게시물을 조회하여 텍스트를 확인하거나 음성으로 변환된 MP3를 재생

결론

이 게시물에서 텍스트를 수십 개의 언어로 음성으로 변환하고 그 텍스트를 훨씬 더 많은 목소리로 말할 수있는 애플리케이션을 만들었습니다. 블로그 게시물을 음성으로 변환하는 애플리케이션을 만들었지만 웹 사이트에서 텍스트를 변환하거나 웹 애플리케이션에서 음성 기능을 추가하는 등의 다른 목적으로 블로그 게시물을 사용할 수 있습니다. 그리고 서버리스 서비스들만 이용해서 구축했습니다.

즉, 유지 관리하거나 패치해야 하는 서버들이 존재하지 않습니다. 기본적으로 AWS Lambda, Amazon API Gateway, Amazon S3 및 Amazon DynamoDB는 다수의 가용 영역을 사용하기 때문에 애플리케이션은 고가용성(HA)을 가집니다.

뿐만 아니라, WordPress를 사용하고 있다면, WordPress Polly Plugin을 이용하면 손쉽게 Polly를 사용할 수 있습니다. 그럼 이 다음에는 무엇을 할 수 있을까요? 이런 접근법을 사용하면 이전에 가능했던 것보다 더 나은 사용자 경험을 제공하는 새로운 애플리케이션을 상상하고 구축할 수 있습니다.

본 실습 가이드는 Tomasz Stachlewski가 작성한 Build Your Own Text-to-Speech Applications with Amazon Polly의 블로그를 한국어 콘솔에 맞게 재편집 하였습니다.

이 글은 김현수 AWS 솔루션스 아키텍트가 작성하였으며, 디지털 변환을 가속화 할 수 있게 해주는 서버리스(serverless) 아키텍처와 같은 혁신적인 기술과 인공지능(AI/ML)에 관심이 많습니다.