F3. 사연 작성 · 입찰
핵심 기능 — 이 서비스를 일반 경매와 구분 짓는 기능이다.
1. 기능명
사연 작성 및 포인트 입찰
2. 기능 목적
사용자가 왜 이 물건이 자신에게 필요한지를 글로 써서 경매에 참여한다.
- 가격이 아니라 이야기로 입찰한다
- 작성한 사연에 포인트를 걸어 참여 의지를 표현한다
- 사연은 다른 참여자의 공감(F4)을 받아 최종 가치가 결정된다
3. 동작 방식
3.1 전체 흐름
사연 작성과 포인트 입찰은 2단계로 분리된다.
1단계 사연 작성 → 글을 등록한다 (포인트 0으로 시작)
2단계 포인트 입찰 → 자기 사연에 포인트를 건다 (누적 가능)
1단계를 마치면 관계가 방문자 → 참여자로 전이된다. 2단계는 그 이후 여러 번 반복할 수 있다.
3.2 1단계 — 사연 작성
| 항목 | 내용 |
|---|---|
| 권한 | 방문자만 |
| 진입 | 경매 상세의 사연 작성하기 버튼 → /episode/{auctionId} |
| 제한 | 한 경매에 사연 1개 |
입력 항목
| 항목 | 필수 | 길이 |
|---|---|---|
| 제목 | O | 2자 이상 50자 이하 |
| 내용 | O | 5자 이상 1,000자 이하 |
작성 가이드 — 화면에 다음 안내를 함께 노출한다.
- 진정성 있는 개인적인 이야기를 들려주세요
- 이 경험이 왜 의미있는지 설명해주세요
- 당신의 특별한 순간과 어떤 연관이 있는지 공유해주세요
주최자 제외
주최자는 자기 경매에 사연을 쓸 수 없다. 버튼 자체를 노출하지 않는다.
자기 경매에 자기가 낙찰되는 것은 의미가 없고, 주최자의 공감이 +50p 가중치를 갖기 때문에(F4) 자기 사연에 자기가 가점을 주는 자기거래가 성립한다.
3.3 2단계 — 포인트 입찰
| 항목 | 내용 |
|---|---|
| 권한 | 참여자 (자기 사연에만) |
| 진입 | 경매 상세의 자기 사연 카드 → 입찰 버튼 |
| 방식 | 누적 — 기존 입찰 포인트에 더한다 |
입찰 단계 — 전 서비스 공통 고정
숫자를 직접 입력하지 않는다. + / − 버튼으로 단계를 오르내린다.
1,000 → 1,500 → 2,000 → 2,500 → 3,000
| 항목 | 값 |
|---|---|
| 시작 | 1,000 P |
| 단위 | +500 P |
| 상한 | 3,000 P |
- 경매마다 다르지 않다. 모든 경매가 같은 단계를 쓴다
- 사연 작성 시 기본 1,000 P로 시작하고, +를 눌러 올린다
- 상한(3,000)에 도달하면 + 버튼을 비활성화한다
- 보유 포인트를 넘는 단계는 선택할 수 없다. 해당 단계부터 + 버튼을 비활성화한다
수정
입찰 포인트는 사연 작성 후에도 단계를 올릴 수 있다. 내릴 수는 없다. 올린 만큼 추가 차감되고, 내리기(환불)는 사연 삭제로만 가능하다.
3.4 사연 수정 · 삭제
| 동작 | 권한 |
|---|---|
| 수정 | 사연 작성자만 |
| 삭제 | 사연 작성자만 |
삭제 버튼을 누르면 확인 다이얼로그를 세운다. 받은 공감이 함께 사라지므로 되돌릴 수 없다.
삭제 시 처리 — 확정
| 항목 | 처리 |
|---|---|
| 건 포인트 | 전액 반환 (입찰 철회로 간주) |
| 받은 공감 | 사연과 함께 소멸 |
| 관계 | 참여자 → 방문자 전이 |
| 재작성 | 허용 — 같은 경매에 다시 쓸 수 있다 |
반환은 포인트 내역(F8)에 적립 항목으로 남긴다. 차감 기록을 지우지 않는다.
재작성을 허용해도 악용 위험이 낮은 이유
- 재작성하면 작성 시각이 늦어져 동점 시 구조적으로 불리해진다 (F5 3.2.1)
- 쌓인 공감이 리셋되므로 이미 공감을 받은 사연을 갈아엎을 유인이 없다
즉, 규칙으로 막지 않아도 낙찰 규칙 자체가 억제 장치로 작동한다.
마감 이후 삭제 — 확정
마감된 경매에서는 낙찰 여부에 따라 삭제 가능 여부가 갈린다.
| 사연 | 삭제 | 처리 |
|---|---|---|
| 낙찰된 사연 | 불가 | 거래 기록이므로 보존한다 |
| 미낙찰 사연 | 가능 | 포인트는 마감 시 이미 반환되었으므로 추가 정산이 없다. 받은 공감만 소멸한다 |
- 미낙찰 사연을 삭제해도 재작성은 불가능하다. 경매가 이미 마감되었기 때문이다
- 낙찰 사연 삭제 시도 시 안내: "낙찰된 사연은 지울 수 없어요"
사연은 개인적인 이야기를 담는 콘텐츠이므로, 거래 기록으로 남아야 하는 낙찰작을 제외하고는 본인이 정리할 수 있어야 한다.
3.5 최종 입찰 포인트
사연의 최종 가치는 다음 합으로 결정된다.
최종 입찰 포인트 = 본인이 건 포인트 + 받은 공감 가중치 합 (F4)
3.6 사연 목록
경매 상세 아래에 붙는다. 목록이 곧 랭킹이다.
정렬 — 최종 입찰 포인트 높은 순. 같으면 먼저 작성한 순 (F5 3.2.1)
카드에 담는 것 — 5개
1위 · 닉네임 · 1,250 P · ♥ 3
사연 제목
사연 내용 두 줄까지만 보이고... 더보기
| 표시 | 내용 |
|---|---|
| 순위 | 정렬 결과 |
| 닉네임 | |
| 최종 입찰 포인트 | |
| 공감 수 · 공감 버튼 | F4 |
| 제목 · 내용 | 내용은 두 줄까지만, 더보기로 펼친다 |
더보기는 넘칠 때만 나온다
| 상황 | 표시 |
|---|---|
| 내용이 두 줄을 넘음 | 두 줄에서 끊고 끝에 …를 붙인다. 더보기를 카드 오른쪽 아래에 둔다 |
| 내용이 두 줄 안에 다 들어옴 | …도 더보기도 두지 않는다 |
더보기를 오른쪽에 두는 이유는 엄지가 닿는 쪽이기 때문이다. 대부분 오른손으로 잡으므로 왼쪽 아래는 가장 멀다. 펼칠 것이 없는데 더보기가 보이면 눌러도 아무 일이 없어 신뢰를 깎는다.
담지 않는 것
| 항목 | 사유 |
|---|---|
| 마스킹된 이메일 | 개인정보를 노출할 이유가 없다 |
| 작성일 | 순위에 이미 반영되어 있다 |
| 프로필 이미지 | 닉네임으로 충분하다 |
사연은 최대 1,000자다. 목록에서 전문을 펼치지 않는다. 카드가 길어지면 다른 사연을 훑을 수 없다.
목록 분량 — 확정
사연이 100건 모여도 한 화면에 다 붙이지 않는다.
| 항목 | 값 |
|---|---|
| 추가 로딩 | 더보기 버튼으로 이어 붙인다 |
| 버튼 문구 | 더보기 — 개수를 적지 않는다 |
| 한 번에 붙이는 수 | 10건 (구현값) |
| 내 사연 | 목록 맨 위에 순위와 함께 고정한다. 아래 목록에서는 중복해 보여주지 않는다 |
개수를 사용자에게 약속하지 않는다. 총 개수는 목록 제목(모인 사연 12)이 이미 알려주므로 버튼에까지 숫자를 넣으면 같은 정보가 두 번 나온다. 10건은 구현이 고르는 값이지 사용자와의 약속이 아니다.
자동 무한 스크롤을 쓰지 않는다.
- 목록이 곧 랭킹이므로 "몇 명 중 몇 위"라는 규모 감각이 필요하다. 목록 제목의 총 개수가 이를 담당한다
- 경매 상세 하단에는 고정된 참여 버튼이 있다. 스크롤이 끝나지 않으면 사용자가 페이지 끝에 도달하지 못한다
내 사연을 고정하는 이유는 F5 3.2.1이다. 동점자가 마감 전에 자기 순위를 알고 대응(추가 입찰)할 수 있어야 하는데, 100건 중 47위인 사연을 찾으려고 목록을 내리게 만들면 그 요건이 사실상 무너진다.
내 사연은 목록 위치와 무관하게 수정·삭제 버튼을 함께 노출한다.
4. 예외 처리
4.1 권한·상태
| 상황 | 처리 |
|---|---|
| 비회원이 사연 작성 시도 | 로그인 화면으로 유도하고, 로그인 후 원래 경매로 복귀시킨다 |
| 주최자가 접근 | 사연 작성 버튼을 노출하지 않는다. 직접 URL 진입 시 경매 상세로 되돌린다 |
| 이미 사연을 쓴 참여자 | 버튼을 '사연 작성 완료' 비활성 상태로 표시한다. 숨기지 않는다 |
| 마감된 경매 | 사연 작성·입찰을 모두 차단한다. 마감 오버레이를 표시한다 |
| 작성 중 경매가 마감됨 | 제출 시점에 서버가 재검증하여 거부하고, "경매가 마감되었습니다" 안내 후 경매 상세로 이동시킨다 |
| 존재하지 않는 경매 | "경매를 찾을 수 없습니다" 안내 후 목록으로 이동 경로를 제공한다 |
4.2 입력 검증
| 상황 | 안내 |
|---|---|
| 제목 2자 미만 / 내용 5자 미만 | "제목은 2자 이상 입력해주세요" / "내용은 5자 이상 입력해주세요" |
| 제목 50자 / 내용 1,000자 초과 | 실시간으로 남은 글자 수를 표시하고, 한도 도달 시 경고색으로 전환한다 |
| 공백만 입력 | 미입력으로 처리한다 |
4.3 입찰 검증
모든 검증은 서버에서 최종 확인한다. 클라이언트 검증은 안내용이다.
| 상황 | 처리 |
|---|---|
| 보유 포인트 부족 | 감당할 수 없는 단계부터 + 버튼을 비활성화한다. 1,000 P도 안 되면 사연 작성 진입 시 안내한다 |
| 상한(3,000) 도달 | + 버튼을 비활성화한다 |
| 이미 최고 단계로 입찰함 | 입찰 버튼을 비활성화하고 "최대까지 입찰했습니다"를 표시한다 |
| 단계를 내리려는 시도 | − 버튼은 아직 확정하지 않은 입력 중에만 동작한다. 확정된 입찰은 내릴 수 없다 |
직접 입력이 없으므로 숫자 형식·범위 검증이 필요 없다. 버튼이 곧 검증이다.
4.4 처리 실패
| 상황 | 처리 |
|---|---|
| 사연은 저장됐으나 입찰이 실패 | 사연은 유지된다. "사연은 등록되었습니다. 포인트 입찰을 다시 시도해주세요" 안내 후 입찰만 재시도할 수 있게 한다. 사연을 되돌리지 않는다 |
| 사연 저장 실패 | 실패 안내 후 입력한 내용을 유지한 채 화면에 머무른다 |
| 입찰 요청 실패 | 입력값을 초기화하고 모달은 유지한다. 반영 여부를 최신 값으로 다시 조회해 표시한다 |
| 중복 제출 | 처리 중에는 제출 버튼을 비활성화한다 |
| 동시에 여러 기기에서 입찰 | 서버가 최신 누적액 기준으로 재검증한다. 상한을 넘으면 거부하고 실제 값으로 화면을 갱신한다 |
5. 완료 조건
| # | 조건 |
|---|---|
| 1 | 방문자만 사연 작성 버튼을 볼 수 있다. 유형 조건 없이 관계로만 판정된다 |
| 2 | 주최자에게 사연 작성 버튼이 노출되지 않고, 직접 진입도 차단된다 |
| 3 | 한 경매에 사연이 1개만 등록되고, 이미 쓴 경우 '사연 작성 완료' 비활성으로 표시된다 |
| 4 | 사연 작성 직후 방문자 → 참여자 전이가 화면에 즉시 반영된다 |
| 5 | 입찰이 1,000 P에서 시작해 +500 단위로 오르고, 3,000 P를 넘지 못한다 |
| 6 | 보유 포인트를 초과하는 단계가 선택되지 않고, 서버에서도 거부된다 |
| 6-1 | 입찰 화면에 숫자 직접 입력이 없다 |
| 7 | 사연 저장 성공 + 입찰 실패 상황에서 사연이 유실되지 않는다 |
| 8 | 마감된 경매에서 사연 작성·입찰이 모두 차단된다 |
| 9 | 사연 작성·입찰 흐름 전체에서 모드 전환을 요구하는 안내가 0건이다 |