← 기능명세서 아카이브
Functional Specification · v1

IVE로 DIVE — 기능명세서 v1

아이브(IVE) 팬 커뮤니티 · 굿즈 커머스 서비스의 화면별 기능 정의

문서 버전v1 — As-Built (2026 리뉴얼 착수 직전)
서비스명IVE로 DIVE (ive-three.vercel.app)
문서 기준리뉴얼(v2) 착수 직전 운영 코드 기준 — 2025.05.29 배포분, 커밋 a7d842e
작성일2026-07-29
범위메인 · 소식 · 인증 · 자유게시판 · 굿즈샵 · 장바구니/결제 · 마이페이지 · 공통 UI
기술 스택Next.js 14 (App Router, middleware) · React 18 · Supabase(Auth/DB/Storage) · Recoil · TanStack Query · Tailwind CSS · 토스페이먼츠
권한 표기전체 비로그인 포함 누구나 · 로그인 필요 · 작성자 본인 리소스만
화면 기록각 장에 v1 운영 당시 직접 캡처한 화면 기록(GIF)을 함께 실었다. 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안에서 비교할 수 있다.

1. 공통 (헤더 · 푸터 · 전역 UI)

모든 화면에 공통 적용되는 레이아웃과 전역 동작.

1-1. 헤더 (데스크톱)

ID기능명상세 설명처리 기준 · 예외권한
COM-01로고 / 홈 이동좌측 로고 클릭 시 메인(/)으로 이동.메인 상단(미스크롤)에서는 흰색 로고, 그 외에는 검정 로고 표시.전체
COM-02스크롤 반응 헤더메인 페이지에서는 투명 배경으로 고정(fixed)되며, 앨범 섹션에 도달하면 흰 배경 + 그림자 스타일로 전환.스크롤 감지는 100ms 스로틀. 메인 외 페이지는 항상 흰 배경(relative).전체
COM-03GNB 메뉴소식(/news) · 굿즈샵(/shop) · 자유게시판(/board) 3개 메뉴. 데스크톱(lg 이상)에서만 노출.현재 경로가 해당 메뉴로 시작하면(하위 경로 포함) 굵은 글씨로 활성 표시.전체
COM-04장바구니 아이콘 · 뱃지장바구니(/cart) 이동 아이콘. 담긴 상품 종류 수를 빨간 원형 뱃지로 표시.수량 합계가 아닌 고유 품목 수. 0개면 뱃지 숨김. 하이드레이션 전에는 미표시.전체
COM-05유저 메뉴 분기비로그인: “로그인/회원가입” 텍스트 → 로그인 모달 오픈. 로그인: 아바타 → 드롭다운(닉네임 표시, 마이페이지, 로그아웃).세션 상태(zustand)에 따라 실시간 전환.전체

1-2. 헤더 (모바일)

ID기능명상세 설명처리 기준 · 예외권한
COM-06햄버거 사이드 메뉴햄버거 버튼 → 좌측 슬라이드 시트 오픈. 로고 클릭 시 홈 이동과 함께 시트 닫힘.lg 미만 화면 전용.전체
COM-07시트 내 프로필로그인 시 아바타 + 닉네임 + 로그아웃 버튼 노출. 로그아웃 성공 시 시트 자동 닫힘.비로그인 시 프로필 영역 미노출.
COM-083분할 퀵 메뉴① 장바구니 ② 로그인(모달) 또는 마이페이지 ③ 회원가입 링크.회원가입 링크는 비로그인 시에만 노출.전체
COM-09모바일 GNBGNB 3개 메뉴를 세로 리스트로 제공. 항목 이동 시 시트 닫힘.전체

1-3. 푸터 · 404 · 전역 UI

ID기능명상세 설명처리 기준 · 예외권한
COM-10푸터로고, 사업자 정보 4항목(회사명·대표·사업자등록번호·주소), GitHub / 블로그 외부 링크(새 창).로그인 상태와 무관하게 항상 동일한 정적 콘텐츠.전체
COM-11404 페이지존재하지 않는 경로 접근 시 안내 이미지 + “죄송합니다. 잘못된 경로로 들어오셨습니다.” · “잠시 후 다시 접속해 주세요.” 문구 + “메인으로 이동하기” 링크 표시.자동 리다이렉트 없음. 헤더/푸터는 함께 표시.전체
COM-12최상단 이동 버튼페이지 우하단 고정 버튼. 클릭 시 최상단으로 부드럽게 스크롤.스크롤 200px 이상일 때만 노출. 메인·소식·게시판 상세·마이페이지 등에 배치.전체
COM-13토스트 알림동작 결과(성공/실패)를 화면 토스트로 안내. 실패는 붉은(destructive) 스타일.동시 1개만 표시(신규 발생 시 교체).전체
COM-14확인 모달파괴적 동작(게시글/댓글 삭제, 장바구니 비우기, 구매확정 등) 전 공통 확인 다이얼로그 표시.바깥 영역 클릭으로도 닫힘(취소 처리).전체
COM-15테마라이트 테마 고정.시스템 다크모드 미연동, 테마 전환 UI 없음.전체

2. 메인 페이지

서비스 첫 화면. 24시간 주기 ISR로 재생성되며 앨범 데이터는 서버에서 미리 조회(prefetch)된다.

v1 PC
v1PC메인 — 데스크톱 전체 화면
v1 Mobile
v1Mobile메인 — 모바일(햄버거 사이드바 포함)

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

2-1. 메인 /

ID기능명상세 설명처리 기준 · 예외권한
MAIN-01비주얼 히어로전체 화면 높이의 배경 영상(자동재생·음소거·반복)과 카피(“DIVE INTO IVE”), 하단 스크롤 유도 인디케이터 표시.스크롤로 앨범 섹션 도달 시 배경 영상 숨김 처리.전체
MAIN-02앨범 캐러셀앨범 목록을 커버플로우(coverflow) 캐러셀로 표시. 카드에는 앨범 이미지·제목·발매 정보(구분 · 발매일 · 장르 · 수록곡 수) 노출. 현재/전체 위치를 분수(fraction)로 표시.발매일 내림차순. 드래그로 탐색.전체
MAIN-03음원 플랫폼 링크앨범 카드에서 Apple Music · Melon · FLO · Bugs · Genie 아이콘으로 각 스트리밍 페이지 이동(새 창).링크가 없거나 #인 플랫폼 아이콘은 미노출.전체
MAIN-04최신 게시글 (FREE BOARD)자유게시판 최신 글 6개를 카드로 표시(썸네일·제목·작성자·댓글 수). 항목 클릭 시 게시글 상세로 이동. “더보기” → 게시판 목록.작성일 내림차순 6건 고정. 썸네일 없으면 기본 이미지.전체
MAIN-05굿즈샵 프로모 배너“굿즈샵 오픈!” 홍보 문구와 이미지를 표시하는 정적 배너.링크/버튼 없음(안내 전용).전체
MAIN-06상품 캐러셀 (SHOP)인기 상품 12개를 좌우 화살표 캐러셀로 표시. 카드에 썸네일·배지·상품명·할인율·할인가·평균 별점 노출, 찜(하트) 토글 가능. 클릭 시 상품 상세 이동. “더보기” → 굿즈샵.리뷰 수 기준 상위 12개. 찜 동작은 SHOP-04와 동일.전체
MAIN-07로딩 · 오류 처리각 섹션은 로딩 중 스켈레톤 표시, 조회 실패 시 오류 안내(“Oops! 잠시 후 다시 확인해주세요...”)로 대체.재시도 버튼 없음. 상품 캐러셀은 오류 시 별도 안내 없이 미표시.전체

3. 소식 페이지

아티스트 최신 소식과 사진 갤러리를 제공. 24시간 주기 ISR.

v1 소식
v1소식카테고리 필터 · 갤러리 · 상세 모달

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

3-1. 소식 /news

ID기능명상세 설명처리 기준 · 예외권한
NEWS-01히어로 · 섹션 이동전체 화면 히어로와 “Latest News” / “View Gallery” 버튼 2개. 클릭 시 해당 섹션으로 부드럽게 스크롤.전체
NEWS-02소식 카테고리 필터전체 · 음악 · 방송 · 행사 · 화보 5개 pill 필터. 선택한 카테고리의 소식만 목록에 표시.현재 로드된 목록 내에서만 필터링(서버 재조회 없음). 기본값 “전체”.전체
NEWS-03최신 소식 목록16:9 카드 그리드(기본 2열). 카드에 카테고리·날짜(YYYY-MM-DD)·제목·본문 1줄 미리보기 표시.최초 5건, 작성일 내림차순. 총 개수가 홀수면 첫 카드만 전체 폭.전체
NEWS-04소식 더 보기“더 많은 소식 보기” 버튼 클릭 시 5건씩 추가 로드.더 불러올 데이터가 없으면 버튼 자동 숨김. 무한스크롤 아님.전체
NEWS-05소식 상세 모달카드 클릭 시 모달로 상세 표시: 대표 이미지, 카테고리, 제목, 날짜, 출처, 본문.출처는 텍스트 표기(외부 링크 아님).전체
NEWS-06갤러리 그리드정사각형 사진 그리드(모바일 1열 → 3열). 호버 시 확대 아이콘 표시.최초 6건, 작성일 내림차순. 사진이 0장이면 섹션 자체 미노출.전체
NEWS-07갤러리 더 보기 · 원본 보기“더 많은 사진 보기”로 6건씩 추가 로드. 사진 클릭 시 모달에서 원본 비율로 확대 표시.더 불러올 데이터가 없으면 버튼 자동 숨김.전체

4. 인증 (로그인 · 회원가입)

이메일/비밀번호 및 소셜 로그인(카카오·구글·깃허브)을 지원. 로그인 UI는 전용 페이지와 모달 2가지 경로로 제공된다.

v1 로그인 모달
v1로그인 모달헤더에서 여는 2단계 로그인 모달
v1 로그인 페이지
v1로그인 페이지기존 회원용 로그인 화면
v1 회원가입
v1회원가입가입 후 첫 로그인 폭죽 효과

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

4-1. 로그인 페이지 /login

ID기능명상세 설명처리 기준 · 예외권한
AUTH-01일반 로그인 화면로고 + 이메일 로그인 폼 + 구분선(“또는”) + 소셜 로그인 버튼 3종(카카오·구글·깃허브)으로 구성.로그인 상태로 접근 시 서버에서 메인으로 리다이렉트.전체
AUTH-02가입 축하 화면/login?form=signup 진입 시 “회원이 되신 것을 축하드립니다!” 화면으로 전환. 최초 1회 폭죽(컨페티) 효과 + “회원가입이 완료되었습니다!” 토스트 후 이메일 로그인 폼 제공.가입 직후 발급되는 5분짜리 쿠키가 없으면 일반 로그인으로 리다이렉트(직접 접근 차단). 축하 효과는 1회만 재생. 이 화면에는 소셜 버튼 없음.전체
AUTH-03이메일 로그인이메일 + 비밀번호 입력 후 로그인. 입력 즉시 실시간 검증(onChange)하며, 유효한 값 입력 전까지 로그인 버튼 비활성.
  • 이메일: 이메일 형식 — “올바른 이메일을 입력해 주세요.”
  • 비밀번호: 영문+숫자+특수문자 포함 8자 이상 (최대 20자 입력 제한) — “비밀번호는 영문, 숫자, 특수문자를 포함하여 8자 이상이어야 합니다.”
비밀번호 표시/숨김 토글 제공. 제출 중에는 “처리 중...” 표시.전체
AUTH-04로그인 성공 처리① 비로그인 상태에서 담아둔 로컬 찜 목록을 계정으로 자동 이관 ② “로그인 되었습니다.” 토스트 ③ 메인으로 이동.모달에서 로그인한 경우에는 이동 없이 현재 페이지 유지.전체
AUTH-05로그인 실패 처리계정 정보 불일치 시 이메일·비밀번호 두 필드에 “이메일 또는 비밀번호가 일치하지 않습니다.” 에러 표시.그 외 오류(네트워크 등)는 별도 안내 없음.전체
AUTH-06소셜 로그인카카오 · 구글 · 깃허브 버튼으로 OAuth 로그인. 완료 후 사이트 루트로 복귀하며 “로그인 되었습니다.” 토스트 표시. 로컬 찜 목록도 자동 이관.실패 시 오류 메시지 토스트.전체

4-2. 로그인 모달 모달

ID기능명상세 설명처리 기준 · 예외권한
AUTH-07모달 오픈 경로헤더 “로그인/회원가입”(PC), 모바일 메뉴 “로그인”, 회원가입 페이지 하단 “로그인하기”에서 오픈.전체
AUTH-081단계: 소셜 선택“카카오로 3초 만에 시작하기” 대표 버튼(노란색), 구글/깃허브 아이콘 버튼, “이메일로 로그인” 전환 버튼 제공.전체
AUTH-092단계: 이메일 로그인AUTH-03과 동일한 폼. 뒤로가기 버튼으로 1단계 복귀.성공 시 페이지 이동 없이 현재 화면 유지(헤더가 로그인 상태로 전환).전체
AUTH-10회원가입 이동“아직 계정이 없으신가요? 회원가입하기” 클릭 시 모달을 닫고 회원가입 페이지로 이동.전체

4-3. 회원가입 /signup

ID기능명상세 설명처리 기준 · 예외권한
AUTH-11이메일 회원가입 폼이메일 · 비밀번호 · 비밀번호 확인 3개 필드. 실시간 검증, 모두 유효해야 “가입하기” 활성.
  • 이메일 형식 — “올바른 이메일을 입력해 주세요.”
  • 비밀번호: 영문+숫자+특수문자 8자 이상 (안내문 “비밀번호 영문, 숫자, 특수문자 포함 8-20자” 상시 노출)
  • 확인 미입력 — “비밀번호를 한번 더 입력해주세요.” / 불일치 — “비밀번호가 일치하지 않습니다.”
비밀번호·확인 각각 표시/숨김 토글. 로그인 상태로 접근 시 메인으로 리다이렉트.전체
AUTH-12랜덤 닉네임 자동 부여가입 시 한국어 랜덤 닉네임을 외부 API로 발급받아 초기 닉네임으로 자동 설정.닉네임은 마이페이지에서 변경 가능(MY-03).전체
AUTH-13가입 성공 처리가입 완료 후 자동 로그인되지 않고, 가입 축하 화면(/login?form=signup, AUTH-02)으로 이동해 직접 로그인하도록 유도.축하 화면 접근용 쿠키(5분 유효) 발급.전체
AUTH-14가입 실패 처리실패 시 “회원가입에 실패했습니다. — 이미 등록된 이메일 입니다.” 토스트 표시.실패 원인과 무관하게 동일 문구 사용(중복 이메일 외 원인 포함).전체

4-4. 세션 · 로그아웃

ID기능명상세 설명처리 기준 · 예외권한
AUTH-15세션 유지 · 복원새로고침 시에도 Supabase 쿠키 세션에서 로그인 상태 자동 복원. 세션 변화는 전역 구독으로 헤더 등 UI에 즉시 반영.
AUTH-16로그아웃헤더 드롭다운/모바일 시트의 “로그아웃” 클릭 시 세션 종료 후 “로그아웃 되었습니다.” 토스트.로그아웃 시 로컬 장바구니·찜 목록 삭제 및 화면 상태 초기화. 실패 시 “로그아웃 실패, 다시 시도해 주세요.”

5. 자유게시판

회원 커뮤니티 게시판. 조회는 누구나 가능하며 작성·좋아요·댓글은 로그인이 필요하다.

v1 목록 ①
v1목록 ①표 형식 목록 · 페이지네이션
v1 목록 ②
v1목록 ②검색 디바운싱 · 하이라이트
v1 글쓰기
v1글쓰기react-quill 에디터
v1 상세
v1상세좋아요 · 댓글 · 대댓글 · 수정/삭제

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

5-1. 게시글 목록 /board

ID기능명상세 설명처리 기준 · 예외권한
BRD-01목록 조회게시글을 최신순으로 표시. 데스크톱은 표 형식(번호·제목·작성자·작성일·조회·추천), 모바일은 요약 카드 형식. 제목 옆에 댓글 수 표시.정렬 변경 기능 없음(최신순 고정).전체
BRD-02페이지네이션페이지당 10건. 이전/다음 및 페이지 번호(최대 3개 노출, 말줄임 처리)로 이동. 현재 페이지는 URL 쿼리(?page=N)에 유지.전체가 1페이지 이하이면 페이저 미노출.전체
BRD-03제목 검색검색어 입력 시 0.5초 디바운스 후 제목 부분일치로 검색. 결과 목록에서 일치 구간을 노란색으로 하이라이트.검색 대상은 제목만(본문·작성자 제외). 검색 시 1페이지로 리셋. 결과 없으면 “검색 결과가 없습니다.”전체
BRD-04글쓰기 진입“글쓰기” 버튼으로 작성 화면 이동.비로그인 시 “로그인이 필요합니다.” 토스트 후 이동 차단.
BRD-05상세 진입 · 조회수행 클릭 시 상세로 이동하며 이때 조회수 1 증가. 모바일 댓글 수 버튼 클릭 시 상세의 댓글 영역으로 바로 이동.같은 글은 기기당 24시간 내 재클릭해도 조회수 중복 증가 없음. 상세 URL 직접 접근으로는 조회수가 증가하지 않음.전체

5-2. 게시글 작성 · 수정 /board/write /board/edit/[id]

ID기능명상세 설명처리 기준 · 예외권한
BRD-06글 작성 폼제목(최대 100자 입력 제한) + 리치 텍스트 에디터(제목 크기 3단계 · 굵게 · 기울임 · 밑줄 · 이미지). 두 필드 모두 필수이며 유효할 때만 “등록하기” 활성.미입력 시 “제목을 입력해 주세요.” / “내용을 입력해 주세요.” 본문 길이 상한 없음.
BRD-07본문 이미지 업로드에디터의 이미지 버튼으로 이미지 1장씩 선택 → 스토리지 업로드 후 커서 위치에 삽입.실패 시 “이미지 업로드 실패” 토스트. 파일 크기·개수 제한 없음(브라우저 이미지 형식 필터만 적용).
BRD-08썸네일 자동 지정본문의 첫 번째 이미지를 목록 썸네일 및 공유(OG) 이미지로 자동 사용.이미지가 없으면 기본 이미지 사용.
BRD-09등록 · 수정 처리등록 성공 시 “게시글 등록이 완료되었습니다.” 후 목록으로, 수정 성공 시 “게시글 수정이 완료되었습니다.” 후 상세로 이동.수정 시 변경 사항이 없으면 저장 없이 “수정된 내용이 없습니다.” 안내 후 상세로 이동.작성자

5-3. 게시글 상세 /board/[id]

ID기능명상세 설명처리 기준 · 예외권한
BRD-10상세 조회제목, 작성일, 조회수, 추천 수, 본문(서식·이미지 포함), 작성자 정보(아바타·이름) 표시.전체
BRD-11게시글 좋아요좋아요 버튼 토글. 상태에 따라 아이콘 채움/비움 및 카운트 갱신. “좋아요를 눌렀습니다.” / “좋아요가 취소되었습니다.” 토스트.비로그인 시 로그인 안내 토스트 후 차단.
BRD-12공유 (링크 복사)공유 버튼 클릭 시 현재 페이지 URL을 클립보드에 복사, “링크가 복사되었습니다.” 토스트.실패 시 “링크 복사에 실패했습니다.”전체
BRD-13수정 · 삭제 (작성자)본인 글에만 수정/삭제 버튼 노출. 삭제는 확인 모달(“정말로 삭제하시겠습니까? 삭제 후 되돌릴 수 없습니다.”) 통과 시 실행 후 목록 이동 + “게시글이 삭제 되었습니다.”타인 글에는 버튼 자체가 미노출. 데이터 권한은 서버(RLS) 정책으로 보호.작성자

5-4. 댓글 · 대댓글

ID기능명상세 설명처리 기준 · 예외권한
BRD-14댓글 목록상세 하단에 “댓글 N개” 헤딩과 전체 댓글을 작성순으로 표시. 대댓글은 들여쓰기로 원댓글 아래에 표시.페이지네이션 없이 전체 로드. 댓글 앵커(#comments) 진입 시 자동 스크롤.전체
BRD-15댓글 작성입력창에 내용 입력 후 “등록”. 성공 시 “댓글 작성에 성공했습니다.” 토스트.빈 내용 차단(“내용을 입력해 주세요.”). 비로그인 제출 시 로그인 안내 토스트.
BRD-16대댓글 작성댓글의 “답변” 버튼으로 인라인 답글 폼 토글(열림 시 “닫기”). 등록 성공 시 폼 자동 닫힘.답글 깊이는 2단계까지(대댓글에는 답변 버튼 없음).
BRD-17댓글 수정 · 삭제본인 댓글에만 수정/삭제 버튼 노출. 수정은 인라인 편집(동시에 1개만), 삭제는 확인 모달 후 “댓글이 삭제 되었습니다.”내용 변경 없이 저장 시 “수정된 내용이 없습니다.” 안내.작성자
BRD-18댓글 좋아요최상위 댓글에 좋아요 토글 제공(카운트·강조 표시).대댓글에는 좋아요 없음. 비로그인 차단.

6. 굿즈샵

굿즈 상품 탐색·찜·구매 진입. 가격은 할인율 적용 후 10원 단위 내림으로 계산해 표시한다.

v1 상품 목록
v1상품 목록정렬 · 무한 스크롤 · 찜
v1 상품 상세
v1상품 상세수량 선택 · 탭 · FAQ 아코디언

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

6-1. 상품 목록 /shop

ID기능명상세 설명처리 기준 · 예외권한
SHOP-01목록 조회 · 무한 스크롤상품 카드를 12개 단위로 표시하고, 스크롤이 하단에 도달하면 다음 12개 자동 로드.마지막 페이지에서 “더 이상 표시할 상품이 없습니다.” 표시.전체
SHOP-02정렬인기순(기본) · 최신순 · 가격 낮은 순 · 가격 높은 순 4종 셀렉트 제공.인기순은 리뷰 수 기준, 가격 정렬은 할인 적용가 기준. 카테고리·검색 기능 없음.전체
SHOP-03상품 카드썸네일 · 배지 · 상품명 · 할인율(%) · 할인가 · 평균 별점 표시. 클릭(또는 Enter/Space) 시 상세 이동.배지 규칙: 무료배송 상품 → “무료배송”, 리뷰 10개 이상 & 평점 4.0 이상 → “Best👍”.전체
SHOP-04찜(위시리스트) 토글카드의 하트 버튼으로 찜 추가/해제. “찜하기가 추가되었습니다.” / “찜하기가 취소되었습니다.” 토스트.비로그인은 기기(로컬)에 저장되며, 로그인 시 계정으로 자동 이관. 로그인 사용자는 계정에 저장.전체

6-2. 상품 상세 /shop/[id]

ID기능명상세 설명처리 기준 · 예외권한
SHOP-05상품 정보이미지, 상품명, 배송 정보, 사이즈/색상, 원가·할인율·할인가, 평균 별점 표시. 공유(링크 복사) 버튼 제공.사이즈·색상은 정보 표시 전용(옵션 선택 기능 없음).전체
SHOP-06수량 선택+/− 버튼으로 수량 조절, “총 상품금액(할인가 × 수량)” 실시간 표시.최소 1개 ~ 최대 5개. 초과 시 “최대 5개 까지 구매 가능합니다.” 토스트.전체
SHOP-07장바구니 담기선택 수량을 장바구니에 추가하고 하단 드로어로 안내(“장바구니에 상품이 담겼습니다.” + “장바구니 보기 / 계속 쇼핑하기”).이미 담긴 수량과 합산해 상품당 5개 초과 시 차단(현재 수량 안내). 비로그인도 가능(기기 저장).전체
SHOP-08바로 구매“구매하기” 클릭 시 장바구니를 거치지 않고 곧바로 토스페이먼츠 결제창 호출.검증: ① 로그인 ② 주문자 정보 · 기본 배송지 존재(누락된 항목을 묶어 하나의 토스트로 안내). 미충족 시 중단.
SHOP-09상세정보 · 리뷰 탭“상세정보” 탭(상품 설명)과 “리뷰” 탭(개수 표시) 전환. 리뷰 탭은 평균 별점(소수 1자리/5.0, 현재 페이지에 로드된 리뷰 기준)과 리뷰 목록을 페이지당 5개 페이지네이션으로 제공.리뷰 작성은 구매확정 후 마이페이지 주문 상세에서만 가능(MY-09).전체
SHOP-10구매 안내 아코디언판매자 고객센터 / 배송 정보 / 교환·반품 정책 3개 접이식 안내(정적 텍스트).전체

7. 장바구니 · 주문서

별도 결제 페이지 없이 장바구니 화면이 곧 주문서(체크아웃) 역할을 한다. 좌측 상품 목록 + 우측 주문 요약(금액·주문자·배송지·약관·결제 버튼) 2단 구성. 장바구니 데이터는 기기(localStorage)에 저장되며 서버 동기화는 없다.

v1 장바구니 ①
v1장바구니 ①선택 · 삭제 · 금액 계산
v1 장바구니 ②
v1장바구니 ②주문자/배송지 변경 · 약관 모달

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

7-1. 장바구니 /cart

ID기능명상세 설명처리 기준 · 예외권한
CART-01담긴 상품 목록썸네일 · 상품명 · 배송 정보 · 사이즈/색상 · 수량 · 할인율 · 원가(취소선) · 할인 적용 합계 표시. 썸네일 클릭 시 상품 상세 이동.비어 있으면 “장바구니가 비어있습니다. 원하는 상품을 담아보세요!” + 쇼핑하기 링크.전체
CART-02선택 관리전체선택 체크박스와 개별 체크박스, “선택 n/전체 m” 카운트 제공. 결제·금액 계산은 선택된 상품만 대상.진입 시 전체 자동 선택(장바구니 내용이 변경되면 전체 선택으로 재설정). 결제 실패 후 복귀 시 이전 선택 상태 복원.전체
CART-03수량 변경아이템별 +/− 버튼으로 수량 조절, 합계 즉시 반영.1~5개 제한(초과 시 토스트).전체
CART-04삭제 (3종)① 개별 삭제(× 버튼) ② 선택삭제 ③ 전체삭제.선택 0개로 선택삭제 시 “선택한 내용이 없습니다.” 전체삭제는 확인 모달(“장바구니의 모든 상품이 삭제됩니다. 정말 비우시겠습니까?”) 필요.전체
CART-05결제 금액 요약선택 상품 기준으로 총 결제 금액(상단 강조) / 상품 금액 / 총 할인 금액(− 표시) 순으로 표시.배송비 항목 없음(전 상품 배송비 0원 정책, 부록 참고).전체
CART-06주문자 정보로그인 시 [정보 입력/정보 변경] 버튼으로 인라인 폼 오픈: 이름(최대 25자) · 휴대폰(하이픈 없이 숫자 11자리 입력, 저장 시 자동 포맷) · 이메일. 계정당 1건 저장(이후 자동 표시).비로그인 시 “주문자 정보가 없습니다. 로그인 후 정보를 입력해주세요.” 변경 없이 저장 시 “변경된 내용이 없습니다.”
CART-07배송 정보기본 배송지(받는 분 · 휴대폰 · 우편번호+주소 · 요청사항)를 표시. [배송지 변경] 또는 [배송지 추가] 버튼으로 마이페이지 배송지 관리로 이동.주문서에서 배송지 직접 입력은 불가(마이페이지에서 관리).
CART-08주문 약관 동의“[필수] 주문 내역에 대한 필수 동의” 부모 체크 + 자식 2개(개인정보 수집·제3자 제공 / 결제 이후 환불·취소 불가). 부모 체크 시 일괄 동의, 자식 모두 체크 시 부모 자동 체크. 각 항목 상세는 모달로 열람.자식 항목은 기본 접힘 상태(화살표로 펼침). “본인은 만 14세 이상이며 주문내용을 확인하였습니다.” 문구 상시 노출.
CART-09주문하기 (결제 요청)검증 통과 시 토스페이먼츠 결제창 호출. 주문명은 “{첫 상품명} 외 N건” 형식, 주문번호는 YYYYMMDD-랜덤8자리 자동 생성.검증 순서: ① 로그인(“로그인이 필요합니다.”) ② 결제 금액 0원(“결제할 내용이 없습니다.”) ③ 약관 동의(“약관 동의가 필요합니다”) ④ 주문자 정보(“주문자 정보가 없습니다.”) ⑤ 배송 정보(“배송 정보가 없습니다.”). 하나라도 미충족 시 토스트 후 중단.

8. 결제

PG는 토스페이먼츠 단일 연동(결제수단 “카드” 고정, 카드사 간편결제 포함). 결제 완료 후 성공 페이지에서 승인·주문 저장이 이루어진다.

v1 결제 완료
v1결제 완료주문 번호 · 결제 상세

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

8-1. 결제 승인 API POST /api/payment/confirm

ID기능명상세 설명처리 기준 · 예외권한
PAY-01결제 승인 프록시결제창에서 돌아온 paymentKey · orderId · amount를 받아 서버에서 토스페이먼츠 승인 API로 전달(시크릿 키는 서버 보관).세 값 중 누락 시 400 “결제 승인에 필요한 항목이 누락되었습니다.” 토스 승인 실패 시 해당 상태 코드·메시지 그대로 반환.전체

8-2. 결제 성공 /payment/success

ID기능명상세 설명처리 기준 · 예외권한
PAY-02접근 가드미들웨어에서 ① 비로그인이면 로그인 페이지로 ② orderId 쿼리가 없으면 메인으로 리다이렉트. 클라이언트에서도 비로그인 시 “로그인 후 이용 가능합니다.” 토스트 후 로그인 페이지로 이동(이중 가드).PG(토스) 복귀는 크로스사이트 리다이렉트라 세션 쿠키가 잡히지 않으면 실제 로그인 사용자도 로그인 페이지로 이동될 수 있음(알려진 한계, 부록 참고).
PAY-03결제 승인 · 주문 저장페이지 진입 시 자동으로 ① 승인 API 호출 ② 승인 완료(DONE) 확인 ③ 결제 정보(payments) + 주문 상품(order_items) 저장. 상태는 “결제 완료 / 배송전”으로 기록되고 배송지 정보는 결제 시점 스냅샷으로 함께 저장.동일 주문번호가 이미 저장돼 있으면 승인·저장을 건너뜀(새로고침 중복 방지). 승인 결과가 DONE이 아니면 실패 페이지로 이동.
PAY-04장바구니 정리결제된 상품만 장바구니에서 자동 제거(미선택 상품은 유지).
PAY-05완료 화면“주문이 완료되었습니다.” + 주문번호, 주문 상품 목록(총 N개), 배송 정보 / 결제 정보(총 주문 금액·배송비·총 결제 금액) / 결제 수단(방법·일시불/할부·결제 일시·주문 상태) 카드 표시. [주문상세 보기 → 마이페이지] / [쇼핑 계속하기 → 굿즈샵] 버튼.결제 조회 실패 시 1초 간격 3회 재시도 후 오류 표시.

8-3. 결제 실패 /payment/fail

ID기능명상세 설명처리 기준 · 예외권한
PAY-06실패 안내“결제가 실패 되었습니다.” + PG가 전달한 실패 사유(“에러 사유 : …”) 표시.접근 가드는 성공 페이지와 동일.
PAY-07장바구니 복귀[장바구니로 돌아가기] 클릭 시 결제 시도했던 상품들이 선택된 상태로 장바구니 복원.복원 정보가 없으면 일반 장바구니로 이동.

9. 마이페이지

좌측 프로필 + 메뉴(찜 목록 · 결제 목록 · 내가 쓴 글 · 배송지 관리), 우측 콘텐츠 2단 구성. /mypage 진입 시 찜 목록으로 자동 이동. 전 영역 로그인 필수(서버·클라이언트 이중 가드).

v1 프로필
v1프로필아바타 크롭 · 닉네임 수정
v1 찜 목록
v1찜 목록찜한 상품 그리드
v1 결제 목록
v1결제 목록주문 상세 · 구매확정 · 리뷰
v1 내가 쓴 글
v1내가 쓴 글작성 글 목록
v1 배송지 ①
v1배송지 ①목록 · 기본 배송지 설정
v1 배송지 ②
v1배송지 ②추가 · 수정 · 삭제

실제 v1 운영 화면 기록 — 이미지를 누르면 원본으로 열린다. (2026 리뉴얼 이후 화면은 디자인 시스템 · 화면 시안기능명세서 v2 참고)

9-1. 프로필 (공통 사이드)

ID기능명상세 설명처리 기준 · 예외권한
MY-01프로필 표시프로필 이미지, 닉네임, 활동 통계(글 작성수 · 찜 수) 표시.
MY-02프로필 이미지 변경아바타 클릭 → 이미지 선택 → 크롭 모달(원형, 확대/축소 슬라이더)에서 편집 후 저장. 성공 시 “프로필 이미지가 변경되었습니다.” 헤더 아바타에도 즉시 반영.250×250 원형으로 저장. 파일 용량·형식 별도 제한 없음(이미지 파일 필터만).
MY-03닉네임 변경“수정” 클릭 → 인라인 편집 → “수정완료”로 저장. 성공 시 “닉네임이 변경 되었습니다.”2글자 이상(“2글자 이상 입력해 주세요.”), 입력창 최대 6자. 동일 닉네임 저장 시 “변경된 닉네임이 없습니다.”

9-2. 찜 목록 /mypage/wishlist

ID기능명상세 설명처리 기준 · 예외권한
MY-04찜 목록 조회찜한 상품을 카드 그리드(3열)로 표시: 썸네일 · 배지 · 상품명 · 할인율 · 할인가 · 평균 별점. 카드 클릭 시 상품 상세 이동.최신 찜 순. 비어 있으면 “찜 목록이 없습니다.”
MY-05찜 해제카드의 하트 버튼 클릭 시 즉시 해제, “찜하기가 취소되었습니다.” 토스트.확인 절차 없이 즉시 삭제.

9-3. 결제 목록 · 주문 상세 /mypage/orders /mypage/orders/[orderId]

ID기능명상세 설명처리 기준 · 예외권한
MY-06결제 목록주문 단위 카드로 표시: 주문번호, 첫 상품 썸네일, “{첫 상품명} 외 N건”, 총 수량, 주문일시, 총 결제 금액. 카드 또는 “주문상세” 버튼으로 상세 이동.주문일 내림차순. 없으면 “결제한 목록이 없습니다.”
MY-07주문 상세주문일시·주문번호, 주문 상품 리스트(썸네일·상품명·색상/사이즈/수량·원가·할인가), 주문자 정보, 배송 정보, 결제 정보(총 주문 금액·배송비·총 결제 금액), 결제 수단(방법·일시불/할부·결제 일시·주문 상태) 표시.존재하지 않는 주문번호면 “주문을 찾을 수 없습니다.” 상품 클릭 시 상품 상세 이동.
MY-08구매확정미확정 상품의 “구매확정” 버튼 → 확인 모달(“구매를 확정하시겠습니까? 구매 확정 후에는 취소나 변경이 불가능합니다.”) → 확정 시 “구매가 확정되었습니다.” + 초록 “구매확정” 배지 표시.확정 후 되돌리기 불가. 주문 취소/환불 기능은 미제공(부록 참고).
MY-09리뷰 작성 · 수정구매확정된 상품에 “리뷰쓰기”(작성 후엔 “리뷰수정”) 버튼 노출. 모달에서 별점(1~5) + 내용(10~200자) 작성. 작성된 리뷰는 상품 상세 리뷰 탭에 반영.별점 미선택 시 “별점을 선택해주세요.” 내용 10자 미만/200자 초과 차단. 수정 시 변경 없으면 “변경된 내용이 없습니다.”

9-4. 내가 쓴 글 /mypage/posts

ID기능명상세 설명처리 기준 · 예외권한
MY-10내 게시글 목록내가 작성한 글을 최신순으로 표시: 제목 · 작성자 · 조회수 · 추천 수 · 작성일 · 댓글 수. 클릭 시 게시글 상세, 댓글 수 버튼 클릭 시 댓글 영역으로 이동.없으면 “작성한 게시글이 없습니다.” 수정·삭제는 게시글 상세에서 수행.

9-5. 배송지 관리 /mypage/address /mypage/address/new

ID기능명상세 설명처리 기준 · 예외권한
MY-11배송지 목록받는 사람 · 우편번호 · 주소 · 휴대폰 · 요청사항 표시. 기본 배송지는 배지로 구분되어 항상 최상단.없으면 “배송지가 없습니다.” + 추가 버튼.
MY-12배송지 추가받는 분 · 우편번호/주소(다음(Daum) 우편번호 검색 연동, 직접 입력 불가) · 나머지 주소 · 휴대폰(앞자리 셀렉트 + 숫자 3~4자리/4자리) · 배송 요청사항(선택지 5종 + 직접 입력) · 기본 배송지 여부 입력. 모두 유효해야 “저장하기” 활성. 성공 시 “배송지 정보가 저장되었습니다.”필수 미입력 시 필드별 안내(“받는 사람을 입력해 주세요.” 등). 첫 배송지는 자동으로 기본 배송지 지정.
MY-13배송지 수정목록의 “수정” → 모달에서 동일 폼으로 수정. 성공 시 “배송지가 수정되었습니다.”이미 기본 배송지면 “현재 기본 배송지로 설정되어 있습니다.” 안내로 대체.
MY-14배송지 삭제“삭제” → 확인 모달(“배송지를 삭제하시겠습니까?”) → 성공 시 “배송지가 삭제 되었습니다.”기본 배송지를 삭제하면 남은 배송지 중에서 기본 배송지가 자동 재지정.
MY-15기본 배송지 설정“기본 배송지로 설정” 버튼으로 변경, “기본 배송지가 변경 되었습니다.” 토스트. 기본 배송지는 주문서(CART-07)의 배송 정보로 사용.기본 배송지는 계정당 1개.

10. 접근 제어 정책 요약

서버 가드(middleware)와 클라이언트 가드(화면/액션)의 이중 구조.

구분대상정책
서버 가드/mypage/*비로그인 접근 시 로그인 페이지로 리다이렉트.
/login · /signup로그인 상태로 접근 시 메인으로 리다이렉트.
/login?form=signup가입 직후 발급 쿠키(5분) 없으면 일반 로그인으로 리다이렉트.
/payment/success · fail비로그인이면 로그인 페이지로, 주문번호 쿼리가 없으면 메인으로 리다이렉트.
화면 가드마이페이지 · 결제 성공/실패세션 복원 후에도 비로그인이면 “로그인 후 이용 가능합니다.” 토스트 → 로그인 페이지 이동.
액션 가드글쓰기 · 게시글/댓글 좋아요 · 댓글/답글 작성 · 결제하기 · 바로구매비로그인 시 “로그인이 필요합니다.” 토스트 후 동작 차단(리다이렉트 없음).
비로그인 허용메인/소식/게시판/굿즈샵 조회, 게시글 검색, 공유(링크 복사), 장바구니 담기·수량변경·삭제, 찜(기기 저장, 로그인 시 계정 이관).
데이터 권한수정 · 삭제UI는 본인 리소스에만 버튼 노출, 데이터 계층은 Supabase RLS 정책으로 보호.

11. 부록

11-1. 데이터 저장소 (Supabase)

구분이름용도
테이블 user회원 프로필(닉네임 · 아바타), Auth 계정과 연동
album메인 앨범 캐러셀(발매 정보 · 음원 플랫폼 링크)
news_gallery / gallery소식 기사 / 사진 갤러리
board게시글(제목 · 본문 · 조회수 · 썸네일)
board_with_meta (뷰)게시글 목록용 집계 뷰(작성자명 · 댓글 수 · 추천 수 포함)
board_comments댓글 · 대댓글(자기참조 parent_id)
board_likes / comment_likes게시글 / 댓글 좋아요
goods굿즈 상품(가격 · 할인율 · 사이즈/색상 · 배송 유형)
goods_reviews상품 리뷰(별점 · 내용)
wish_lists회원 찜 목록
customer_info주문자 정보(계정당 1건)
shipping_addresses배송지(기본 배송지 플래그 포함)
payments결제 레코드(주문번호 · 결제수단 · 상태 · 배송지 스냅샷)
order_items주문 상품(수량 · 구매확정 여부)
스토리지boards / avatars게시글 본문 이미지 / 프로필 이미지
DB 함수increment_view_count조회수 증가, 기본 배송지 지정·재지정(set_default_address, update_default_address)

11-2. 클라이언트 저장소 키

저장소용도
shopping_cartlocalStorage장바구니(서버 미저장). 로그아웃 시 삭제
wishlistlocalStorage비로그인 찜 목록. 로그인 시 계정으로 이관 후 삭제
checkout_items / order_namelocalStorage결제 진행 중 주문 상품 · 주문명 임시 보관(완료 시 삭제, 실패 시 복원용 유지)
viewedPostslocalStorage게시글 조회수 24시간 중복 방지
loginEffectlocalStorage가입 축하 연출 1회 재생 플래그
firstSignup쿠키 (5분)가입 축하 화면 접근 허용 티켓

11-3. 미구현 · 알려진 한계

참고 — 아래는 기준 시점 코드에서 확인된 사실로, 차기 고도화 후보 목록으로 활용할 수 있다.