Korat
기능

그룹을 만들고 멤버와 역할을 관리합니다

Korat의 그룹은 먼저 글을 올리는 게시판이고, 그 옆에 일반 텍스트 하위 방이 있습니다. 그 순서가 설계 전체입니다. 그룹 콘텐츠가 피드 게시물과 같은 객체이기 때문에 댓글과 멘션, 알림을 어설프게 다시 만들지 않고 그대로 물려받습니다.

채팅이 1:1 전용이므로, 세 사람 이상의 대화는 그룹에서 일어납니다. 형태는 두 가지입니다. 대부분은 글입니다. 그룹 글은 커뮤니티 id를 달고 있는 posts 테이블의 평범한 행이라, 댓글과 멘션, 알림, 검색이 나란히 다시 만들어지지 않고 그대로 동작합니다. 그 옆에 그룹은 하위 방을 가질 수 있습니다 — 그룹 안에 나열되는 Discord식 텍스트 채널로, 자체 권한과 자체 읽음 상태를 갖습니다. 하위 방은 일부러 얇게 만들었고, 얼마나 얇은지는 아래 상자에 그대로 적혀 있습니다.

그룹 글은 주소가 붙은 피드 게시물입니다

Korat 그룹에서 가장 중요한 한 가지입니다. 그룹에 글을 올리면 내 피드에 올렸을 때와 정확히 같은 객체가 만들어집니다. 같은 반응, 같은 댓글 스레드, 실제 계정으로 연결되는 같은 @멘션, 같은 수정과 삭제, 같은 알림 배관. 피드에 있는 기능이 빠진 이류 그룹 댓글 시스템 같은 것은 없습니다.

그룹 id가 바꾸는 것은 게시물이 나타나는 위치뿐입니다. 그룹 글은 코드의 정확히 한 지점에서 메인 피드에서 걸러지므로, 멤버와 친구인 사람들의 타임라인으로 새지 않고 그룹 안에 머무릅니다. 필터가 한 곳에 하나뿐이라는 점이 동작이 일관된 이유이기도 합니다. 서로 어긋날 수 있는 두 번째 제외 규칙이 없습니다.

실질적인 이득은, Korat의 그룹이 만들어진 그날부터 피드만큼 쓸 만하고 개선이 양쪽에 동시에 도착한다는 점입니다. 대가는 정직하게 아래에 적어 두었습니다. 그룹의 하위 방은 메신저가 아니고, 오래 남는 쪽은 글이 쌓이는 게시판입니다.

그룹의 하위 방은 메신저가 아닙니다. 1:1 채팅은 두 사람 전용이고 그룹으로 바뀌지 않습니다. 그룹의 하위 방이 나르는 것은 보내고 자기 글을 지울 수 있는 일반 텍스트뿐이고, 메시지 수정도, 특정 메시지에 답장하기도, 반응도, 사진·파일·음성 메시지 첨부도, 통화도 되지 않습니다.

그래서 다섯 명이 실시간으로 빠르게 주고받는 일 자체는 하위 방에서 일반 텍스트로 됩니다. 되지 않는 것은 그 주고받음에 1:1 대화가 갖는 첨부와 반응, 통화를 더하는 일입니다. 오래 남고 검색되고 댓글이 달리는 쪽은 실제 역할과 실제 가입 절차를 갖춘 글의 게시판입니다.

공개와 비공개, 그리고 비공개가 실제로 뜻하는 것

그룹을 만들 때 이름, 설명, 분류, 공개 또는 비공개 설정, 그리고 규칙 문구를 정합니다. 규칙 항목은 장식이 아닙니다. 규칙이 적히지 않은 그룹에도 결국 규칙은 생기는데, 그날 관리하던 사람이 즉석에서 만들고 멤버는 어기고 나서야 알게 됩니다.

비공개 그룹은 가입 요청을 씁니다. 누군가 신청하면 소유자나 운영자가 승인하거나 거절하고, 신청자는 오지 않을 결정을 기다리는 대신 요청을 취소할 수 있습니다. 양쪽 모두 알림을 받습니다. 요청이 도착하면 관리자에게, 승인되면 신청자에게. 침묵 속으로 사라지는 요청은 모든 그룹 시스템의 가장 흔한 실패이고, 승인 알림은 가장 값싼 해결책입니다.

그룹의 상태는 누르기 전에 보입니다. 비공개 그룹은 카드에 자물쇠를 달고 있어서, 「가입」과 「가입 요청」의 차이가 아직 고민하는 동안 눈에 들어옵니다. 버튼은 다음 화면이 거절할 것을 약속해서는 안 됩니다.

배지 달린 목록 하나가 아니라, 네 개의 목록

그룹 화면은 작은 배지로 관계를 전달하는 단일 목록이 아니라, 개수가 붙은 제목 있는 구획으로 나뉩니다. 내가 관리하는 그룹, 가입한 그룹, 대기 중인 요청, 둘러보기, 그리고 전체 검색입니다.

처음에는 「내 그룹」 목록 하나였고 다시 만들었습니다. 네 종류의 행은 네 가지 다른 뜻이기 때문입니다. 내가 소유한 그룹에는 설정과 나를 기다리는 요청 대기열이 있고, 가입만 신청한 그룹에는 아직 아무것도 없습니다. 제목과 개수로 나누면 「내가 처리할 일이 있나?」에 한눈에 답할 수 있습니다. 서른 번째 행에 묻힌 배지로는 안 됩니다.

역할, 그리고 그룹을 넘겨주는 일

역할은 소유자, 운영자, 멤버 세 가지이고 이름 옆 배지로 보입니다. 소유자와 운영자는 멤버의 역할을 바꾸고, 멤버를 내보내고, 설정을 수정하고, 그룹을 삭제할 수 있습니다. 소유권 이전도 있는데, 들리는 것보다 중요합니다. 소유자가 앱을 떠났고 열쇠를 넘길 방법이 없는 그룹은 잠긴 설정 화면과 함께 천천히 죽습니다.

Korat의 원칙은 서버가 거절할 동작은 아예 제시하지 않는 것입니다. 소유자에게는 「그룹 나가기」 항목이 보이지 않습니다. 나가면 그룹이 고아가 되기 때문이고, 떠나고 싶은 소유자의 경로는 먼저 소유권을 넘기는 것입니다. 그룹 삭제나 멤버 내보내기 같은 파괴적 동작은 무엇이 일어나는지뿐 아니라 무엇이 *일어나지 않는지*도 분명히 말하는 확인 창 뒤에 있습니다. 사람들이 망설이는 이유는 대개 최악을 가정하기 때문입니다.

결정에 대응하는 알림

그룹은 네 종류의 알림을 보내고, 각각은 누군가 알아야 하는 순간에 대응합니다. 내가 속한 그룹의 새 글, 관리자에게 도착하는 가입 요청, 내 요청이 승인됨, 그리고 내 역할 변경입니다.

첫 번째는 초기에 빠져 있었고, 결과는 멤버들이 아무것도 올라온 줄 몰라서 버려진 것처럼 보이는 그룹이었습니다. 같은 실패가 나중에 상점 주문에서 다시 나타났습니다. 아무도 듣지 못하는 콘텐츠를 만드는 기능은 조용한 기능이 아니라 고장 난 기능입니다.

그룹을 바깥으로 공유하기

그룹도 Korat의 나머지와 같은 불투명 링크로 공유됩니다. koratland.com/s/<token> 형태의 무작위 14자 토큰이 앱 안에서 풀립니다. 리졸버는 토큰이 어떤 종류의 객체를 가리키는지와 어떤 객체인지만 돌려주고, 누가 공유했는지도 몇 번 열렸는지도 밝히지 않습니다. 공개적으로 올린 모집 링크가 올린 사람에 대한 정보를 담지 않는다는 뜻입니다.

그룹 글은 그룹 id만 하나 더 달고 있는 피드의 평범한 게시물입니다. 순위표가 있는 러닝 모임이나 팀이 필요하다면 스포츠 클럽 쪽입니다. 하위 방은 둘 다 같은 것을 쓰고, 차이는 순위표입니다.

취미 모임이 아니라 가게의 팀을 관리하려는 것이라면, 사람별 권한은 비즈니스 콘솔에 있습니다. 신고한 뒤에 무슨 일이 일어나는지는 보안 페이지에 적혀 있습니다.

자주 묻는 질문

Korat 그룹에서 여러 명이 대화하려면 어떻게 하나요?

두 가지 방법이 있습니다. 하나는 글로, 댓글과 반응, @멘션, 알림을 지원합니다. 다른 하나는 그룹의 하위 방으로, 그룹 안에 나열되는 Discord식 텍스트 채널입니다. 1:1 채팅 자체는 두 사람 전용 그대로입니다.

하위 방은 일부러 1:1 대화보다 적게 합니다. 보내고 자기 글을 지울 수 있는 일반 텍스트뿐이고, 메시지 수정도, 특정 메시지에 답장하기도, 반응도, 사진·파일·음성 메시지 첨부도, 통화도 되지 않습니다.

공개 그룹과 비공개 그룹은 무엇이 다른가요?

공개 그룹은 바로 가입할 수 있습니다. 비공개 그룹은 소유자나 운영자가 승인·거절하는 가입 요청을 쓰고, 신청자는 대기 중인 요청을 취소할 수 있습니다.

비공개 그룹은 카드에 자물쇠가 표시되어 누르기 전에 어느 쪽인지 알 수 있습니다.

그룹 글이 메인 피드에도 보이나요?

보이지 않습니다. 그룹 글은 랭킹 파이프라인의 한 지점에서 메인 피드에서 제외되고 그룹 안에서만 나타납니다.

그래도 평범한 게시물 행이라 반응, 댓글, 멘션, 수정과 삭제는 모두 동일하게 동작합니다.

내 그룹을 다른 사람에게 넘길 수 있나요?

가능합니다. 소유권 이전이 들어 있고, 떠나려는 소유자가 택해야 할 경로입니다. 소유자에게는 「그룹 나가기」가 제시되지 않습니다. 나가면 그룹이 고아가 되기 때문입니다.

소유자와 운영자는 멤버의 역할을 바꾸거나 멤버를 내보낼 수도 있습니다.

제가 그룹에 글을 올리면 멤버들이 알게 되나요?

알게 됩니다. 새 그룹 글은 알림을 만들고, 가입 요청과 승인, 역할 변경도 마찬가지입니다.

그룹 글은 평범한 피드 게시물과 같은 알림 시스템을 씁니다.

그룹을 시작하세요

이름을 정하고 규칙을 쓰고 공개 여부를 고르면 됩니다. 무료이며 안드로이드와 브라우저에서 씁니다.