한 번호를 여러 명이 함께 쓸 때
가게 번호, 사무실 대표 번호, 예약 전용 번호 — 받는 사람은 여럿인데 번호는 하나인 경우가 많습니다. 전화는 돌려받으면 그만이지만 문자는 다릅니다. 같은 문의에 두 사람이 각자 답장을 보내고, 손님은 같은 말을 두 번 받습니다. 반대로 서로 "저쪽이 했겠지" 하고 아무도 답하지 않는 일도 생깁니다. 답장이 두 번 나가면 성의 없어 보이고, 광고성 문자였다면 수신자 입장에서는 같은 광고를 두 통 받은 셈이 됩니다.
이 글은 그 문제가 어디에서 오는 구조적 제약인지, 흔히 쓰는 회피책이 각각 어디서 막히는지, 그리고 웹 문자함이 자리(seat)와 접속 표시라는 장치로 그것을 어떻게 줄이는지를 정리한 것입니다. 마지막에 TwoPhone의 등급별 숫자를 함께 적었습니다.
문자에는 「여러 사용자」라는 개념이 없습니다
이메일은 처음부터 여러 사람이 한 주소를 함께 쓰는 것을 전제로 만들어졌습니다. 계정이 서버에 있고, 여러 기기가 같은 사서함에 접속하며, 읽음 표시가 서버에 공유됩니다. 그래서 "공유 사서함(shared inbox)"이라는 제품 범주가 따로 생겼습니다.
문자는 반대입니다. 문자는 회선(SIM)에 배달되고 단말에 저장됩니다. 사서함은 서버가 아니라 휴대폰 안에 있고, 그 휴대폰은 한 대뿐이며, 읽음 표시도 그 한 대에만 있습니다. 표준 어디에도 "이 번호의 담당자 세 명" 같은 개념이 없습니다. 문자를 여럿이 나눠 받으려면 휴대폰 바깥에 그 개념을 따로 만들어야 합니다.
그래서 흔히 쓰는 방법이 셋인데, 셋 다 어딘가에서 막힙니다.
| 방법 | 되는 것 | 막히는 것 |
|---|---|---|
| 휴대폰을 돌려 쓴다 | 기기 하나에 기록이 모여 있어 누가 뭘 보냈는지 섞이지 않습니다. | 동시에 두 사람이 못 씁니다. 기기를 가진 사람이 자리를 비우면 그동안 아무도 답하지 못합니다. |
| 한 사람이 전담한다 | 중복 답장이 구조적으로 안 생깁니다. 가장 확실한 방법입니다. | 그 한 사람이 쉬거나 그만두면 응대가 멈춥니다. 문의가 늘어도 나눠 받을 수 없습니다. |
| 화면·계정을 공유한다 | 여러 사람이 같은 대화를 볼 수 있습니다. | 서로 지금 무엇을 하고 있는지 보이지 않습니다. 중복 답장은 바로 여기서 납니다. 로그인을 한 곳만 허용하는 서비스라면 뒤에 들어온 사람이 앞사람을 밀어내기도 합니다. |
「한 번에 한 곳만」은 왜 기본값이었나
휴대폰의 문자를 PC 브라우저에서 보게 해 주는 서비스는 대개 로그인을 한 곳으로 제한합니다. TwoPhone도 그랬습니다. 새 로그인이 들어오면 그 계정의 기존 세션을 전부 무효로 만들고 붙어 있던 브라우저를 끊었습니다.
그 설계에는 이유가 있습니다. 비밀번호가 샜을 때 남이 조용히 붙어 있는 상태가 오래 가지 않게 하는 가장 단순한 방법이고, 설명할 것도 없습니다("접속은 한 곳만"). 개인용 서비스라면 이것으로 충분합니다.
문제는 팀입니다. 두 번째 사람이 로그인하는 순간 첫 번째 사람의 화면이 끊기는 서버에서는 나눠 받기 자체가 불가능합니다. 같이 쓰라고 만든 기능이 로그인 단계에서 막히는 셈입니다.
자리(seat)로 일반화하면 달라지는 것
해법은 "한 곳"을 숫자로 바꾸는 것입니다. 자리가 N개이고, 한 번에 N명까지 붙을 수 있다고 보면 종전 동작은 N=1인 특수한 경우가 됩니다. 중요한 것은 무엇을 한 자리로 세는가입니다.
- 세는 단위는 로그인 1건입니다. 연결 수가 아닙니다. 한 사람이 탭을 세 개 열어도 로그인은 하나이므로 자리도 하나입니다. 자리는 창이 아니라 사람에 가깝습니다.
- 반대로 다른 기기·다른 브라우저로 로그인하면 자리를 하나 더 씁니다. 사무실 PC와 집 노트북에 각각 로그인해 두면 본인 혼자서 두 자리를 차지하고 있는 것입니다.
- 세션은 오래 살아 있으므로, 자리를 막고 있는 것은 대개 사람이 아니라 닫지 않은 탭입니다. 자리가 모자라면 안 쓰는 기기에서 로그아웃하는 것이 먼저입니다.
자리가 다 찼을 때 — 거절할 것인가, 회수할 것인가
선택지는 둘입니다. ① 새 로그인을 거절한다 ② 가장 오래된 자리를 회수한다. TwoPhone은 ②를 택했습니다. 이유는 세 가지입니다.
- ①은 1자리 등급을 망가뜨립니다. 자리가 하나일 때 "같은 사람이 기기를 옮긴다"는 것은 정상적인 사용 흐름입니다. 거절해 버리면 노트북에 세션을 남긴 채 밖에 나온 사람은 노트북을 다시 열기 전까지 로그인할 방법이 없습니다.
- 유령 탭이 실제 사람을 잠급니다. 자리를 쥐고 있는 것이 사람이 아니라 닫지 않은 탭인 경우가 대부분인데, 거절 방식은 그 탭 하나가 팀원을 영구히 막게 둡니다.
- 회복 가능성이 비대칭입니다. 거절당한 사람은 스스로 할 수 있는 일이 없습니다(남의 세션을 끊어야 하는데 그럴 화면이 없습니다). 반대로 밀려난 사람은 다시 로그인하면 됩니다.
대신 밀려나는 쪽이 이유를 알아야 합니다. 그냥 끊기면 장애로 보입니다. 그래서 끊을 때 사유를 함께 보냅니다 — 본인이 다른 곳에서 다시 로그인한 것인지, 자리가 꽉 차서 가장 먼저 로그인한 자리가 회수된 것인지를 구분해서 알려 줍니다.
중복 답장은 자리를 늘리면 오히려 늘어납니다
여럿이 동시에 붙을 수 있게 되면 새 사고가 따라옵니다. A와 B가 같은 문의를 동시에 보고, 둘 다 답장을 씁니다. 손님은 같은 안내를 두 번 받습니다. 그래서 동시 접속과 접속 표시는 같이 들어가야 하는 기능입니다. 하나만 넣으면 문제를 만들고 끝납니다.
필요한 정보는 생각보다 적습니다. 내용도, 이름도 필요 없습니다. 「누가 어느 대화방에 있는가」 하나면 됩니다. TwoPhone에서는 두 가지로 보여 줍니다.
- 접속 표시 — 지금 이 계정에 몇 명이 붙어 있고, 각자 어느 대화방을 보고 있는지.
- 입력 중 — 내가 열어 둔 대화방에서 다른 사람이 지금 타자를 치고 있는지.
무엇이 보이고 무엇은 보이지 않나
| 항목 | 어떻게 되나 | 왜 그렇게 했나 |
|---|---|---|
| 문자 내용 | 중개 서버가 읽지 못합니다 | 내용은 브라우저와 휴대폰 양 끝에서만 암·복호화되는 종단간 암호화 구간입니다. 접속 표시에는 내용이 필요 없으므로 터널을 열 이유가 없습니다. |
| 대화방 | 같다·다르다만 비교합니다 | 브라우저가 보내는 것은 전화번호가 아니라 그 자체로는 뜻이 없는 불투명한 값입니다. 서버는 두 사람이 같은 방에 있는지만 보고, 기록으로 남기지 않습니다. |
| 표시 이름 | 「Chrome · Windows」 수준 | 계정이 팀 공용이라 로그인 정보로는 사람을 가를 수 없습니다. 그렇다고 이름을 새로 받으면 없던 개인정보를 만드는 것이라, 브라우저가 어차피 보내는 값에서 거칠게 뽑아 씁니다. |
| 다른 계정 | 서로 보이지 않습니다 | 명부는 계정 단위로 완전히 분리됩니다. 다른 계정의 접속 여부를 알 수 있으면 그 자체가 정보 유출입니다. |
| 구버전 웹 | 명부에 오르지 않습니다 | 브라우저가 먼저 참여를 알려야 명부에 오르는 방식입니다. 이 기능을 모르는 예전 화면은 종전과 똑같이 동작합니다. |
표시만으로 부족할 때
표시는 사고를 줄이지만 없애지는 못합니다. 두 사람이 같은 순간에 보내기를 누르면 방법이 없습니다. 실제 운영에서는 아래 같은 규칙을 함께 두는 쪽이 훨씬 효과가 큽니다.
- 담당을 시간으로 나눕니다. 오전·오후, 또는 요일로 나누면 "지금은 내가 받는 시간"이 분명해집니다. 사람이 겹치지 않으면 표시를 볼 일도 없습니다.
- 먼저 들어간 사람이 끝냅니다. 한 대화는 한 사람이 끝까지 맡는 규칙이 중간에 넘기는 규칙보다 사고가 적습니다.
- 자동 답장은 한 군데서만 켭니다. 키워드 자동 답장이나 부재중 자동 문자를 여러 사람이 각자 켜 두면, 사람이 조심해도 기계가 중복을 만듭니다.
TwoPhone 등급별 계정 한도
여기서부터는 통신사 규정이 아니라 TwoPhone이 스스로 두는 제품 정책입니다. 통신사 약관에는 접속 자리나 조회 횟수에 관한 조항이 없습니다. 아래 값은 전부 계정 단위이고, 회선 수와 무관합니다.
| 등급 | 동시 접속 자리 | 연락처 1회 등록 | 조회 한도 (계정당 분당) | 웹훅 동시 / 대기 |
|---|---|---|---|---|
| 무료 | 1자리 | 기능 없음 | 60회 | 기능 없음 |
| Plus | 1자리 | 500개 | 60회 | 4 / 64 |
| Pro | 3자리 | 2,000개 | 180회 | 8 / 128 |
| Business | 10자리 | 5,000개 | 600회 | 16 / 256 |
- 동시 접속 자리 — 이 글이 설명한 자리입니다. 무료와 Plus가 1자리로 같은 것은 Plus가 1인용 등급이기 때문입니다. 팀으로 쓰려면 Pro부터입니다.
- 연락처 1회 등록 — 엑셀 양식 하나로 한 번에 올릴 수 있는 개수입니다. 저장할 수 있는 연락처의 총 개수를 제한하는 값이 아닙니다 — 연락처는 이용자 휴대폰의 것이고 저희가 세는 자원이 아닙니다.
- 조회 한도 — 외부 시스템이 API로 대화를 가져갈 때의 분당 횟수입니다. 발송과 달리 통신사 쪽 제한이 없어서, 순수하게 서버 자원을 지키려고 두는 값입니다.
- 웹훅 동시 / 대기 — 새 문자를 알려 줄 때 한꺼번에 몇 건을 보내고, 받는 쪽이 느릴 때 몇 건까지 줄을 세울지입니다. 팀이 쓰는 계정일수록 이벤트가 많아 둘 다 올라갑니다.
요약
- 문자는 회선과 단말에 묶여 있어 「여러 사용자」라는 개념이 표준에 없습니다. 나눠 받으려면 휴대폰 바깥에서 만들어야 합니다.
- 휴대폰 돌려쓰기·한 사람 전담·계정 공유는 각각 동시성·가용성·중복에서 막힙니다.
- 웹 문자함의 「한 번에 한 곳만」은 보안을 위한 기본값이지만 팀에게는 나눠 받기를 원천 봉쇄합니다. 이것을 자리 수로 일반화하면 종전 동작은 1자리인 경우로 남습니다.
- 자리를 세는 단위는 로그인 1건입니다. 탭 여러 개는 한 자리, 다른 기기는 한 자리 더.
- 자리가 차면 가장 먼저 로그인한 자리를 회수하고 사유를 알려 줍니다. 새 로그인을 거절하면 혼자 쓰는 사람이 기기를 옮기지 못하게 됩니다.
- 동시 접속은 중복 답장을 부릅니다. 그래서 접속 표시·입력 중이 같이 들어갑니다. 중개 서버가 보는 것은 「누가 어느 방에 있는가」뿐이고 문자 내용은 읽지 못합니다.
- 접속 표시는 잠금이 아닙니다. 담당 시간을 나누는 운영 규칙과 함께 써야 효과가 납니다.
- TwoPhone의 접속 자리·연락처 일괄 등록·조회·웹훅 한도는 계정 단위의 제품 정책이고, 발송 한도는 회선 단위로 통신사 상한과 맞물립니다.