brunch

You can make anything
by writing

C.S.Lewis

by 연구원케이 Sep 19. 2016

대화형UI를 디자인하기 위한 10가지 팁




이번 아티클에서는 대화형 인터페이스를 디자인할 때 생기는 어려운 점들을 몇 가지 예제를 통해 소개하면서, 이에 대해 Meekan이 찾은 해결방법에 대해 살펴보고자 합니다.




입력 내용을 확인


전형적인 GUI 즉 양식처럼 사용자에게 더 많은 정보를 요구할 땐 처리가 완료되기 전 올바른 형식으로 입력이 이루어지고 있는지를 다양한 방법을 사용해 검증해야 합니다.


이것은 유효한 이메일 주소인가? 이건 전화번호인가? 이 유저 네임은 이미 다른 사람에게 사용되고 있지 않은가? 항목에 따라 숫자와 사전 목록을 준비한 뒤 여기서 선택하게 하는 방법도 있겠지요.


대화형 UI에서는 이러한 일을 할 수 없습니다. 당신의 이야기 상대는 무엇이든 자유롭게 입력(언급)할 수 있기 때문에 올바른 답변이 되돌아오도록 제대로 질문을 생각해야만 하며 가능한 스마트하게 답변하도록 처리해야 합니다.



정보 수집을 위해 요구사항을 모은다.

당신의 봇이 티셔츠를 나눠준다고 합시다. 이 봇은 사용자에게 사이즈와 색깔을 물어봐야 합니다. 만약 사용자가 'M사이즈의 빨간색 티셔츠가 갖고 싶어요'라 말했다면 당신이 원하는 정보는 이미 여기에 있습니다.


하지만 만약 봇이 마음대로 대화를 시작하거나 사용자가 '티셔츠 사도 괜찮아요?'라고만 말한다면 정보의 조각들을 모아나가야 합니다.



힌트를 제공한다.


가능한 열린 질문(구체적인 답변이 없는 질문)은 삼가며, 당신이 원하는 답변으로 유도합시다. 요구하는 답변의 대안이 적은 경우엔 목록으로 보여줍시다.


"사이즈는 뭘로 할까요? M, L, XL이 있습니다."



일반적으로 모든 항목에 대해 개별적으로 질문하는 것이 바람직합니다. 사이즈에 대한 대답을 물었다면 다음엔 색상을 물어봅시다. 한 문장에 여러 정보를 넣어버리면 해석이 어려워지므로 가능한 구체적인 답변을 물을 수 있게 합시다.



확인하기


 내용이 유효했다면 내용을 다시 언급해 봇이 제대로 요구사항을 이해했는지를 확인한 뒤에 계속해서 진행하도록 합시다.


"알겠습니다. L사이즈죠. 색상은 뭘로 할까요?"



무엇이 잘못되었는지를 설명하자


만약 입력 내용이 틀렸다면 당신이 받은 정보와 기대하는 정보에서 무엇이 틀렸는지를 다시 한번 설명해줍시다. 가능하면 봇이 처음부터 이해할 수 없는 대답인지 아니면 의미가 통하지만 어느 경우엔 받아들일 수 없는 게 아닌지 차이를 명확히 보여줍시다.




그럼 무슨 색으로 할까요?


보라색요


죄송합니다. 보라색은 없습니다. 흰색, 회색, 갈색, 빨강, 주황, 핑크, 검은색이 있습니다. 어느 색이 좋으십니까?


ㅁㄹㅁ38ㅈㄱ@#$


죄송합니다. "ㅁㄹㅁ38ㅈㄱ@#$"는 색상입니까? 흰색과 회색, 갈색, 빨강, 주황, 핑크, 검은색이 있습니다. 어느 색이 좋으십니까?


회색


알겠습니다. L사이즈 회색 티셔츠네요!




허용하기


사용자는 리스트 항목을 가리키는 것이 아니라 당신과 이야기 중이라는 사실을 잊지 말아주세요. 사용자가 자신이 원하는 것을 표현하는 방법에는 여러 가지 형태가 있습니다. 만약 당신이 셔츠 사이즈를 묻는다면 '엑스트라 L', 'XL' '가장 큰 사이즈' 등 다양한 표현방식이 있으며 무엇이든 여기선 같은 의미가 됩니다. 영어의 목요일이란 단어도 'Thursday', 'thu', 'thrusday(맞춤법 실수)' 또는 내일은 뜻하는 'tomorrow'도 같은 목요일을 가리킬지 모릅니다.




태스크를 전환하기


기존 GUI 이야기로 돌아와 볼까요. 예전부터 사용되어오던 앱은 다양한 기능을 수행할 수 있으며 이는 여러 창과 페이지, 화면으로 나누어집니다.


캘린더 앱이 있다 하면 스크린에 그 달의 모든 회의 일정을 표시하고, 그 회의 중 하나를 편집할 땐 다른 화면으로 전환되며 작업이 끝나면 다시 첫 화면으로 돌아올 수 있습니다.


하지만 대화는 문장이며 하나의 기다란 실과 같은 것입니다. 어떻게 다른 기능으로 전환할 수 있을까요? 지금 당신이 실행 중인 태스크를 어떻게 파악할 수 있을까요? Meekan에서 이 점들을 어떻게 해결했는지를 살펴보도록 합시다.


사용자는 새로운 태스크를 시작합니다.


"Meekan,  내일 있을 팀 미팅 예정을 넣어줄래"



봇은 '새로운 미팅을 스케줄 한다'라는 상태가 되며 필요한 정보들을 수집하기 시작할 것입니다. 하지만 여기에서 상황이 달라집니다. 사용자는 새로운 미팅 일정을 세우기에 앞서 목요일 회의록을 보고 싶다고 마음이 바뀌었습니다.



"Meekan, 난 목요일 얼마나 바쁠까?"



이걸 기존의 GUI로 말한다면 '새로운 미팅을 추가하기'창을 닫거나 키보드 Esc버튼을 누르는 것과 같습니다.

이 상황에 대처하는 방법에는 여러 가지 점들이 있습니다.



변경을 거부한다


봇이 사용자가 다른 태스크로 전환하고자 하는 걸 감지했을 때 봇은 사용자에게 지금 하는 작업을 먼저 중단할지 여부를 묻습니다.



"아직 미팅 예정 입력이 완료되지 않았습니다. 만약 현재 미팅 등록을 취소하고 싶을 경우에는 '취소'라고 말씀해주세요"



만약 현재 태스크에 대해 사용자가 많은 단계를 거칠 필요가 있다면 지금까지의 단계가 물거품이 되어버리기 때문에 이 방법이 좋을 것이다.



흐름에 따라 진행한다.


사용자가 또다시 태스크 전환을 기대하며 이 태스크는 별로 중요하지 않으니 봇이 곧바로 새로운 태스크로 이동한다고 칩시다. 이러한 경우에는 사용자에게 지금 무슨 일이 일어나고 있는지를 알게 하는 것이 중요합시다. 즉, 현 태스크를 중단하고 새로운 태스크로 옮겨간다는 점을 알려주시기 바랍니다. 여기서 봇은 사용자에게 다음 있을 미팅을 확인해줘야 하지만 사용자는 이 단계를 뛰어버리고 새로운 예정을 세우려 합니다.



"크리스가 금요일 10:00 AM 프로젝트 킥오프 미팅에 당신을 초대합니다. 승인하시겠습니까?


"내일@jesse와 미팅을 설정"


"알겠습니다. 지금 이 예정을 확인할 것을 스킵합니다."


"내일 회의 설정을 위해 캘린더를 확인하고 있습니다..."




이전 태스크로 돌아가기


태스크 B를 수행하기 위해 태스크 A를 중단했습니다. B는 종료했는데 다시 A로 돌아가야 할까요?

Meekan에선 이전 작업으로 돌아가는 것이 당연하다지만 여기서 잠시 혼란의 소지가 있습니다. (예를 들어 사용자가 태스크 A가 다시 시작되었다는 사실을 깨닫지 못한 채 한번 더 처음부터 태스크 A를 시작한다고 합시다)


만일 태스크를 되돌려야 할 때엔 적절한 커뮤니케이션을 거쳐야 합니다. 그럼 사용자는 지금 무슨 일이 일어나는지를 파악해 양쪽 모두의 태스크에 대한 기대치를 달성할 수 있습니다.


다시 한번 티셔츠 예제를 살펴봅시다. 이렇게 하면 문제없겠죠.



"고객님 사이즈는 무엇인가요? M, L, XL이 있습니다."


"L"


"알겠습니다. L사이즈죠. 그럼 어떤 색으로 할까요?"


"역시 XL로 해주세요."


"알겠습니다. XL 사이즈죠. 그럼 어떤 색으로 할까요?"




타임아웃


채팅 등이 끊기는 일은 흔히 발생합니다. 무엇인가를 이야기하는 도중 점심을 먹으러 가거나 회의에 불려 가는 등 돌아올 때쯤엔 어떤 대화를 했었는지 기억나지 않을 것입니다. 이런 상호작용을 하는 채널에선 다른 의제를 이야기하는 사람들도 많으며 쓰고 있던 것들을 스크롤해버려 잊히게 되기도 합니다.


봇을 운영할 때도 이 점들을 이해하고 있어야 합니다. 사용자가 다른 무언가를 시작해 그대로 하루 동안 부재했으며 다시 돌아왔을 때, 분명 또 무언가 새로운 것을 시작할 것입니다. 이 경우 봇은 어제 작업은 끝내버리는 것이 좋습니다.



필수 정보 입력을 기다린다.


때로 진행을 하며 꼭 얻어야만 하는 정보가 있습니다. 기본적인 사양으로 이메일 주소를 필요로 할지도 모르겠습니다. 혹 처음에 뭔가를 지우고 사용자가 승인하지 않은 한 가장 먼저 진행하는 편이 좋을지도 모르겠습니다.

GUI 환경에서라면 모달 창이 나옵니다. 이는 사용자가 이 질문에 대답할 때까지 모든 액세스를 차단하기 위한 것입니다. "정말 전부 삭제하시겠습니까?" 이 창은 사용자가 '예' 또는 '아니오'를 클릭할 때까지 머무릅니다.


대화형 UI 상으로 이런 점들을 사용하면 봇이 사용자에게 필요한 정보를 얻을 때까지 모든 액션을 거부하도록 만들어야 합니다. 하나 이는 매우 귀찮은 작업이 될 것입니다.


여러분이 필요로 하는 것, 그리고 왜 필요한지를 설명할 것을 잊지 않도록 합시다. 설명을 할 때 다양한 패턴을 준비해두면 사용자가 여러 번 그 질문을 막아버려도 다시 반복해 질문할 수 있습니다. (하지만 상황을 악화시킨다는 점은 명심해둡시다)



"내가 역할을 수행하기 위해선 당신의 스케줄에 액세스를 해야 합니다. 당신의 일정과 연동하기 위해 이 링크에 액세스 해주세요."


"내일 미팅을 넣어줘"


"저는 진지합니다. 제 스케줄링 기능을 사용하기 위해선 캘린더 연동이 필요합니다."


"내일 나 바빠?"


저도 빨리 당신의 스케줄을 체크해 도움을 드리고 싶어요. 부탁드리니 제가 마법을 사용할 수 있도록 캘린더와 연동해주세요."



위 내용은 바람직하지 않습니다. 이 정보가 없다면 정말 다음 작업을 진행하지 못하는지 찬찬히 검토합시다. 가능하다면 지식에 근거해 단계를 밟아나갑시다. 그렇지 않으면 몇 개의 기능은 남겨두고 당신이 정말로 필요로 할 때 정보를 요구하도록 합시다.



리스트에서 선택하기


당신의 로봇이 사용자에게 가장 마지막으로 하는 일은 리스트에서 선택하도록 유도하는 점 일 것입니다. 잊지 마세요, 이 경우 드롭다운 메뉴와 콤보박스, 라디오 버튼은 금지입니다!


리스트가 있는 경우 사용자에게 하나 또는 그 이상의 항목을 선택하게 합시다. 사용자가 어떤 옵션이 좋은지를 알게 하기 위해 각각 항목은 유니크한 이름이나 숫자를 부여합시다.



"Meekan, 내일 미팅 취소해줘"


"내일 회의엔 3가지 종류가 있습니다. 어느 것을 취소할까요?

(1) 10:00 AM 프로젝트 킥오프

(2) 11:00 AM 팀 회의

(3) 2:30 PM 제이크와 1on1


"3번 취소"


"알겠습니다. 내일 제이크와 1on1을 취소합니다. 제이크에게도 공지를 보내겠습니다."



리스트 미팅에 번호를 부여하는 건 사용자에게 항목을 선택하게 하는 가장 쉬운 방법입니다.



다음으론?


아직 이 영역에 룰이라는 것은 없습니다. 우리들이 룰을 만들어나가야 합니다. 우리들에게 무엇이 좋고 무엇이 좋지 않았는지 함께 서로가 서로를 가르쳐줍시다. 그리고 다시 이것들을 공유하고 말하고, 적어나가 봅시다. 이 영역의 선구자가 되기 위해선 지금이 매우 적절한 타이밍입니다.


제가 위에서 언급한 예 중 몇 가지 아이디어가 떠올랐다면 기쁠 것입니다. 이 아티클을 당신이 봇의 세계로 나아가는 시발점이 되었으면 합니다. 자, 봇을 만들어볼까요?





(번역 끝 / 묭니)


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari