- 프로젝트명: 겟챠(Getcha)
- 진행일자: 2025.11.13 ~ 2025.12.21
- 개발환경: Java(Spring Boot), Vue.js
품절로 인해 굿즈를 사지 못한 2030 애니메이션 덕후
- 애니메이션 및 캐릭터 굿즈 기반 개인 간 경매 플랫폼 구축
- 가상화폐 기반 안전 거래 시스템 제공
- 사용자 관심 애니 목록을 통한 콘텐츠 기반 AI 굿즈 추천 시스템 개발
- 안정적인 UX 제공을 위한 경매 관련 알림 + 경매 타이머 구현
- Database: MySQL, MyBatis
- Backend: Java 17, Eclipse/IntelliJ, Springboot 3.4.12 / Gradle
- etc: Spring Security, Jwt, Cookie/Session, Swagger
- AI
- HuggingFace Inference API (텍스트 임베딩 생성)
- Pinecone API (Vector DB 저장 및 유사도 검색)
- External API
- TMDB API (애니 관련 정보)
- PortOne API (결제 연동)
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FU-101 | 회원가입 | - 관심 애니메이션 등록 - 가입 시 기본 지갑 자동 생성 - 신규 가입 이벤트 골드 충전 (50,000 골드) |
회원 가입 페이지 |
| FU-102 | 이메일 인증 | - SMTP 기반 인증 | 회원가입 페이지 |
| FU-103 | 로그인 | - Spring Securtiy JWT 기반 인증 - Access Token 발급 |
로그인 페이지 |
| FU-104 | 프로필 조회 | - 닉네임, 프로필 포스터 조회 기능 제공 | 마이페이지 |
| FU-105 | 프로필 수정 | - 닉네임, 프로필 포스터 변경 기능 제공 | 마이페이지 |
| FU-106 | 관심 애니메이션 | - TMDB API를 연동하여 사용자가 좋아하는 애니메이션 등록 및 수정 (AI 추천의 입력 데이터) - 필수 3개 등록 |
마이페이지 |
| FU-107 | 회원 탈퇴 (= 비활성화) |
(1) 탈퇴 가능 상태 - 경매 대기 상태 굿즈 등록글 삭제 시 - 예치금 unlock 상태(최고입찰가가 아닌 상태) 가상화폐로 돈 반환 시 (2) 처리 요청 상태 - 경매 진행 상태: 낙찰 or 패찰 된 후 탈퇴 요청 - 예치금 lock 상태: 낙찰 or 패찰 된 후 탈퇴 요청 |
마이페이지 |
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FA-201 | 굿즈 등록 | [등록 정보] - 제목, 굿즈 관련 애니메이션 선택, 굿즈 종류(카테고리) - 상품 설명, 이미지(다중 업로드) 등록 [경매 조건 설정] - 시작가 (필수) - 상한가/즉시구매가 (선택) - 최초 경매 기간 (기본 값 2~3일 설정, 최댓값 14일) |
굿즈 등록 페이지 |
| FA-202 | 굿즈 목록 조회 (검색/필터) |
- 필터(상태/카테고리/정렬) 기능 - 검색(애니메이션/제목) 기능 - 무한 스크롤(=더보기) 기능 |
굿즈 목록 페이지 |
| FA-203 | 굿즈 글 상세 조회 | - 제목, 굿즈 관련 애니메이션, 굿즈 종류, 상품 설명, 이미지 - 시작가, 상한가/즉시구매가, 경매 타이머, 찜 수 - 참여자 리스트, 경매 상태, 판매자 닉네임, 댓글 리스트 확인 |
굿즈 상세 페이지 |
| FA-204 | 경매 등록 내용 수정 | - 경매 대기 상태일 때만 수정 가능 | 굿즈 수정 페이지 |
| FA-205 | 등록 경매 글 삭제 | - 내가 등록한 경매 글 삭제 기능 (*경매 대기/완료/종료 후) | 굿즈 상세 페이지 |
| FA-206 | 거래 중지(패찰=종료) | - 판매자가 거래중지 가능 - 거래중지 시 Lock 상태의 참여자에게 예치금 환원 - 거래중지 알림 발송 |
굿즈 상세 페이지 |
| FA-207 | 경매 상태 관리 | - 경매 대기: 등록 직후 - 경매 진행: 첫 구매자(입찰) 발생 시점부터 - 낙찰(=완료): 입찰자 있는 상태로 경매기간 종료 또는 즉시 구매가 입찰 시 - 패찰(=종료): 판매자가 거래 중지를 누를 경우 또는 입찰자 없는 상태로 경매기간 종료 시 |
서비스 로직 단 |
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FB-301 | 입찰 가격 제시 | - 첫 입찰인 경우 시작가 이상 거래제한금액(500만원) 이하 - 현재 최고가보다 높고 거래제한금액(500만원) 이하인 금액 제시 - 보유한 코인 이상의 금액은 제시 불가 - 입찰 시 경고 알림창 (입찰 후 취소 불가) |
굿즈 상세 페이지 (내 입찰 버튼) |
| FB-302 | 입찰 금액 Lock | - 입찰 시 구매자가 입찰한 금액을 즉시 예치금으로 Lock - 낙찰 시 코인 부족 방지 및 고의적 경매 방해 방지 |
서비스 로직 단 |
| FB-303 | 이전 예치금 해제 | - 최고입찰자 변경 시 기존 입찰자 예치금 Unlock 및 환원 | 서비스 로직 단 |
| FB-304 | 경매 타이머 | - Javascript 기반 경매 카운트다운 | 굿즈 상세 페이지 |
| FB-305 | 경매 자동 종료 | - (1) 설정된 경매 기간 만료 시 - (2) 상한가(즉시구매가) 도달 시 |
서비스 로직 단 |
| FB-306 | 거래 정산(낙찰) | - (1) 구매자에게 예치금 전송 (판매자에게 이동) - (2) 판매자(낙찰자) 거래 낙찰 알림 전송 |
서비스 로직 단 |
| FB-307 | 참여자 리스트 조회 | - 경매에 참여한 참여자들의 이름과 금액 리스트 조회 | 굿즈 상세 페이지 |
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FC-401 | 자산 현황 | - 잔액 및 예치금 총액 조회 | 마이페이지 > 자산 현황 |
| FC-402 | 골드 충전 | - PortOne API 를 활용한 결제 연동 기능 | 마이페이지 > 자산 현황 내 골드 충전하기 버튼 |
| FC-403 | 거래 내역 상세 (날짜 필터링) |
- 입찰, 예치금(lock/unlock), 낙찰, 환불 등 거래 내역 전체 기록 - 시작일자, 종료일자 필터링 기능 - 무한 스크롤(=더보기) 기능 |
마이페이지 > 거래 내역 |
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FD-501 | 굿즈 찜 기능 | - 사용자가 관심 굿즈를 찜하여 목록 관리 (찜 리스트) | 굿즈 상세, 굿즈 목록, 마이페이지 |
| FD-502 | 경매 알림 | - (1) 경매 마감 1시간 전 알림 - (2) 최고입찰 갱신 시 알림 발송 |
서비스 로직 단 |
| FD-503 | 거래 알림 | - 낙찰/패찰(=거래중지)/정산 결과 알림 발송 | 서비스 로직 단 |
| FD-504 | 목록 및 상태 | - 알림 목록 조회 | 모든 페이지 우측 상단 |
| FD-505 | 등록 경매 글 조회 | - 내가 등록한 경매 글 조회 기능 | 마이페이지 |
| FD-506 | 참여 경매 글 조회 | - 내가 참여한 경매 글 조회 | 마이페이지 |
| FD-507 | 관심 애니 목록 조회 | - 관심 애니메이션 목록 조회 | 마이페이지 |
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FE-601 | [User] 관심 애니 설정 및 벡터 동기화 |
- TMDB API를 통해 애니메이션 검색 및 선택 - 애니메이션 메타데이터(제목, 줄거리, 장르) 조회 - 유저 프로필에 관심 애니메이션 ID 최대 3개 매핑 저장 |
회원가입 페이지 |
| FE-602 | [AI] 사용자 관심 애니 기반 애니 추천 (Vector Similarity) |
- 사용자가 선택한 관심 애니 3개의 텍스트 정보를 기반으로 추천 애니메이션 목록 생성 - 추천 결과는 캐싱하여 재사용함으로써 응답 속도 개선 - 프로필에서 관심 애니 변경 시 추천 캐시를 무효화하고 재추천수행 - 사용자 선호 우선순위를 반영한 가중 평균 방식으로 취향 벡터 생성 - 코사인 유사도가 높은 애니메이션 Top-N 추천 |
마이페이지 |
| FE-603 | [AI] 추천 애니 기반 굿즈 추천 | - AI 추천 애니메이션과 연관된 굿즈 목록 조회 - 판매자가 본인인 굿즈 및 이미 찜한 굿즈 제외 - 이미 낙찰/패찰(종료)된 경매 굿즈는 추천 대상에서 제외 |
메인페이지 |
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FG-701 | 댓글 작성 (Parent) | - 로그인한 사용자가 굿즈 상세 페이지 하단에 문의/의견 작성 | 굿즈 상세 페이지 |
| FG-702 | 대댓글 작성 (Child) | - 1차 댓글에 대한 답글 작성 기능 - 대댓글까지만 허용 (대대댓글 불가) |
굿즈 상세 페이지 |
| FG-703 | 댓글 목록 조회 | - 계층형 구조 노출 - 작성일 순 오름차순 정렬, 대댓글은 들여쓰기로 구분 |
굿즈 상세 페이지 |
| FG-704 | 댓글 수정 | - 작성자 본인만 수정 가능 | 굿즈 상세 페이지 |
| FG-705 | 댓글 삭제 | - 작성자 본인만 삭제 가능 - 대댓글이 남아있는 부모댓글이 삭제된 경우 (삭제된 댓글입니다.)로 표기 - 대댓글이 없는 부모댓글 or 대댓글일 경우 바로 삭제 처리 |
굿즈 상세 페이지 |
| FG-706 | 판매자 식별 표시 | - 댓글 작성자가 해당 굿즈 '판매자'일 경우 닉네임 옆 배지 표시 | 굿즈 상세 페이지 |
| ID | 항목 | 상세 설명 | 페이지 |
|---|---|---|---|
| FF-801 | 신고 접수 | - 신고된 게시물/사용자 관리 - 신고 버튼 클릭 시 alert으로 표기만 함 (UI 구현) |
굿즈 상세 / 프로필 |
| FF-802 | 환불 요청 문의 | - 모든 페이지 하단에 전화번호 남기는 형식으로 처리 | 모든 페이지 하단 |
getcha/
├── frontend/ # getchaFE 참고
│
├── backend/ # getchaBE (Spring boot)
│ ├── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── mappers/
│ │ │ ├── getchaDDL.sql
│ │ │ ├── application-local.yml
│ │ │ └── application.yml
│ │ └── java/
│ │ └── com/ssafy/backend
│ │ ├── users/
│ │ │ ├── controller/
│ │ │ ├── service/
│ │ │ | └── impl/
│ │ │ └── model/
│ │ │ ├── mapper
│ │ │ ├── user
│ │ │ ├── responseDTO
│ │ │ └── requestDTO
│ │ ├── auth/
│ │ ├── goods/
│ │ ├── bid/
│ │ ├── comment/
│ │ ├── notification/
│ │ ├── wallet/
│ │ ├── wish/
│ │ ├── anime/
│ │ ├── payment/
│ │ ├── ai/
│ │ ├── common/
│ │ │ ├── enums/
│ │ │ ├── exception/
│ │ │ ├── service/
│ │ │ | └── impl/
│ │ │ └── config/
│ │ └── BackendApplication.java
│ ├── build.gradle
└── README.md
-
헤더
구성 요소
- Getcha 글자 & 로고
- 알림 확인
- 로그인 / 로그아웃
- 로그인 한 상태일 때 (마이페이지, 찜)
- 로그아웃 한 상태 일 때 (로그인 버튼, 회원가입 버튼)
-
회원 가입
구성 요소
- 닉네임
- 이름
- 비밀번호
- 이메일 (= 아이디)
- 프로필 이미지 (관심 애니 첫번째 포스터이미지)
- 관심 애니메이션 (필수)
- 계좌 은행 및 계좌번호
-
메인 페이지
구성 요소
- 상단 : 로그인한 유저에게 맞는 AI 추천 상품
- 중앙 : 상품 카테고리 별 리스트 (+ALL 포함)
-
굿즈 리스트 페이지
구성 요소
- 필터(상태 / 카테고리 / 정렬) & 검색
- 굿즈 등록 버튼 (로그인 시)
- 굿즈 카드
- 경매 상태 뱃지 (진행 중, 완료, 종료)
- 굿즈 대표 이미지
- 제목
- 현재 입찰가 금액
- 대기 및 입찰자 없이 종료된 경우 시작가 금액
- 판매자 닉네임 / 애니메이션 제목 / 카테고리
- 경매 타이머 / 찜 수
-
굿즈 등록 / 수정 페이지
구성 요소
- 제목 / 애니메이션 / 카테고리 / 설명
- 굿즈 이미지 업로드 (다중 업로드 가능/ 1개이상 필수)
- 시작가 (필수)
- 상한가/즉시구매가 (선택)
- 최초 경매기간 (2일 ~ 14일 중 택 / 필수)
-
굿즈 상세 페이지
구성 요소
- 수정 / 삭제 버튼 (경매 참여자가 없는 경우에만)
- 경매 중지 버튼 (진행 중인 경우에만)
- 제목
- 판매자 닉네임 / 프로필 이미지
- 경매 상태 뱃지 (진행 중, 완료, 종료)
- 시작가 / 즉시 구매가 금액
- 현재 입찰가 금액 (진행 중 일 경우에만)
- 경매 참여자 리스트 (순위)
- 경매 타이머 (남은 경매 기간)
- 설명 / 애니메이션 제목 / 카테고리 / 찜 갯수
- 댓글
- 2차 대댓글까지만 가능
-
마이페이지
구성 요소
- 찜 리스트
- 등록 경매 글 리스트
- 참여 경매 글 리스트
- 거래 내역 리스트
- 잔액 현황
- 관심 애니메이션 리스트
- 정보 수정 (닉네임, 좋아하는 애니메이션)
