1. 프로젝트 개요
TT 란 ?
누구(Who)가 아닌 기술을 신뢰하는 Klaytn 기반 티켓팅 서비스
Trust Ticket, TT는 블록체인 기술을 이용한 티켓팅 서비스를 제공합니다.
TT 이용자는 이벤트를 기획할 수도 있고, 다른 이벤트를 참여할 수 있습니다.
이벤트 참여를 하면 각 이벤트에서 발행하는 토큰을 받을 수 있고, 이는 입장티켓 또는 응모당첨권으로 사용합니다.
배포 링크
- Github: https://github.com/codestates/BEB-04-ZeroTeb
- Mobile : 다운링크 (스토어 배포 심사 중)
- Server - POST API Document
- WEB - https://tt.beeimp.com
2. 프로젝트 소개
토큰 이코노미
- 왜 필요한가요?
- 이벤트가 돌연 취소
- 상황 - 소비자는 이벤트 기획측 또는 플랫폼에서 알 수 없는 이유로 콘서트 취소에 대해 일방적인 통보를 받았습니다.
- 문제 - 소비자는 일방적인 통보를 받았음에도 보상을 받을 수 없습니다.
- 티켓 사재기
- 상황 - 암표상들은 개인의 이익을 위해 이벤트에서 티켓을 구매 후 몰래 재판매합니다.
- 문제 - 암표상들은 공정한 티켓 획득 기회를 미리 사재기를 하여 웃돈을 붙여 표를 판매하기 때문에 위법하다고 할 수 있습니다.
- 플랫폼의 서비스 종료
- 상황 - 이용하던 거래 플랫폼이 어떠한 이유로 유지할 수 없어 서비스를 종료했습니다.
- 문제 - 이용하던 거래 플랫폼 서비스가 종료되면서 소비자의 모든 기록이 삭제되면서 지금까지의 활동이 확인할 수 없습니다.
- 각 플랫폼의 제약
- 상황 - 이용하던 거래 플랫폼이 아닌 타 거래 플랫폼을 이용한다.
- 문제 - 타 거래 플랫폼에서는 이전에 이용하던 거래 플랫폼에서 참여했던 콘서트 내역을 가져올 수 없거나 참여했던 실물 콘서트 티켓을 모두 등록해야하는 불편함을 가집니다.
- 이벤트가 돌연 취소
- 무엇을 얻을 수 있나요?
- 소비자는 이벤트가 갑자기 취소되더라도 티켓 가격의 103%를 보상 받을 수 있습니다.
- 이벤트 기획자는 이벤트를 등록하면서 티켓으로 판매하여 얻을 수 있는 총액의 5%(보증금 3%, 수수료 2%)를 지불합니다.
- 보증금은 이벤트 성공시 이벤트 기획자에게 반환됩니다.
- 수수료는 주로 컨트랙트 실행, 서버 유지비에 사용됩니다.
- 이벤트가 최소되면 소비자는 대해 티켓의 103%를 보상 받습니다.
- 이벤트 기획자의 보증금이 피해 보상금으로 사용합니다.
- 이벤트 기획자는 이벤트를 등록하면서 티켓으로 판매하여 얻을 수 있는 총액의 5%(보증금 3%, 수수료 2%)를 지불합니다.
- 소비자는 공정한 티 켓케득 기회를 얻을 수 있습니다.
- 이벤트가 종료될 때까지 토큰 거래가 불가능합니다.
- SBT와 NFT를 적절히 사용하여 참여에 대한 티켓의 주요 목적을 달성합니다.
- 이벤트가 종료될 때까지 토큰 거래가 불가능합니다.
- 소비자는 이용하던 티켓 플랫폼이 종료되더라도 모든 기록을 잃지 않습니다.
- 데이터베이스가 손상되더라도 Klaytn Network에서 복구 가능합니다.
- 만약, 해당 플랫폼의 서비스가 종료되더라도 모든 기록은 Klaytn Network에 투명하게 저장되어 토큰형 티켓의 거래 또는 확인이 가능합니다.
- 이벤트 기획자는 이용하던 여러 티켓 플랫폼이 통합적으로 VIP를 관리할 수 있습니다.
- 소비자는 이벤트가 갑자기 취소되더라도 티켓 가격의 103%를 보상 받을 수 있습니다.
- 누가 할 수 있나요?
- 카카오 계정이 있다면 누구든 사용 가능하고 누구든 될 수 있습니다.
- 언제, 어디서 사용할 수 있나요?
- 모바일 기기에 종류에 상관없이 언제, 어디서든 이용 가능합니다.
- React-Native로 앱이 제작되어 Android, ios에 상관없이 사용 가능합니다.
- 언제, 어디서든 이벤트를 등록할 수 있습니다.
- PC, Mobile 모두 지원합니다.
- 언제, 어디서든 티켓을 구매, 응모, 인증, 확인 가능합니다.
- 모바일 기기에 종류에 상관없이 언제, 어디서든 이용 가능합니다.
- 어떻게 사용할 수 있나요?
- 카카오톡 앱을 설치합니다. ( 이미 다 있으실 거에요 )
- 앱 서비스에서 클립을 가입합니다.
- TT 앱을 설치합니다. ( 앱 스토어, 플레이 스토어 등 배포 예정입니다! )
- TT 앱을 실행하여 이벤트 등록부터 티켓 구매, 응모, 조회, 인증, 확인까지 자유롭게 이용 가능합니다.
Klaytn 사용한 이유
- 카카오 클립으로 누구나 간단하게 지갑 생성 가능합니다.
- 복잡한 지갑 생성 과정을 거치지 않고, 국민 메신저 서비스로 자리 잡은 카카오톡 앱이 있다면 사용 가능한 클립을 사용하기 위해 채택했습니다.
- 속도와 가격 측면에서 용이합니다.
- 가격 - 트랜잭션에서 발생하는 가스비가 1~20원 수준으로 매우 저렴합니다.
- 속도 - 이론적 측면이 아닌 실제 4000 TPS의 처리량을 가집니다
WorkFlow
기능별 시연 영상
- 랜딩 페이지 (WEB)
- Klip 로그인
- Klip을 이용한 개발Klip에서 request key를 받아 서버로 전송하고, 서버에서 Klip과 통신해서 사용자를 인증합니다. 인증된 사용자에게 JWT 토큰을 발행하여, TT의 기능을 사용할 수 있도록 합니다.
- 현재 Klip API에서 테스트 넷을 지원하지 않습니다. 그래서 Klip의 일부 기능들을 서버에서 구현하여 Klip API의 역할을 대체합니다.
- Klip을 이용한 개발Klip에서 request key를 받아 서버로 전송하고, 서버에서 Klip과 통신해서 사용자를 인증합니다. 인증된 사용자에게 JWT 토큰을 발행하여, TT의 기능을 사용할 수 있도록 합니다.
- 이벤트 등록(모바일)
- 간편한 이벤트 등록
- 스마트폰으로 간단하게 이벤트를 등록할 수 있고, 많은 데이터를 등록하는 사람들을 위해 웹으로도 등록할 수 있습니다.
- 토큰 발행
- 이벤트가 등록되면, 컨트랙트는 토큰을 서버에 발행합니다. 발행된 토큰은 구매를 통해 얻을 수 있습니다.
- 이벤트 등록(웹)
- 이벤트 티켓 구매/응모
- 티켓 구매
- 서버는 티켓을 구매한 사용자에게 티켓을 전송합니다. 사용자가 쉽게 구매할 수 있도록 Klip API를 사용하여, 편의성을 높였습니다.
- 티켓 응모
- 응모한 사용자의 주소를 컨트랙트에 보관합니다. 이벤트 응모 가능 기간이 지나면 서버가 자동으로 이벤트 추첨을 컨트랙트에 요청합니다. 이벤트 추첨은 응모자 중 랜덤으로 당첨자를 선정합니다.
- QRcode 생성
- 간편한 티켓 생성
- QR 코드는 앱에서 티켓을 클릭할 때 발행되고, 서버는 해당 QR에 유효 기한을 부여합니다. QRcode는 nonce 데이터를 가지고 있습니다.
- 간편한 티켓 생성
- QRcode 유효성 확인
- 티켓 확인하기서버는 해당 이벤트의 QRcode인지, 유효 기한이 남았는지 검사합니다.
- QR Reader는 QRcode에서 읽은 데이터(nonce, event_id)를 서버로 전송합니다.
- 티켓 확인하기서버는 해당 이벤트의 QRcode인지, 유효 기한이 남았는지 검사합니다.
- 검색
- 원하는 이벤트 찾기
- 사용자는 Keyword가 포함한 이벤트를 검색할 수 있습니다.
- 인기 있는 이벤트 (개발 진행 중)이후 같은 키워드가 들어오면 count값을 올려주고, count가 가장 많은 키워드를 인기 검색어로 정합니다.
- 사용자가 검색한 키워드 중 검색 결과가 유효한 데이터를 DB에 저장합니다.
- 내 주변
- 나와 가까운 이벤트 찾기
- 현재 위치의 좌표를 서버로 보냅니다. 서버는 Map API를 통해 사용자의 지역을 찾고, 이벤트의 좌표와 거리를 구해 사용자에게 출력해 줍니다.
- 나와 가까운 이벤트 찾기
3. 기술 스택
4. 관련 문서
시나리오 기반 WorkFlow
App Prototype
5. 내가 수행한 역할
Project Management
Notion
을 통해 프로젝트 전체 work-flow 기획Discord
에서Github Webhook
를 연결하여Github bot
연결
Blockchain
KIP17
을 활용한Solidity
컨트랙트 작성- 이벤트 생성
- 이벤트 토큰 민팅, 거래, 응모
- 이벤트 당첨자 추첨 - 랜덤함수 구현
- 이벤트 종료
Back-End
- DB 생성 및 원격 연결 -
Mongo Atlas
- JWT 인증 기능 구현 -
Nest.js
@Guard
- DB 정보 추가 및 업데이트 Scheduling 구현 -
Nest.js @Cron
- 컨트랙트 실행 API 구현 -
Caver-js
- 서버 자동 배포
Azure VM
위에Docker
,Jenkins
설치Github Webhook
에Jenkins
설정Jenkins Pipeline
작성
Front-End (WEB)
- Lending Page
- Create Event Page
- Created View Page
6. 회고
초기 목표(시작하게 된 목표)
- 프로젝트 초기 목표
- 투자에 과열된 NFT 또는 SBT에 대한 새로운 인식 제공
- 누구나 이벤트 성공 여부에 대한 최대 보상 제도 도입
- 누구나 이벤트를 생성 수 있고 혜택을 받을 수 있는 서비스 구현
- 팀장으로써 목표
- 팀원들 간의 심리적 갈등이 없이 프로젝트가 즐겁게 시작하여 마무리
- 저를 포함한 팀원이 프로젝트에서 얻고자하는 방향 및 결과물 완성
- 각 포지션의 개발
- 프로젝트 이슈 관리
- 개인 목표
- 모두 피해 받지 않는 토큰 이코노미 설계
- 티켓팅 컨트랙트 작성 및 배포
현실(실제 어떤 원인에 의해 문제가 발생했고 해결했는가?)
- 각 포지션에만 집중할 수 있는 환경
- 상황 - 백엔드에서 개발한 API를 통해 프론트에서 테스트를 진행해야 합니다.
- 문제 - 프론트에서 API를 테스트하기 위해서는 백엔드 서버를 로컬에 다운받아 서버를 실행시켜 테스트해야하는 어려움이 있었습니다.
- 해결 - 클라우드 서비스 중 Azure를 이용하여 VM을 생성하여 Docker와 Jenkins를 설치했습니다. Jenkins를 프로젝트 Github Webhook과 연결하여 push 이벤트가 발생하면 빌드하여 실행할 수 있도록 설정했습니다. 이를 통해, 서버에서는 API를 개발 후 push하면 프론트에서는 해당 API를 사용할 수 있었습니다.
- 카카오 클립 메인넷만 지원
- 상황 - 앱에서 로그인, 이벤트 등록, 티켓 구매, 응모 등 카카오 클립 지갑을 통해 컨트랙트에 요청해야 했습니다.
- 문제 - 테스트 환경에서 진행하는 프로젝트에서 카카오 클립이 테스트넷을 지원하지 않았습니다.
- 해결 - 가스비가 발생하지 않는 로그인 인증 부분만 카카오 클립을 사용하고, 이외의 클립 API는 서버에서 자체적으로 테스트용 지갑을 생성 후 매칭하여 서버 API를 통해 대체 했습니다.
- 당첨자를 뽑기 위한 랜덤 함수 구현
- 상황 - 이벤트 응모를 진행하면 당첨자를 뽑는 추첨을 진행해야 했습니다.
- 문제 - 이중 반복문을 사용하여 suffle을 구현하게 되면 시간 복잡도 n^2으로 높은 가스비가 발생할 수 있었습니다.
- 해결 - 해시 함수를 통해 랜덤한 값을 응모자 수의 나머지 값으로 랜덤한 인덱스를 생성하고 순차적으로 Swap했습니다. 이를 통해, 시간 복잡도 n을 달성하여 가스비 절감과 속도 성능을 향상 시킬 수 있었습니다.
후기(지속, 개선, 포기할 것은 무엇인가, 아쉬운 점)
- 포기 - 개인적으로 설계했던 시나리오 수정
- 내용 - 팀원을 뽑기 전, 개인적으로 설계했던 시나리오를 수정했습니다.
- 포기한 이유 - 팀원 모두 프로젝트를 재밌게 진행하기 위해 시나리오를 수정했습니다. 포괄적으로 제시했던 아이디어에서 개인적으로 했으면 좋겠던 시나리오가 있었는데, 그 시나리오를 포함하여 다른 팀원들이 생각하는 시나리오를 수합하여 투표를 진행하여 최종적으로 하나의 시나리오를 채택하게 되었습니다.
- 지속 - 각 포지션에 해당하는 독립적인 작업 부여
- 내용 - POSTMAN의 Mock server 기능을 활용하여 프로젝트 진행 간 백엔드와 프론트에 대한 기능 개발 유무와 상관없이 테스트 API를 사용하여 간섭없이 각 개발을 진행할 수 있었습니다.
- 지속하려는 이유 - 이전에 프로젝트를 진행할 때는 백엔드에서 API를 개발할 때까지 데이터를 가져올 수 없어 더미 데이터를 추가하고 진행했었습니다. 이 과정에서 더미 데이터 위치에 API를 연결해야하는 추가 작업이 필요 했었는데, 추가 작업을 진행하지 않아 생산성을 향상시킬 수 있었습니다.
- 아쉬운점 - 진행 상황 관리 부족
- 내용 - 일일 2회 회의를 진행하면서 이슈 사항을 정리하면서 프로젝트를 관리했습니다.
- 아쉬운 이유 - 프로젝트 기한이 다가오면서 팀원들의 일일 프로젝트 작업을 제대로 확인하지 못했습니다. 또한, 다들 지쳐가고 와중에 팀장으로써 제대로 독려를 못한 것 같아 아쉬웠습니다.
- 개선 - 지속적인 진행 상황 확인 및 관리
- 내용 - 아쉬운점과 같습니다.
- 개선하려는 이유 - 프로젝트 결과물이 개인적으로 기대하는 만큼 UI가 그려지지 못해 너무 아쉬웠습니다. 팀장으써 각 팀원의 컨디션과 진행 상황을 제대로 파악하지 못했기 때문이라고 생각합니다. 바쁠수록 돌아가라는 말이 있습니다. 추후 프로젝트를 진행하게 된다면, 다음 사항을 생각하면서 개선하려고 합니다.
- 기본 기능, 주요 기능, 고급 기능, 추가 기능 등 기능들을 단계별 세분화 개발
- 지속적으로 결과물을 평가하고 일정을 조정하여 프로젝트를 관리
'Blockchain > Project' 카테고리의 다른 글
[Project] Web2.0 Blockchain Community (0) | 2022.07.03 |
---|---|
[Project] OpenSea 클론코딩 (1) | 2022.06.17 |
솔리디티를 활용한 가위바위보 게임 컨트랙트 (0) | 2022.06.13 |
eth-lightwallet을 사용한 니모닉 지갑 개발 (0) | 2022.06.13 |