본문으로 건너뛰기
← 모든 글

일대일 동영상 교환: 요청, 제안, 역제안

tapeshelf의 비공개 동영상은 어떤 피드에도 나오지 않고, 아무도 팔지 않아요. 받으려면 그 동영상을 가진 사람에게 요청해야 해요. 그냥 공유해 주기도 하지만, 대신 무언가를 원할 때가 많아요. 화면에서는 어떻게 보이는지, 그리고 어떻게 만들어졌는지 소개할게요.

동영상 요청하기

누군가의 선반에서 비공개 동영상을 열어 보세요. 플레이어 대신 썸네일, 16프레임 미리보기, 그리고 메시지를 적을 수 있는 칸(선택)과 함께 이 동영상 요청하기 버튼이 보여요. 대신 무엇을 줄지 이미 정했다면 + 대신 줄 동영상 제안하기를 누르고 내 동영상에서 고르세요. 그러면 소유자가 양쪽을 모두 보고 바로 수락할 수 있어요. 소유자가 찾는 것과 사양하는 것을 적어 두었다면 버튼 옆에 보여요. 여러 동영상을 한 번에 요청하려면 선반에서 골라 요청 하나로 보내세요. 최대 20개까지 돼요.

버튼이 보이는지는 몇 가지 규칙으로 정해져요.

  • 요청은 지금 보고 있는 선반의 주인에게 가요. 그 사람이 업로더가 아니어도요. 그 사람의 사본이니 결정도 그 사람이 해요.
  • 공개 동영상의 북마크는 요청할 수 없어요. 대신 업로더로 가는 링크가 보여요.
  • 이미 볼 수 있는 동영상이나, 누구에게든 이미 요청을 보내 둔 동영상은 요청할 수 없어요.
  • 둘 중 한 사람이 상대를 차단했다면 서로 요청할 수 없어요.
  • 하루에 최대 30개까지 요청할 수 있어요.

선반이 비어 있으면 앱이 먼저 동영상을 몇 개 올려 보라고 권해요. 좋은 조언이에요. 사람들은 대신 줄 게 있는 사람과 훨씬 기꺼이 공유하거든요.

소유자가 할 수 있는 답

소유자는 알림을 받고 요청 페이지에서 내 요청을 확인해요. 소유자는 이렇게 할 수 있어요.

  • 무료로 공유. 요청한 동영상의 사본을 모두 받아요.
  • 교환 제안하기. 소유자가 내 선반에서 대신 받고 싶은 걸 골라요.
  • 거절. 원하면 코멘트를 남길 수 있어요.
  • 사용자 차단. 두 사람 사이의 진행 중인 요청이 모두 종료돼요. 나에게는 내 요청이 거절된 것으로 보이고, 차단 사실은 알리지 않아요.

내가 제안을 붙여 보냈다면 소유자는 그 제안을 그냥 수락할 수도 있어요.

협상 차수

누군가 교환을 제안하면 요청은 짧은 협상이 돼요. 페이지에는 누구 차례인지(‘내 차례’ 또는 ‘상대 응답 대기’) 표시돼요. 내 차례에는 지금 제안을 수락하거나, 거절하거나, 다른 동영상으로 내 교환 제안을 보낼 수 있어요.

차수에는 제한이 없어요. 제안은 1개와 1개, 1개와 여러 개, 여러 개와 여러 개 모두 가능하지만, 양쪽 모두 동영상을 하나 이상 줘야 해요. 공개 동영상의 북마크만 빼면 내 선반에 있는 건 무엇이든 제안할 수 있어요. 예전 교환에서 받은 동영상도 되지만, 상대가 이미 가진 동영상은 안 돼요. 그사이에도 소유자는 무료로 공유하거나 차단할 수 있고, 요청한 사람은 요청을 취소할 수 있어요.

예를 들어 볼게요. 미아가 레오에게 ‘새벽의 항구’를 요청해요. 레오는 미아의 ‘야간열차’를 받으면 주겠다고 제안해요. 미아는 대신 ‘지붕 위의 빗소리’를 역제안해요. 레오가 수락하고, 두 사람은 같은 순간에 사본을 받아요.

회원끼리의 요청은 만료되지 않아요. 누군가 답할 때까지 요청 페이지(받은 요청, 보낸 요청, 기록)에서 기다리고, 대화에는 모든 차수가 남아요. 단계마다 종 아이콘으로 알림이 오고, 켜 두었다면 이메일로도 와요.

거절하면 1주일을 기다려요

어느 쪽이든, 몇 차에서든 거절하면 7일의 대기 기간이 시작돼요. 요청한 사람은 1주일 동안 그 동영상을 누구에게도 다시 요청할 수 없어요. 끝없는 핑퐁을 막고, 사본을 가진 다른 사람에게 요청해서 거절을 피해 가는 일도 막아요. 요청 버튼에 남은 날짜가 표시돼요.

내 요청을 직접 취소하면 대기 기간은 없지만, 그 요청에 들어간 동영상은 하루 요청 한도에 계속 포함돼요.

내게 남는 것

한번 내 것이 된 사본은 아무도 도로 가져갈 수 없어요. 내 동영상 목록의 받은 동영상과, 방문자가 내 선반에서 보는 ‘다른 사람이 올린 동영상’ 섹션에 나타나요. 보고, 요금제 한도 안에서 다운로드하고, 카테고리에 넣고, 방문자에게 숨기고, 다른 사람과 다시 교환할 수 있어요. 업로더 이름은 어디서든 함께 따라가고, 내 저장 공간은 쓰지 않아요. 용량은 내가 직접 올린 동영상만 차지해요.

내 사본이 사라지는 건 업로더가 동영상을 삭제할 때(그러면 모든 선반에서 한꺼번에 사라져요)나 내가 직접 삭제할 때뿐이에요. 직접 삭제하면 내 사본만 지워져요.

협상 도중에 무언가 바뀌면, 예를 들어 지금 제안에 든 동영상이 삭제되거나 한쪽이 더 이상 그 동영상을 가지고 있지 않으면, 그 제안은 무효가 되고 요청은 처음 요청한 내용으로 돌아가요. 그것마저 남은 게 없으면 요청은 종료돼요. 두 사람 모두 알림을 받아요.

계정이 없는 사람과 교환하기

계정이 없는 사람도 자기 동영상을 가져온다면 나와 교환할 수 있어요. 교환 링크를 보내거나(링크 복사 → 교환용 링크. 내가 취소할 때까지 유효해요), 상대가 내 비공개 동영상에서 교환 제안하기를 누르면 돼요. 어느 쪽이든 상대는 ‘공정한 교환’ 페이지로 들어와 동영상을 최대 5개 올려요. 이 동영상은 잠긴 채로 있어서, 둘 다 동의하기 전에는 아무도 보거나 다운로드할 수 없어요. 거래는 내 요청 목록에 ‘게스트’의 요청으로 나타나고, 다른 요청처럼 답하면 돼요.

게스트와의 거래는 3일 동안 응답을 기다리고, 어느 쪽이든 새로 응답할 때마다 3일씩 늘어나요. 거절되거나, 취소되거나, 만료되면 게스트의 동영상은 바로 서버에서 삭제돼요. 내 동영상에 대한 게스트의 제안을 막으려면 설정 → 프로필 → 교환에서 게스트의 교환 제안 받기를 끄세요. 교환 링크는 계속 작동해요.

어떻게 만들었나

이 모든 건 상태 기계 하나예요. 요청은 열려 있거나 닫혀 있고, 닫히는 방법은 다섯 가지예요. 완료, 거절, 취소, 차단, 그리고 시스템에 의한 종료예요. 게스트와의 거래는 만료될 수도 있어요. 처음 요청은 0차예요. 소유자는 요청받은 것을 주고, 요청한 사람은 붙여 보낸 것을 줘요(아무것도 없을 때가 많아요). ‘무료로 공유’는 소유자가 자기 쪽을 주고 아무것도 받지 않는다는 뜻이에요. 역제안마다 새 차수가 되고, 이전 차수는 대체된 것으로 표시돼요. 요청 자체에 현재 차수, 지금 제안, 누구 차례인지가 저장되어 있어서, 나를 기다리는 모든 걸 인덱스 조회 한 번으로 찾을 수 있어요.

모든 동작은 데이터베이스 트랜잭션 하나에서 실행되고, 트랜잭션은 요청 행을 잠그는 것으로 시작해요. 같은 순간에 두 번 클릭해도 하나씩 차례로 실행돼요.

수락할 때는 지금 보고 있는 바로 그 제안을 지정해요. 조금 전에 역제안이 도착했다면 서버가 충돌로 응답하고 페이지가 대화를 다시 불러와요. 보지 못한 제안을 수락할 수는 없어요.

수락하는 순간 모든 걸 다시 확인해요. 동영상이 아직 존재하고 처리가 끝났는지, 양쪽이 주기로 한 걸 아직 가지고 있는지, 아무도 차단하지 않았는지요. 그런 다음 같은 트랜잭션에서 양쪽이 사본을 받아요.

한 사람의 새 요청은 엄격하게 하나씩 만들어져요. 그래서 더블 클릭이나 탭 두 개로 중복 요청을 만들거나 하루 한도나 대기 기간을 빠져나갈 수 없어요.

알림과 이메일은 동작과 같은 트랜잭션에서 발신함에 들어가고, 커밋된 뒤 백그라운드 워커가 전달해요. 동작이 실패해서 롤백되면 일어나지 않은 일에 대한 알림은 아무도 받지 않아요. 프로세스가 중간에 재시작돼도 잃어버리는 건 없어요.

짧은 설명은 이용 방법과 자주 묻는 질문에 있어요.