Melodiket
스마트 컨트랙트 기반 밴드 공연 티케팅 서비스. 불투명한 수익 분배 문제와 암표 피해를 해결하기 위해 블록체인 기술을 활용한 투명한 티케팅 시스템을 제공합니다. 공연장 관리자, 뮤지션, 관객 모두를 위한 통합 플랫폼입니다.
공연 수익 분배가 불투명하고 암표가 도는 문제를 블록체인으로 풀어본 공연 티케팅 서비스입니다.
공연 관리자가 등록할 때 공연장, 뮤지션, 보너스 몫을 정해두면 공연이 끝난 뒤 스마트 컨트랙트가 계약대로 자동 분배하고, 모든 거래가 체인에 남아 누구나 확인할 수 있습니다. 관객은 예매하며 최애 밴드를 응원할 수 있고, 관람한 공연은 최애 밴드의 싸인이 들어간 NFT 포토카드로 남습니다.
백엔드에서는 Spring Security 기반 역할별 인증, 전역 예외 처리, Redisson 분산 락을 이용한 좌석 동시 예매 제어, 그리고 뮤지션 승인부터 정산까지 이어지는 공연 계약의 상태 전이를 맡았습니다.
- ▸3-tier 아키텍처 설계 및 핵심 비즈니스 로직 구현: 공연 목록 조회 시 쿼리 튜닝 및 인덱스 최적화를 통한 성능 향상, 실행 계획 분석을 통한 N+1 문제 해결 및 fetch join 최적화, 커서 기반 페이징으로 대량 데이터 조회 성능 개선
- ▸Spring Security 기반 JWT 인증/인가 시스템 구현
- ▸전역 예외 처리 핸들러 및 에러 핸들링 구현
- ▸같은 좌석 중복 판매 차단: 공연 생성 시 좌석 행을 미리 만들고 구매 가능 상태를 둠, 컨트랙트 구매가 성공한 뒤에만 판매 처리, 같은 사용자의 중복 제출은 사용자 단위 Redisson 락으로 차단
- ▸공연 계약 주요 비즈니스 로직 구현 (뮤지션 승인/거절, 계약 상태 관리, 정산 처리)
- ▸상태 패턴 및 전략 패턴을 활용한 계약 상태 전이 로직 개발
- ▸스마트 컨트랙트와 백엔드 연동 (Web3j 활용)
- ▸RESTful API 설계 및 구현
프레젠테이션, 비즈니스, 데이터 레이어를 명확히 분리하여 유지보수성과 확장성을 향상시켰습니다. 공연 목록 조회 시 쿼리 튜닝 및 인덱스 최적화를 통해 성능을 향상시켰고, 실행 계획 분석을 통해 N+1 문제를 해결하고 fetch join을 최적화했습니다. 또한 커서 기반 페이징을 적용하여 대량 데이터 조회 성능을 개선했습니다.
Web3j를 통해 Java 백엔드와 이더리움 블록체인을 연동하여 자동화된 수익 분배 시스템을 구현했습니다.
일관된 에러 응답 형식을 제공하는 전역 예외 처리 핸들러를 구현하여 개발 및 디버깅 효율성을 향상시켰습니다.
solution상태 패턴(State Pattern)을 적용하여 공연 계약의 다양한 상태(대기, 승인, 확정, 취소 등)를 명확히 모델링했습니다. 각 상태별로 허용되는 작업과 상태 전이 규칙을 정의하여 비즈니스 로직의 복잡성을 관리하고 코드의 가독성을 향상시켰습니다.
solutionWeb3j를 활용하여 스마트 컨트랙트와 백엔드를 연동하고, 트랜잭션 상태를 추적하는 메커니즘을 구현했습니다. 블록체인 트랜잭션이 비동기적으로 처리되는 특성을 고려하여 트랜잭션 해시를 저장하고 주기적으로 상태를 확인하는 방식으로 데이터 일관성을 유지했습니다. 트랜잭션 실패 시 보상트랜잭션(Compensating Transaction) 패턴을 적용하여 DB 상태를 롤백하고, 이벤트 기반 아키텍처를 통해 블록체인과 DB 간의 동기화 문제를 해결했습니다.
solutionSpring의 @ControllerAdvice를 활용한 전역 예외 처리 핸들러를 구현하여 모든 예외를 일관된 형식으로 처리했습니다. 커스텀 예외 클래스를 정의하고 적절한 HTTP 상태 코드와 에러 메시지를 매핑하여 클라이언트가 쉽게 이해하고 처리할 수 있는 에러 응답을 제공했습니다.
solutionSpring Security와 JWT를 결합하여 토큰 기반 인증 시스템을 구현했습니다. 역할 기반 접근 제어(RBAC)를 적용하여 사용자 역할(관객, 뮤지션, 공연장 관리자)에 따라 접근 가능한 API를 세밀하게 제어했습니다. 또한 토큰 만료 시간과 리프레시 토큰 메커니즘을 구현하여 보안성을 강화했습니다.
solution구조화된 데이터(사용자, 공연 정보, 계약)는 MySQL에, 비구조화된 데이터(로그, 메타데이터)는 MongoDB에 저장하는 하이브리드 구조를 채택했습니다. 각 데이터베이스의 특성에 맞는 데이터 저장 및 조회 전략을 수립하고, 트랜잭션 경계를 명확히 하여 데이터 일관성을 보장했습니다.
공연이 끝나면 계약에 적힌 대로 공연장·뮤지션·보너스 몫이 흘러가는 경로
공연 계약 및 예매 프로세스의 전체 시퀀스: 공연 등록부터 뮤지션 승인, 티케팅, 입장 처리까지의 전체 흐름
데이터베이스 엔티티 관계도: 사용자, 공연, 계약, 티켓 등 핵심 엔티티 간의 관계 구조
SSAFY 11기 2학기 특화 프로젝트에서 삼성전자 우수상을 수상했습니다.
스마트 컨트랙트를 활용한 자동 수익 분배 시스템 구현. 이더리움 네트워크에 직접 구현하여 거래 내역 투명성 및 공정성을 보장합니다.
관객이 관람한 공연을 기념할 수 있도록 NFT 포토카드를 제작할 수 있으며, 최애 밴드의 싸인을 포함시켜 개인화된 추억을 만들어갈 수 있습니다. IPFS 분산 저장소를 활용하여 영구적으로 저장됩니다.
3-tier 아키텍처로 각 레이어의 책임을 명확히 분리하여 유지보수성과 확장성을 크게 향상시킬 수 있었습니다. 전역 예외 처리 핸들러와 Spring Security를 활용한 보안 시스템으로 안정적인 API를 설계했습니다.
공연 계약의 복잡한 비즈니스 로직을 상태 패턴과 전략 패턴으로 깔끔하게 구현했고, 스마트 컨트랙트와 백엔드 연동을 통해 블록체인 기술을 실제 서비스에 적용해볼 수 있었습니다.
프로젝트 초기 단계에서 블록체인 트랜잭션 처리에 대한 충분한 조사가 부족했습니다.
블록체인 네트워크의 지연 시간, 가스 비용, 트랜잭션 처리 시간 등 실제 운영 환경의 제약사항을 깊이 고려하지 못했고, 스마트 컨트랙트와 백엔드 간의 데이터 동기화 문제나 트랜잭션 실패 시 롤백 처리에 대한 대응 방안을 체계적으로 설계하지 못했습니다.
검증되지 않은 기술은 벤치마크와 대안 검토를 거친 뒤 넣어야 합니다. 가스 비용, 네트워크 지연, 트랜잭션 확정 시간 같은 운영 제약을 도입 전에 따져야 했습니다.
테스트넷 부하 시험, 다른 체인과의 비교, 블록체인을 쓰지 않는 대안까지 함께 놓고 고르는 절차가 도입 전에 있어야 했습니다.















