Melodiket
스마트 컨트랙트 기반 밴드 공연 티케팅 서비스. 불투명한 수익 분배 문제와 암표 피해를 해결하기 위해 블록체인 기술을 활용한 투명한 티케팅 시스템을 제공합니다. 공연장 관리자, 뮤지션, 관객 모두를 위한 통합 플랫폼입니다.

프로젝트 개요
스마트 컨트랙트 기반 밴드 공연 티케팅 서비스로, 불투명하고 불공정한 수익 분배 문제와 암표 피해를 해결하기 위해 블록체인 기술을 도입한 프로젝트입니다.
이 프로젝트는 3-tier 아키텍처 설계를 통해 프레젠테이션, 비즈니스, 데이터 레이어를 명확히 분리하고, 스마트 컨트랙트를 활용한 자동화된 수익 분배 시스템을 구축했습니다. 공연 관리자는 공연 등록 시 공연장, 뮤지션, 보너스 각각의 금액을 설정하고, 관객은 예매 시 최애 밴드를 선택하여 응원할 수 있으며, 공연 후 자동으로 투명하게 수익이 분배됩니다.
블록체인의 투명성을 통해 모든 거래 내역이 블록체인에 기록되어 누구나 확인할 수 있도록 하여, 수익 분배의 공정성을 보장합니다. 또한 관객이 관람한 공연을 기념할 수 있도록 NFT 기반 개인화된 포토카드를 제작할 수 있으며, 최애 밴드의 싸인을 포토카드에 포함시켜 고유한 추억을 만들어갈 수 있습니다.
백엔드 개발자로서 Spring Security를 활용한 인증/인가 시스템, 전역 예외 처리 및 에러 핸들링, Redisson 기반 분산 락을 통한 동시성 제어 구현, 공연 계약의 복잡한 비즈니스 로직(뮤지션 승인, 계약 상태 관리, 정산 처리) 등을 구현하여 엔터프라이즈급 백엔드 시스템의 핵심 기능들을 경험할 수 있었던 프로젝트입니다.
나의 역할
3-tier 아키텍처 설계 및 핵심 비즈니스 로직 구현
Spring Security 기반 JWT 인증/인가 시스템 구현
전역 예외 처리 핸들러 및 에러 핸들링 구현
Redisson 기반 분산 락을 통한 동시성 제어 구현
공연 계약 주요 비즈니스 로직 구현 (뮤지션 승인/거절, 계약 상태 관리, 정산 처리)
상태 패턴 및 전략 패턴을 활용한 계약 상태 전이 로직 개발
스마트 컨트랙트와 백엔드 연동 (Web3j 활용)
RESTful API 설계 및 구현
기술적 도전과제
복잡한 공연 계약 상태 관리
상태 패턴(State Pattern)을 적용하여 공연 계약의 다양한 상태(대기, 승인, 확정, 취소 등)를 명확히 모델링했습니다. 각 상태별로 허용되는 작업과 상태 전이 규칙을 정의하여 비즈니스 로직의 복잡성을 관리하고 코드의 가독성을 향상시켰습니다.
블록체인 트랜잭션 처리 및 동기화
Web3j를 활용하여 스마트 컨트랙트와 백엔드를 연동하고, 트랜잭션 상태를 추적하는 메커니즘을 구현했습니다. 블록체인 트랜잭션이 비동기적으로 처리되는 특성을 고려하여 트랜잭션 해시를 저장하고 주기적으로 상태를 확인하는 방식으로 데이터 일관성을 유지했습니다.
전역 예외 처리 및 에러 응답 표준화
Spring의 @ControllerAdvice를 활용한 전역 예외 처리 핸들러를 구현하여 모든 예외를 일관된 형식으로 처리했습니다. 커스텀 예외 클래스를 정의하고 적절한 HTTP 상태 코드와 에러 메시지를 매핑하여 클라이언트가 쉽게 이해하고 처리할 수 있는 에러 응답을 제공했습니다.
인증/인가 시스템 보안 강화
Spring Security와 JWT를 결합하여 토큰 기반 인증 시스템을 구현했습니다. 역할 기반 접근 제어(RBAC)를 적용하여 사용자 역할(관객, 뮤지션, 공연장 관리자)에 따라 접근 가능한 API를 세밀하게 제어했습니다. 또한 토큰 만료 시간과 리프레시 토큰 메커니즘을 구현하여 보안성을 강화했습니다.
하이브리드 데이터베이스 구조 관리
구조화된 데이터(사용자, 공연 정보, 계약)는 MySQL에, 비구조화된 데이터(로그, 메타데이터)는 MongoDB에 저장하는 하이브리드 구조를 채택했습니다. 각 데이터베이스의 특성에 맞는 데이터 저장 및 조회 전략을 수립하고, 트랜잭션 경계를 명확히 하여 데이터 일관성을 보장했습니다.
프로젝트 성과
SSAFY 11기 2학기 특화 프로젝트에서 삼성전자 우수상을 수상했습니다.
스마트 컨트랙트를 활용한 자동 수익 분배 시스템 구현. 이더리움 네트워크에 직접 구현하여 거래 내역 투명성 및 공정성을 보장합니다.
관객이 관람한 공연을 기념할 수 있도록 NFT 포토카드를 제작할 수 있으며, 최애 밴드의 싸인을 포함시켜 개인화된 추억을 만들어갈 수 있습니다. IPFS 분산 저장소를 활용하여 영구적으로 저장됩니다.
기술 선택 이유
Spring Boot 3
엔터프라이즈급 애플리케이션 개발을 위한 검증된 프레임워크로, RESTful API 개발과 의존성 주입을 통한 느슨한 결합 설계가 가능합니다. 특히 Spring Security를 통한 보안 강화와 JPA를 통한 데이터 영속성 관리가 효율적입니다.
Spring Security
JWT 기반 인증 및 역할 기반 접근 제어(RBAC)를 구현하여 사용자 인증과 권한 관리를 안전하게 처리합니다. 필터 체인을 통해 요청 레벨에서의 보안 검증을 수행하고, 다양한 엔드포인트에 대한 세밀한 접근 제어가 가능합니다.
Redis & Redisson
Redisson을 활용하여 분산 락 기반 동시성 제어를 구현했습니다. 동시에 여러 사용자가 같은 좌석을 예매하려고 할 때 발생하는 동시성 문제를 해결하기 위해 Redis 기반 분산 락을 적용하여 좌석 예매의 원자성을 보장하고, 데이터 일관성을 유지합니다. Redisson의 분산 락 기능을 통해 분산 환경에서도 안전하고 신뢰성 있는 좌석 예매 시스템을 구축했습니다.
Solidity & Web3j
Solidity로 스마트 컨트랙트를 작성하여 블록체인 상에서 자동화된 수익 분배 로직을 구현했습니다. Web3j를 통해 Java 백엔드와 이더리움 블록체인 네트워크를 연동하여 스마트 컨트랙트 배포 및 호출 기능을 구현했습니다.
Node.js & IPFS
Node.js를 활용하여 IPFS 노드 서버를 구축하고, NFT 포토카드의 메타데이터와 이미지를 분산 저장소에 저장했습니다. IPFS의 해시 기반 콘텐츠 주소 지정을 통해 영구적인 데이터 저장 및 접근이 가능합니다.
시스템 아키텍처
시스템 아키텍처

3-tier 아키텍처 기반의 전체 시스템 구조: 프론트엔드(Next.js), 백엔드(Spring Boot), 블록체인(Solidity), 분산 저장소(IPFS)의 통합 구조
시퀀스 다이어그램

공연 계약 및 예매 프로세스의 전체 시퀀스: 공연 등록부터 뮤지션 승인, 티케팅, 입장 처리까지의 전체 흐름
ERD

데이터베이스 엔티티 관계도: 사용자, 공연, 계약, 티켓 등 핵심 엔티티 간의 관계 구조
KPT 회고
Keep
3-tier 아키텍처로 각 레이어의 책임을 명확히 분리하여 유지보수성과 확장성을 크게 향상시킬 수 있었습니다. 전역 예외 처리 핸들러와 Spring Security를 활용한 보안 시스템으로 안정적인 API를 설계했습니다.
공연 계약의 복잡한 비즈니스 로직을 상태 패턴과 전략 패턴으로 깔끔하게 구현했고, 스마트 컨트랙트와 백엔드 연동을 통해 블록체인 기술을 실제 서비스에 적용해볼 수 있었습니다.
Problem
프로젝트 초기 단계에서 블록체인 트랜잭션 처리에 대한 충분한 조사가 부족했습니다.
블록체인 네트워크의 지연 시간, 가스 비용, 트랜잭션 처리 시간 등 실제 운영 환경의 제약사항을 깊이 고려하지 못했고, 스마트 컨트랙트와 백엔드 간의 데이터 동기화 문제나 트랜잭션 실패 시 롤백 처리에 대한 대응 방안을 체계적으로 설계하지 못했습니다.
Try
블록체인 도입 전에 실제 운영 환경에서의 성능 벤치마크를 진행하고, 다양한 블록체인 네트워크(이더리움, 폴리곤 등)의 특성을 비교 분석하여 프로젝트에 최적화된 네트워크를 선택하는 프로세스를 도입하겠습니다.
스마트 컨트랙트를 배포하기 전에 테스트넷에서 충분한 부하 테스트를 진행하고, 가스 최적화 기법을 적용하여 운영 비용을 사전에 예측하는 분석을 수행하겠습니다.
블록체인 특성상 발생할 수 있는 불확실성을 고려하여, 비블록체인 대안 솔루션도 함께 검토하고 하이브리드 아키텍처를 설계하는 방법을 시도해보고 싶습니다.
프로젝트 정보
기술 스택
스크린샷
공연 등록

공연 승인

내 공연

공연 목록

찜 리스트

공연 예매

모바일 티켓

티켓 스캔

트랜잭션

포토카드 제작

포토카드 공유

포토카드 카카오톡 공유
