LINE Corporation이 2023년 10월 1일부로 LY Corporation이 되었습니다. LY Corporation의 새로운 기술 블로그를 소개합니다. LY Corporation Tech Blog

Blog


LINE 앱의 다자간 대화 기능 통합

LINE은 1:1 대화뿐 아니라 다자간 대화도 지원합니다. 그런데 LINE에는 서로 다른 용도로 개발된 두 가지 다자간 대화 기능인 '여러 명과의 대화'와 '그룹'이 있었습니다.

여러 명과의 대화(Room)는 일시적인 대화를 위해 설계됐습니다. 여러 명과의 대화를 만들 때에는 따로 방의 이름을 지정할 필요가 없으며, 친구를 여러 명과의 대화에 초대할 때에도 친구의 승인을 기다릴 필요가 없습니다. 초대 버튼만 클릭하면 상대가 바로 대화에 참여할 수 있습니다. 즉 여러 명과의 대화는 대화를 바로 시작할 수 있는 구조입니다.

이에 반해 그룹(Group)은 장기적인 대화를 목적으로 설계됐습니다. 이 글을 읽고 계신 여러분도 학교 친구나 직장 동료, 동호회 사람 등으로 구성된 다양한 그룹에 이미 속해 계실 것이라고 생각합니다. 각 그룹에는 이름이 있어서 쉽게 찾을 수 있고, 이름만으로도 그룹의 생성 목적을 쉽게 떠올릴 수 있습니다. 그룹에 친구를 초대하면 초대받은 친구는 대화에 참여하기 전에 초대를 승인해야 합니다.

보통 사용자들은 한 번 참여한 그룹에서 오랜 기간 활동하기 때문에 그룹 구성원의 사용자 경험을 향상시키면서 그룹 구성원 간에 친밀한 관계를 구축하는 데 도움이 되는 다양한 기능들을 지속적으로 그룹에 추가했습니다. 예를 들어 그룹 구성원은 여행에서 찍은 사진을 그룹 앨범에 업로드해 다른 사람들과 공유할 수 있고, 중요한 메모를 그룹 노트에 작성할 수도 있습니다.

사용자들은 이런 기능들을 자주 사용했습니다. 그런데 이런 기능은 그룹에서만 사용할 수 있었습니다. 여러 명과의 대화 사용자는 이런 기능들이 필요하지 않을 것이라고 예상했기 때문입니다.

그룹과 여러 명과의 대화를 '그룹 대화'로 통합합니다

이와 같이 서로 다른 용도로 설계했던 그룹과 여러 명과의 대화를 통합하는 작업이 진행되고 있습니다. 통합의 목표는 사용성을 높이면서 서버와 클라이언트의 리소스를 절약하는 것입니다. 여러 명과의 대화와 그룹은 서로 사양도 조금 다르고, API와 스토리지도 분리돼 있었는데요. 통합 후에는 대화에 참여하는 방법 외에는 모두 동일한 사양이 될 예정입니다. 통합 모델의 이름은 그룹 대화(Group Chat)입니다.

사용성 증진

1:1 대화와 여러 명과의 대화, 그리고 그룹은 각각 기능이 다르지만, 비전문가인 사용자 입장에서는 그 차이를 인식하는 게 어려웠습니다. 그러다 보니 사용자는 앨범과 메모를 포함해 여러 기능을 사용할 수 없다는 것을 모른 채 여러 명과의 대화를 만들어 사용하다가, 앨범과 같은 기능이 필요해지면 전체 대화 기록은 여러 명과의 대화에 남겨 놓은 채(기존 여러 명과의 대화에는 변환 기능이 없습니다) 새로 그룹을 만들어 사용하곤 했습니다.

서버와 클라이언트의 리소스 절약

여러 명과의 대화는 일시적인 대화가 목적이지만 그 데이터는 매일 서버에 축적되고 있습니다. 많은 사용자들이 동일한 구성원으로 기존에 만들어 놓은 대화방이 있었다는 사실을 잊고 새로 만드는데요. 이렇게 동일한 구성원으로 구성된 대화방이 다수 생성되면서 대화 목록에는 불필요한 대화방이 쌓이고 있었습니다. 

이와 같은 문제를 해결하기 위해 여러 명과의 대화와 그룹을 그룹 대화로 통합하기로 결정했습니다.

여러 명과의 대화와 그룹의 통합 전후 비교

아래는 여러 명과의 대화와 그룹의 통합 전후 차이를 정리한 표입니다. 

  • 통합 전
  • 통합 후

그룹을 그룹 대화로 마이그레이션

먼저 그룹을 그룹 대화로 어떻게 마이그레이션하는지 설명하겠습니다.

그룹 대화용 API로 점진적 전환

그룹 대화를 위해 새로운 API를 설계했고, 아래와 같이 이중 읽기(dual read)를 이용해 이전 API와 신규 API 간의 호환성을 유지하며 점진적으로 전환했습니다.

  1. 처음에는 그룹 대화 API에서 그룹 스토리지를 지원합니다. 여기서 라우터는 그룹 API와 그룹 대화 API 간의 차이를 메꾸는 역할을 담당합니다.
  2. 점진적으로 그룹 대화를 늘려갑니다.
  3. 최종적으로 그룹 대화만 생성합니다.

그룹 데이터 마이그레이션

모든 그룹 데이터는 배치 처리를 통해 그룹 대화 데이터로 마이그레이션했고, 마이그레이션 후에는 이중 읽기(dual read)를 중지하고 그룹 대화만 사용했습니다.

여러 명과의 대화를 그룹 대화로 마이그레이션

여러 명과의 대화와 그룹의 차이점

앞서 여러 명과의 대화와 그룹은 서로 목적이 다르기 때문에 몇 가지 차이점이 있다고 말씀드렸습니다.

초대 메커니즘

첫 번째로 친구를 대화에 초대하는 방법이 달랐습니다. 친구를 선택해서 그룹을 만들거나 기존 그룹에 친구를 초대했을 때에는 초대받은 친구가 해당 그룹에 즉각 참여하게 되지 않습니다. 우선 초대받은 친구가 받은 초대를 수락하거나 거부해야 합니다. 초대를 수락해야만 대화에 참여하게 되는 것입니다. 반면 여러 명과의 대화에서는 방을 만들거나 친구를 초대하면 초대받은 친구가 바로 대화에 참여하게 됩니다. 

사용자 중에는 여러 명과의 대화처럼 바로 대화하는 것이 편리하다고 느끼는 사람도 있었고, 초대받은 사람이 그룹 가입 여부를 결정하도록 하는 것이 예의라고 생각하는 사람도 있었습니다.

지원 기능의 차이

두 번째는 여러 명과의 대화가 그룹보다 지원하는 기능이 적다는 것입니다. 여러 명과의 대화는 일시적인 대화를 위해 설계됐기 때문에 그룹에서 지원하고 있는 앨범과 같은 기능은 사용자들이 잘 이용하지 않을 것이라고 예상했습니다. 그래서 몇 년에 걸쳐 그룹에 추가됐던 다양한 기능의 대부분은 여러 명과의 대화에서는 지원되지 않았습니다.

새로운 통합 모델에서의 변화

대화 통합 프로젝트에서는 새로운 통합 모델인 그룹 대화를 도입하면서 기존 그룹 모델을 기반으로 여러 명과의 대화 모델을 통합했습니다.

초대 메커니즘 변경

이제 LINE 앱의 워크플로는 새로운 그룹 대화를 만들 때 여러 명과의 대화와 그룹을 구분하지 않습니다. 대신 생성 UI에서 초대받은 사람이 대화에 즉시 참여하게 할지 혹은 참여하기 전에 수락이나 거절을 선택할 수 있도록 할지 선택할 수 있습니다.

기존 대화에 대한 힌트 제공

사용자들은 특정 주제에 대해 토론하기 위해 여러 명의 친구와 대화방을 만듭니다. 그 방은 토론이 끝난 후에도 각 방 구성원의 대화 목록에 남아 있지만 다시 사용하지 않는 경우가 많습니다. 대신 사용자들은 동일한 구성원으로 다시 대화할 일이 생겼을 때 (이미 충분히 긴) 대화 목록에서 대화방을 찾지 않고 새로 만드는 것을 선택합니다. 이렇게 구성원이 동일하지만 다시 사용되지 않는 대화방이 점점 누적되면서 대화 목록은 점점 더 길어집니다. 이는 불편한 사용자 경험으로 이어지고 서버 리소스도 많이 소비합니다.

신규 대화 생성 워크플로에서는 사용자가 기존 대화방과 동일한 구성원으로 새로 대화방을 만들려고 할 때 '힌트'를 표시합니다. 이를 통해 사용자는 기존에 만들었던 대화방으로 쉽게 이동해서 새로운 대화를 시작할 수 있습니다.

모든 대화에서 모든 기능 지원

새로운 대화 모델은 그룹 모델을 기반으로 하므로 모든 신규 대화에서 현재 지원되는 모든 기능을 사용할 수 있습니다. 또한 향후에 지원될 모든 신규 기능 역시 대화 통합 이후에 생성된 모든 대화에 적용될 것입니다.

향후 계획 - 여러 명과의 대화를 그룹 대화로 마이그레이션

현재 LINE 최신 버전을 통해 생성되는 모든 대화는 그룹 대화이며, 통합되기 이전 버전을 사용하는 사용자가 생성한 그룹은 서버 측에서 새 그룹 대화로 바뀝니다. 이제 다음 목표는 여러 명과의 대화를 새 모델로 마이그레이션해서 사용자가 모든 기능을 사용할 수 있도록 만드는 것입니다.

마치며

이번 프로젝트는 여러 명과의 대화와 그룹을 개선하기 위해 수년에 걸쳐 진행하고 있는 장기 프로젝트입니다. 사용자가 갑작스러운 변화에 스트레스 받지 않도록 최대한 편안하게, 불편함을 느끼지 않게 노력하고 있습니다. 프로젝트 진행 결과 현재 동일한 구성원으로 생성되는 대화방의 비율이 15%(여러 명과의 대화)에서 0.78%(초대 없는 그룹 대화)로 감소했습니다. 

현재 프로젝트에서는 본문에서 언급한 작업 외에도 많은 부분을 개선해 나가고 있는데요. 앞으로도 매일매일 꾸준히 노력해서 사용자 편의성을 높이며 보다 나은 시스템을 구축해 나가겠습니다. 긴 글 읽어주셔서 감사합니다.