테이크 서비스 개발제작 (take.crowny.org)
라이브 도매/구매대행 "원탭 주문" 서비스. 초기 분석 출발점은 해봉이네 CS봇이었으나 명칭은 "테이크 서비스"로 통일(헷갈림 방지).
개요
해봉이네(YouTube 라이브 경매 구매대행) 고객상담/주문 봇을 분석해, 불편한 주문 과정(주문서 직접 타이핑 + 낙찰·입금 캡처 3개 따로 전송)을
쿠팡식 무마찰 결제 UX로 재설계한 모바일 중심 서비스.
주문서를 받는 것이 주목적.- 도메인: https://take.crowny.org (포트 9944, 전용 cert)
- 디렉토리:
/Users/ef/crowny-take
- 디자인: 밝은 명품(Bright Luxury) — 크림/아이보리 + 골드 액센트 + Noto Serif KR
해봉이네 시스템 분석 → 테이크서비스 메뉴 리네이밍
| 해봉이네 (원본) | 테이크서비스 (신규) |
|---|
| 💗 주문서 작성 | 원탭 주문하기 |
| 💲 입금 계좌 안내 | 결제·입금 안내 |
| 송장 문의방법 | 배송·송장 조회 |
| 🌸 반품·환불 안내 | 교환·반품·환불 |
| 📌 CS 답변 한 번에 | 빠른 문의 가이드 |
| 💛 사용설명서 | 테이크 이용안내 |
쿠팡 결제시스템 스크리닝 → 적용
- 쿠팡 원터치 결제 핵심 = 단계 최소화 + 저장된 정보 자동 + 마찰 제거(비번/재입력 제거).
- 적용: 내 정보 1회 저장(입금자명·닉네임·연락처·우편번호·주소·통관번호·이름) → 재주문 시 자동 채움. 캡처 2장(낙찰·입금)만 첨부 → 원탭 접수. FDS식 = 3요소 누락·통관번호(P+12) 자동 검증.
무엇을 했는지
- 한선씨 판정 코어
주문검증.한선 — 통관번호검증/주문완성도/상태전이(4상: 티 접수가능·옴 보완필요·타 거절·음 보류). 자가테스트 10/10 통과. SSOT, JS 런타임이 미러.
- 백엔드
server.js(Node 독립서버) — 프로필 저장, 주문 접수(캡처 dataURL→블롭, dedup), 내 주문 목록, 주문별 1:1 문의(고객↔관리자 양방향), 관리자(로그인/상태/송장/회신), 공동구매 특가(최대 10). owner 토큰 스코핑, atomic write.
- 고객 SPA(모바일 중심)
public/index.html·app.js·style.css — 하단 4탭(주문/내 주문/안내/내 정보), 캡처 카메라·갤러리 첨부+클라이언트 압축(1280px), 오늘의 특가 스트립(탭→주문서 시작), 문의 스레드.
- 관리자
public/admin.html·admin.js — 받은 주문 카드, 캡처 확대, 상태 버튼(입금확인/발송/완료/보류), 송장 입력(=발송처리), 문의 회신, 특가 10개 관리.
- 영속화 LaunchAgent
org.crowny.take(KeepAlive).
- 게이트웨이 결선 —
domain: take → take.crowny.org(FQDN 버그 수정), gw restart로 라우트 적용.
- 전용 TLS cert 발급(certbot, 만료 2026-09-21) + stunnel SNI 블록 외과 추가 + HUP.
검증 (E2E)
- API 7/7: 프로필 저장(score 7, 통관 유효)·주문 생성·누락 422·관리자 로그인·송장(발송완료)·문의 양방향·특가 저장/조회.
- 공개 https://take.crowny.org → HTTP 200, TLS 검증=0(유효), CN=take.crowny.org. /·/admin·/api/health 모두 200.
관련 파일
/Users/ef/crowny-take/주문검증.한선 (판정 SSOT)
/Users/ef/crowny-take/server.js
/Users/ef/crowny-take/public/{index,admin}.html, app.js, admin.js, style.css
/Users/ef/Library/LaunchAgents/org.crowny.take.plist
/Users/ef/crowny-gateway/gateway.yaml (crowny-take 블록)
/Users/ef/crowny-gateway/한선게이트웨이/stunnel-live.conf (s-take-crowny.org)
- cert:
/Users/ef/crowny-data/certs/certbot/live/take.crowny.org/
인증 추가 (2026-06-23)
- 사용자 회원가입/로그인 게이트: 아이디+비밀번호(scrypt+salt). 회원만 앱 진입(미로그인 401 차단). owner=가입 시 발급되는 40자 비밀토큰(추측 불가) → 기존 owner 스코핑 그대로 보안화.
data/users/<id>.json, ownerIndex로 가입자만 허용. 가입 시 닉네임 seed. 로그아웃(내 정보 탭).
- 관리자 아이디+비밀번호: 기존 PIN → id+pw.
data/admin.json(scrypt). env TAKE_ADMIN_ID/TAKE_ADMIN_PW 지정 시 부팅마다 그 값으로 재설정(미지정 시 파일→기본 admin/take1004). 세션토큰=부팅마다 랜덤(재시작 시 관리자 재로그인). 옛 {pin} 방식 거부.
- 게이트 UI: 밝은 명품 카드(세그 토글 로그인/회원가입). E2E 7/7 통과.
잔여 이슈 / 운영 메모
- 관리자 PIN: 기본
take1004 (env TAKE_ADMIN_PIN). 운영 시 plist에서 변경 권장.
- 계좌/예금주: 결제·입금 안내의 카카오뱅크 계좌가 placeholder(
app.js GUIDE.pay) — 실제 계좌로 교체 필요.
- SNI 블록 lineage: stunnel-live.conf는 SNI생성기.한선 자동생성본. 재생성 시 수동 take 블록이 사라질 수 있음 → 생성기 입력(cert+yaml)에 take 반영되어 있으니 재생성해도 복원되나, 확인 필요.
- 향후: 전화번호 로그인(기기 간 프로필 동기화), 주문 알림(문의 답변 푸시), 특가 재고 카운트.
추가 변경 (2026-06-23 2차)
- 회원가입 확장: 이메일·전화번호 필수 입력 + 닉네임(선택, '유튜브 닉네임'→'닉네임'). 가입정보가 프로필에 자동 seed. 이메일/전화 형식 검증.
- 관리자 회원 관리:
/api/admin/users(회원 리스트+정보+주문/문의수), /api/admin/inquiries(질문·댓글 모아보기, 미답변 우선). 관리자 탭 4개(주문/회원/문의/특가).
- 통관번호 UX: 우편번호 입력란 제거 → 통관번호를 그 자리(풀폭)로, 오른쪽에 '통관번호 조회' 링크(관세청 unipass persIndex.do). 내 정보 폼 1필드/1줄로 정리.
- 우편번호 = 관리자 입력: 고객은 주소만, 관리자가 주문 상세에서 Daum 우편번호 검색(주소 기준)으로 입력.
/api/admin/order/:id/postcode.
- 캡쳐 모델 변경: 낙찰 캡처 제거 → 도매상품 캡쳐(필수) 1장, 입금 캡처는 선택. 한선씨 주문완성도(상품,점수<5) 갱신, 필수필드 5개(입금자명·전화번호·주소·통관번호·이름).
- 관리자 주문 상세 정보 1줄/1항목으로 분리.
- E2E 통과: 회원가입(이메일/전화)·미로그인차단·도매상품누락422·5필수접수·관리자 우편번호입력·회원/문의 목록. 공개 https 200/유효cert.
게이트웨이 대용량 POST 버그 + 직결 우회 (2026-06-23 3차) ★중요
- 증상: 공개에서 주문/특가 저장이 "접수중"에서 멈추고 백엔드에 안 들어옴(로컬·DB는 정상). 관리자에 주문 안 보임.
- 원인: 라이브 한선씨 게이트웨이 프록시(8080)가 요청 본문 ~32KB부터 급격히 느려지고(8KB=1초) ~40KB↑ 타임아웃. 사진(수백 KB) 든 POST 전멸. GET·소형 POST는 정상이라 안 잡힘.
- 해결(take 전용·게이트웨이 무수정): take의 stunnel SNI 블록
connect=127.0.0.1:8080 → 127.0.0.1:9944 직결(stunnel=순수 TCP터널, 대용량 본문 무손실). 검증: 공개 주문 200KB~3MB 모두 200(142ms~1.4s 선형).
- 주의: 게이트웨이 프록시 본문 버그는 업로드 받는 모든 서비스 공통 위험 → 게이트웨이 세션이 프록시 본문 스트리밍 수정 필요.
특가 고도화 (2026-06-23)
- 상품별 사진 최대 9개(images[] 모델, image=썸네일 back-compat). 관리자 편집기 다중업로드+썸네일 삭제. 가격 저장 시 '원' 자동 제거.
- 고객 특가 상세 모달: 사진 갤러리(스크롤스냅) + 사진 1장만 첨부 → 주문(입금 캡처 제거).
다른 서버 이전(매칭) 준비 (2026-06-23)
- /guide 배포 가이드 페이지(환경·포트·포트포워딩·로컬주소·환경변수·원샷 이전). 공개 200.
GET /api/migrate/spec(공개 env 스펙) · GET /api/migrate/bundle?token=(토큰 게이트 tar.gz, data 제외; ?data=1 포함).
- 토큰=env
TAKE_MIGRATE_TOKEN 또는 자동생성 data/migrate-token.txt.
migrate/bootstrap.sh(대상 원샷: 번들수신→설치→영속기동 mac LaunchAgent/linux systemd/nohup→헬스체크→리버스프록시 안내), migrate/take-migrate.sh(소스: token/oneliner/bundle/deploy ssh).
- 한선씨
환경.한선(이전 대상 4상 준비도). 검증: 번들 추출→타 포트 기동 health 200. 순수 Node(의존성 0)라 이전 간단.
CRUD 완성 + 샘플 정리 (2026-06-23)
- 샘플 주문 실제 삭제(전량). 관리자 CRUD: 상품(특가 편집기 add/edit/사진추가삭제/삭제), 주문(수정=상품명·프로필 전필드
/edit, 삭제 /delete·전체비우기 /orders/clear), 문의(메시지별 삭제 /msgdel, 회신). E2E 통과(수정·문의삭제·주문삭제 404).