$cat projects/1/README.md

Melodiket

2024.08 - 2024.103FE 3BEBackend Developer삼성 청년 SW 아카데미 11기 특화 프로젝트

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

Spring BootJavaMySQLRedisSolidityNode.jsNext.jsTypeScript
▸ github
$cat overview.md

스마트 컨트랙트 기반 밴드 공연 티케팅 서비스로, 불투명하고 불공정한 수익 분배 문제와 암표 피해를 해결하기 위해 블록체인 기술을 도입한 프로젝트입니다.

이 프로젝트는 3-tier 아키텍처 설계를 통해 프레젠테이션, 비즈니스, 데이터 레이어를 명확히 분리하고, 스마트 컨트랙트를 활용한 자동화된 수익 분배 시스템을 구축했습니다. 공연 관리자는 공연 등록 시 공연장, 뮤지션, 보너스 각각의 금액을 설정하고, 관객은 예매 시 최애 밴드를 선택하여 응원할 수 있으며, 공연 후 자동으로 투명하게 수익이 분배됩니다.

블록체인의 투명성을 통해 모든 거래 내역이 블록체인에 기록되어 누구나 확인할 수 있도록 하여, 수익 분배의 공정성을 보장합니다. 또한 관객이 관람한 공연을 기념할 수 있도록 NFT 기반 개인화된 포토카드를 제작할 수 있으며, 최애 밴드의 싸인을 포토카드에 포함시켜 고유한 추억을 만들어갈 수 있습니다.

백엔드 개발자로서 Spring Security를 활용한 인증/인가 시스템, 전역 예외 처리 및 에러 핸들링, Redisson 기반 분산 락을 통한 동시성 제어 구현, 공연 계약의 복잡한 비즈니스 로직(뮤지션 승인, 계약 상태 관리, 정산 처리) 등을 구현하여 엔터프라이즈급 백엔드 시스템의 핵심 기능들을 경험할 수 있었던 프로젝트입니다.

$cat role.md
$cat highlights.md
3-tier 아키텍처 및 DB 최적화

프레젠테이션, 비즈니스, 데이터 레이어를 명확히 분리하여 유지보수성과 확장성을 향상시켰습니다. 공연 목록 조회 시 쿼리 튜닝 및 인덱스 최적화를 통해 성능을 향상시켰고, 실행 계획 분석을 통해 N+1 문제를 해결하고 fetch join을 최적화했습니다. 또한 커서 기반 페이징을 적용하여 대량 데이터 조회 성능을 개선했습니다.

스마트 컨트랙트 연동

Web3j를 통해 Java 백엔드와 이더리움 블록체인을 연동하여 자동화된 수익 분배 시스템을 구현했습니다.

전역 예외 처리

일관된 에러 응답 형식을 제공하는 전역 예외 처리 핸들러를 구현하여 개발 및 디버깅 효율성을 향상시켰습니다.

$cat challenges.md
problem복잡한 공연 계약 상태 관리

solution상태 패턴(State Pattern)을 적용하여 공연 계약의 다양한 상태(대기, 승인, 확정, 취소 등)를 명확히 모델링했습니다. 각 상태별로 허용되는 작업과 상태 전이 규칙을 정의하여 비즈니스 로직의 복잡성을 관리하고 코드의 가독성을 향상시켰습니다.

problem블록체인 트랜잭션 처리 및 동기화

solutionWeb3j를 활용하여 스마트 컨트랙트와 백엔드를 연동하고, 트랜잭션 상태를 추적하는 메커니즘을 구현했습니다. 블록체인 트랜잭션이 비동기적으로 처리되는 특성을 고려하여 트랜잭션 해시를 저장하고 주기적으로 상태를 확인하는 방식으로 데이터 일관성을 유지했습니다. 트랜잭션 실패 시 보상트랜잭션(Compensating Transaction) 패턴을 적용하여 DB 상태를 롤백하고, 이벤트 기반 아키텍처를 통해 블록체인과 DB 간의 동기화 문제를 해결했습니다.

problem전역 예외 처리 및 에러 응답 표준화

solutionSpring의 @ControllerAdvice를 활용한 전역 예외 처리 핸들러를 구현하여 모든 예외를 일관된 형식으로 처리했습니다. 커스텀 예외 클래스를 정의하고 적절한 HTTP 상태 코드와 에러 메시지를 매핑하여 클라이언트가 쉽게 이해하고 처리할 수 있는 에러 응답을 제공했습니다.

problem인증/인가 시스템 보안 강화

solutionSpring Security와 JWT를 결합하여 토큰 기반 인증 시스템을 구현했습니다. 역할 기반 접근 제어(RBAC)를 적용하여 사용자 역할(관객, 뮤지션, 공연장 관리자)에 따라 접근 가능한 API를 세밀하게 제어했습니다. 또한 토큰 만료 시간과 리프레시 토큰 메커니즘을 구현하여 보안성을 강화했습니다.

problem하이브리드 데이터베이스 구조 관리

solution구조화된 데이터(사용자, 공연 정보, 계약)는 MySQL에, 비구조화된 데이터(로그, 메타데이터)는 MongoDB에 저장하는 하이브리드 구조를 채택했습니다. 각 데이터베이스의 특성에 맞는 데이터 저장 및 조회 전략을 수립하고, 트랜잭션 경계를 명확히 하여 데이터 일관성을 보장했습니다.

$ls architecture/
시스템 아키텍처
시스템 아키텍처

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

NFT 포토카드 분배
NFT 포토카드 분배

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

주요 기능
주요 기능

데이터베이스 엔티티 관계도: 사용자, 공연, 계약, 티켓 등 핵심 엔티티 간의 관계 구조

$ls screenshots/
공연 등록
공연 등록
공연 승인
공연 승인
내 공연
내 공연
공연 목록
공연 목록
찜 리스트
찜 리스트
공연 예매
공연 예매
모바일 티켓
모바일 티켓
티켓 스캔
티켓 스캔
트랜잭션
트랜잭션
포토카드 제작
포토카드 제작
포토카드 공유
포토카드 공유
포토카드 카카오톡 공유
포토카드 카카오톡 공유
$cat results.md
우수 프로젝트 수상

SSAFY 11기 2학기 특화 프로젝트에서 삼성전자 우수상을 수상했습니다.

블록체인 기반 투명한 수익 분배

스마트 컨트랙트를 활용한 자동 수익 분배 시스템 구현. 이더리움 네트워크에 직접 구현하여 거래 내역 투명성 및 공정성을 보장합니다.

NFT 개인화된 포토카드

관객이 관람한 공연을 기념할 수 있도록 NFT 포토카드를 제작할 수 있으며, 최애 밴드의 싸인을 포함시켜 개인화된 추억을 만들어갈 수 있습니다. IPFS 분산 저장소를 활용하여 영구적으로 저장됩니다.

$cat retrospection.md
잘 됐던 것

3-tier 아키텍처로 각 레이어의 책임을 명확히 분리하여 유지보수성과 확장성을 크게 향상시킬 수 있었습니다. 전역 예외 처리 핸들러Spring Security를 활용한 보안 시스템으로 안정적인 API를 설계했습니다.

공연 계약의 복잡한 비즈니스 로직을 상태 패턴과 전략 패턴으로 깔끔하게 구현했고, 스마트 컨트랙트와 백엔드 연동을 통해 블록체인 기술을 실제 서비스에 적용해볼 수 있었습니다.

개선할 것

프로젝트 초기 단계에서 블록체인 트랜잭션 처리에 대한 충분한 조사가 부족했습니다.

블록체인 네트워크의 지연 시간, 가스 비용, 트랜잭션 처리 시간 등 실제 운영 환경의 제약사항을 깊이 고려하지 못했고, 스마트 컨트랙트와 백엔드 간의 데이터 동기화 문제나 트랜잭션 실패 시 롤백 처리에 대한 대응 방안을 체계적으로 설계하지 못했습니다.

배운 것

블록체인 도입 전에 실제 운영 환경에서의 성능 벤치마크를 진행하고, 다양한 블록체인 네트워크(이더리움, 폴리곤 등)의 특성을 비교 분석하여 프로젝트에 최적화된 네트워크를 선택하는 프로세스를 도입하겠습니다.

스마트 컨트랙트를 배포하기 전에 테스트넷에서 충분한 부하 테스트를 진행하고, 가스 최적화 기법을 적용하여 운영 비용을 사전에 예측하는 분석을 수행하겠습니다.

블록체인 특성상 발생할 수 있는 불확실성을 고려하여, 비블록체인 대안 솔루션도 함께 검토하고 하이브리드 아키텍처를 설계하는 방법을 시도해보고 싶습니다.