공동발명자로 참여한 특허 출원 발명 「블록체인을 기반으로 한 구매 영수증 관리 시스템 및 그 방법」에서 출발해, 제품 정보와 구매 증빙을 하나의 패스로 정리하고 필요한 정보만 공유하거나 새로운 보유자에게 이전할 수 있도록 만든 기록 서비스입니다.
내산은 특허 출원 과정에서 탐구한 문제를 개인 프로젝트로 다시 설계하고 구현한 결과물입니다.
특허 명세서의 NFT, SNS 기반 지갑, IPFS, OCR 구성을 그대로 재현하지는 않았습니다. 대신 구매 증빙의 보존, 제한적 공유, 보유 이력과 등록 후 변경 여부 확인이라는 핵심 문제를 JWT 기반 웹 API, 비공개 객체 저장소, Transactional Outbox와 최소 온체인 commitment 구조로 재해석했습니다.
| 내 패스 목록 | 외부 검증 완료 상세 | 공개 공유 패스 |
|---|---|---|
![]() |
![]() |
![]() |
2026-08-07 실환경 시연에서 패스 발급 API는 1.43초에 접수됐고, Sepolia 2 confirmations 확인까지 약 31초가 걸렸습니다. 실제 트랜잭션은 Sepolia Etherscan에서 확인할 수 있습니다.
| 등록할 정보 검토 | 패스 발급 완료 |
|---|---|
![]() |
![]() |
| 보유자 패스 상세 | 공개 공유 패스 |
|---|---|
![]() |
![]() |
화면의 상품 이미지는 서비스 시연을 위해 생성한 샘플 이미지이며 실제 판매 상품이나 운영 데이터가 아닙니다.
- JWT access token과 회전 가능한 refresh token을 사용하는 회원가입·로그인·로그아웃
- 제품 정보, 여섯 방향의 제품 사진과 구매 증빙 등록
- 증빙 확정 및 패스 발급·목록·상세 조회
- 공개 범위를 선택할 수 있는 7일 만료 공유 링크
- 공유 링크 교체·중지와 등록 파일 일치 확인
- 패스 이전 요청·수락·거절·취소 및 소유 이력 관리
- 이전 완료 시 기존 공유 링크 자동 폐기
- 내부 기록과 EVM 기술적 기록 상태 표시
- Docker Compose 기반 전체 애플리케이션 실행
- 백엔드·프론트엔드·스마트 컨트랙트·브라우저 테스트
flowchart LR
U[사용자] --> F[React Frontend]
F -->|Bearer access token + refresh cookie| B[Spring Boot API]
B --> DB[(PostgreSQL)]
B --> S3[(S3 비공개 저장소)]
B --> O[(Proof Outbox)]
O --> W[EVM Worker]
W --> C[ProofCommitmentAnchor]
P[공개 링크 방문자] --> F
내산은 블록체인을 정품 판정 수단으로 표현하지 않습니다.
- 증빙 원본과 개인정보는 온체인에 저장하지 않습니다.
- salted
bytes32commitment와 최초 anchor 시점만 기록합니다. - 등록 이후 기록의 변경 여부를 확인하는 기술적 근거로 사용합니다.
- 스마트 컨트랙트는 NFT를 발행하지 않습니다.
- 외부 기관의 정품 판정이나 법적 소유권을 보증하지 않습니다.
장애 복구 실험과 속도·가스비 측정은 Web3 트러블슈팅 사례에 정리했습니다.
- JWT Bearer 인증과 refresh token 회전·폐기를 실제 API와 통합
- S3 비공개 저장소를 사용하는 증빙 업로드·확정 흐름 구현
- Transactional Outbox로 데이터베이스 트랜잭션과 EVM 제출 분리
- RPC 실패, 중복 anchor, 전송 결과 불명확 상태와 confirmation 복구 처리
- 패스 이전의 동시성 제어와 보유자 변경·이력·공유 폐기의 원자성 보장
- 제한된 capability token을 사용하는 공개 공유와 파일 일치 확인
- 반응형 UI, SPA fallback과 Nginx API reverse proxy 구성
| 디렉터리 | 담당 영역 |
|---|---|
| backend | API, 도메인, 데이터베이스, 증빙 저장소, Web3, Docker Compose |
| frontend | React UI, JWT·refresh token API 연결, 패스 생성·공유·이전 화면 |








