home

콘텐츠 제작소, 아이들나라 스튜디오를 소개합니다

안녕하세요, 인텔리전스엔지니어링 팀의 채명철입니다.
지난해 팀 이동이 있었는데, 백엔드 팀에서 갈라져 나와 학습 서비스와 AI를 응용한 서비스를 만들어내는 팀의 일원이 되었습니다. 팀 이동 후 처음으로 하게 된 프로젝트도 바로 이 ‘리딩북 스튜디오’ 인데요. 리딩북 서비스를 먼저 소개하면서 리딩북 스튜디오는 무엇인지, 그리고 어떻게 개발되었는지 소개해드리겠습니다.

리딩북 소개

지난 11월, 리딩북 서비스가 출시되었습니다. 리딩북은 아이에게 동화를 읽어주는 컨셉으로 제작된 서비스입니다. 콘텐츠를 선택하면 동화책을 읽어주면서 발음되고 있는 단어를 확대하는 시각적 효과를 주었습니다. 마치 선생님이 동화책을 읽어주는 것과 같은 콘텐츠를 제공하는 것이 리딩북 서비스의 핵심입니다.
리딩북 재생한 모습
리딩북 서비스는 리딩북을 보여주기 위한 플레이어와 리딩북 콘텐츠 제작을 위한 스튜디오 두 개의 프로젝트로 구분되어 진행되었습니다. 이 두 개의 프로젝트 중 저희 팀은 스튜디오 개발에 참여하게 되었습니다.

리딩북 스튜디오

리딩북 스튜디오는 출판사로부터 받은 동화책 원본을 리딩북 콘텐츠로 만들고, 완성된 콘텐츠를 CMS에 등록하는 과정을 도와줍니다. 간략히 절차를 나열하면 다음과 같습니다.
1.
동화책 원본(PDF)을 적절히 가공하여 각 페이지를 이미지로 만든다.
2.
페이지마다 재생에 필요한 텍스트, 음성, 단어 사전 등 데이터를 추가한다.
3.
모든 작업이 완료되면 CMS에 업로드한다.

Workflow

이렇게 대략 필요한 기능이 정해진 후에는 절차를 여러 개의 태스크로 나눠서 구현하기로 했습니다. 여기서 태스크 간 작업 순서를 제어할 수 있는 도구의 필요성이 생겼습니다. 구체적으로는 Apache Airflow의 DAG와 같은 기능이 필요했던 것입니다.
이러한 요구사항을 만족하는 오픈 소스들이 이미 있을 것으로 생각했었습니다. 실제로 몇 가지 프로젝트들을 후보로 검토했었는데, 비즈니스와 관련된 이유나 프론트엔드 연계 등의 사유로 실제로 적용하지는 못했습니다. 대신 Continueous Deployment 플랫폼 Spinnaker의 내부 구성요소 중 하나인 Orca의 개념을 일부 참고하여 직접 설계 및 구현하였습니다.

구조

리딩북 스튜디오는 워크플로우, 파이프라인, 스테이지, 태스크라는 컴포넌트들을 사용하여 제작 프로세스를 구현했습니다. 각각의 컴포넌트를 한 줄로 간략히 표현해보면 다음과 같습니다.
워크플로우: 여러 파이프라인의 집합.
파이프라인: DAG 한 개를 제어.
스테이지: DAG를 이루는 정점에 해당.
태스크: Stage가 실행할 실제 작업.
그림으로 나타내면 다음과 같습니다.
이렇게 작업과 그 순서를 정의할 수 있는 기반을 마련했고, 이 위에 동화책 PDF 파일을 리딩북 콘텐츠로 만들 수 있는 워크플로우를 정의했습니다.

상태 관리

워크플로우 구성 요소 중 Pipeline, Stage 가 상태를 가지고 있습니다.
먼저 파이프라인의 상태입니다.
스테이지의 작업을 실행할 때만 상태가 Running 이 되며, 그 외에는 Paused 상태입니다. Running 상태로 변경할 때, Optimistic Lock을 사용하여 Stage를 실행하는 쓰레드가 두 개 이상이 되지 않도록 보장했습니다.
파이프라인 내 모든 스테이지가 완료 상태가 되면 Succeeded 상태로 변경됩니다. 완료 상태를 나타내는 또 다른 상태가 Skipped인데요. 이 상태는 삽화만 있는 페이지처럼 스테이지 작업을 실행하지 않아도 되는 경우 즉시 완료 처리를 하기 위해 만든 상태입니다.
다음은 스테이지의 상태 전이도입니다.
파이프라인의 상태와 크게 다르지 않지만, 검수를 위해 in_inspection 이라는 특별한 상태가 있습니다.
일부 스테이지는 그 스테이지가 실행할 태스크를 완료한 뒤에 그 결과물이 문제가 없는지 확인해야 하는 경우가 있습니다. 주로 AI 기술을 사용한 스테이지들이 그 예시입니다. 예를 들어, 텍스트 인식을 위해 OCR 작업을 돌렸는데 글자가 잘못 인식되었거나 인식이 안 되는 등 문제가 발생하기도 합니다. 이러한 오류는 사람이 직접 확인한 후 바로 잡아야 하며, 그 때문에 in_inspection 상태가 추가되었습니다.
그리고 이미 스테이지를 완료했지만 추후 수정해야 할 상황이 발생하기도 하는데, 이를 위해 재검수와 리셋이라는 기능을 각각 추가했습니다. 스테이지의 결과를 다시 변경하고 싶다면 재검수를, 전체 작업을 다시 돌리고 싶다면 리셋을 선택하여 언제든지 다시 작업할 수 있는 유연함을 줄 수 있었습니다.
지금까지 리딩북 스튜디오의 핵심 요소인 워크플로우, 파이프라인, 스테이지, 태스크에 대해 설명드렸습니다. 지금부터는 리딩북 제작 과정을 소개해 드리겠습니다.

리딩북 제작

리딩북 제작 프로세스는 두 개의 워크플로우로 구성됩니다.
이미지 처리: 출판사에서 전달받은 동화책 원본 PDF 파일을 페이지당 한 개의 이미지 파일로 가공하는 작업입니다.
페이지 처리: 페이지마다 리딩북 재생에 필요한 데이터를 만듭니다.

이미지 처리

첫 번째 워크플로우는 PDF를 가공하여 페이지 이미지 뭉치를 만들어내는 데 초점이 맞춰져 있습니다. 워크플로우가 같은 스테이지들로 구성된 파이프라인의 집합인 만큼, 별도의 워크플로우로 분리되었습니다.
스테이지는 아래 순서로 구성했습니다.
1.
PDF 변환
2.
이미지 자르기
3.
이미지 분할
4.
이미지 선택
5.
이미지 리사이징
PDF 원본을 이미지로 변환하고 나서, 불필요한 페이지를 제거하고 페이지에서 불필요한 부분을 제거하는 등 이미지 편집도 스튜디오 안에서 처리할 수 있도록 워크플로우를 제공했습니다.

페이지 처리

리딩북 제작 절차 중 두 번째 워크플로우는 가공된 이미지로부터 리딩북 재생에 필요한 데이터를 추출하고 덧붙이는 작업을 진행합니다. 이때 파이프라인은 동화책 페이지와 1:1 관계로 만들었습니다.
페이지 처리는 다양한 AI 기술을 활용하여 구현되었습니다.

텍스트 인식

이미지로부터 텍스트를 추출하는 작업으로, OCR 기술을 사용했습니다. OCR 덕에 글자 대부분을 텍스트로 쉽고 빠르게 추출할 수 있었습니다.
OCR 작업
OCR 덕에 텍스트를 빠르게 추출할 수 있지만, 발음될 필요가 없는 텍스트가 포함되어 있거나 인식이 되지 않는 때도 있습니다. 이런 상황에서는 제작자가 직접 텍스트를 제외하거나 추가해줘야 하는 작업이 필요합니다.
이렇게 추출된 텍스트는 다음 스테이지에서 음성 합성 및 음성 인식, 그리고 단어 사전 제작에 사용됩니다.

음성 합성

추출한 텍스트를 음성 파일로 만드는 작업도 진행합니다.
리딩북을 재생할 때 나오는 음성이 이 스테이지에서 생성됩니다. 기본적으로 TTS 기술을 활용해 음성을 만듭니다. 아이들나라 책 읽는 TV와 같이 전문 성우가 녹음한 음성 파일이 있다면 페이지 구간마다 MP3 파일을 잘라 사용하기도 합니다.
TTS 덕에 빠르게 MP3 파일을 만들어 낼 수 있지만, 퀄리티가 좋은지는 실제로 들어봐야 하고 문제가 있으면 조금씩 수정하며 다시 만들어야 합니다. 이렇게 완성도를 높이는 작업도 제작자의 손을 거치게 됩니다.

음성 인식

리딩북은 책을 읽어주는 음성이 재생될 때 현재 발음되는 단어를 포커싱하는 기능이 핵심입니다. 이 스테이지에서 텍스트 인식과 음성 합성으로 만들어진 두 결과물을 가지고 단어가 언제 발음되는지 MP3 파일 상의 재생 위치(오프셋)를 기록합니다.
이 스테이지에서는 STT 작업을 사용하여 자동화를 시도합니다. STT의 음성 인식률 자체는 높은 편이지만, 이 작업에서도 사람의 개입이 필요합니다. OCR 스테이지에서 인식했던 단어의 개수와 STT 스테이지에서 인식한 단어의 개수를 같도록 맞춰주어야 합니다.

단어 사전

추출된 단어를 아이들나라가 가지고 있는 단어 사전에서 검색하여 그 뜻을 매핑하는 작업입니다. 아이들나라 사전은 원래의 사전 뜻풀이를 바탕으로 아이들 눈높이에 맞는 설명으로 바꿔주고, 단어의 발음도 재생해볼 수 있는 기능입니다. 여기에는 LLM과 TTS 기술이 같이 사용되었습니다.
아이들나라 최초의 콘텐츠 제작소는 이렇게 만들어졌습니다. 이렇게 만들어지는 리딩북은 다른 도서 콘텐츠에 비해 제작 단가가 현저하게 낮고 책 한 권이 서비스에 편성되기까지 시간도 매우 짧아 비용적인 측면에서 매우 효율적인 콘텐츠가 되었습니다. 특히 사람이 개입하는 부분에서 작업 스트레스를 줄이는 것도 중요했는데, 이 부분은 프론트엔드 김혜인님께서 편리한 인터페이스를 만들어주셨습니다 .

To be continued..

성공적으로 마무리된 프로젝트이지만, 아직 해결해야 할 문제도 남아있습니다. 가장 큰 숙제는 ‘사람의 개입을 어떻게 더 줄이는가’입니다.
AI 기술을 활용하는 작업은 정확하지만 완벽하지는 않습니다. 부족한 정확도를 사람의 개입으로 해결하기 위해 추가적인 API 기능 개발과 프론트엔드 단에서 UI/UX 완성도를 높이는 방식을 사용했습니다.
AI 기술이 더 진보하기 전까지 사람의 개입은 필연이라고 보고, 작업 효율을 위해 사람의 개입을 지금보다 더 줄이는 방안을 찾아 적용하려고 합니다.
또한 리딩북 스튜디오는 조직 내에만 오픈된 어드민 성격의 서비스입니다. 그래서 현재 콘텐츠 관리 시스템(CMS) 어드민 한쪽에 리딩북 스튜디오가 자리 잡고 있습니다.
그러나 나중에는 리딩북 스튜디오를 개방하여 누구나 리딩북 제작을 참여할 수 있도록 고도화할 계획을 하고 있습니다. 이를 위해서는 작업 실행을 더욱 세밀하게 제어할 수 있는 플랫폼이 필요합니다. 지금의 기능을 워크플로우와 작업 실행을 제어하는 기능을 갖춘 오픈소스로 마이그레이션할 계획을 하고 있습니다.