본문 바로가기

카테고리 없음

[프로젝트] Java 플랫폼 서비스

INTRODUCE

해당 프로젝트는 Java SpringBoot 프레임워크를 사용하여 개발하는 프로젝트로 게임과 연동하여 아이템을 블록체인 ERC-20 / Native Coin을 이용하여 거래하는 플랫폼 서비스를 제공하는 프로젝트입니다. 프로젝트 특성상 여러 게임사와 여러 블록체인을 연동할 수 있도록 개발하였습니다.

게임 아이템을 상품으로 판매하여 ERC-20 / Native Coin을 화폐로 구매하고 판매자|구매자 에게 아이템과 재화를 정산해주는 서비스는 판매 아이템에 대한 정확함과 재화 지불에 대한 검증이 제일 중요한 요소 중 하나였습니다. 이를 위해 여러 비즈니스 로직이 제안되었고 채택된 제안을 바탕으로 서비스를 설계하였습니다.

프로젝트 목표
- MSA 아키텍쳐 기반의 설계
- 대용량 트래픽을 대비한 설계
- Transactional을 활용한 로직 진행 중 데이터 유실 방지
- 게임 / 블록체인 기능 연동

SKILL

Language : Java
FrameWork : SpringBoot
Infrastructure: Docker, MySQL, Redis, AWS, Kubernetes

담당업무

담당 업무
- Admin API를 통해 DB CRUD 기능 구현 및 Redis 데이터 관리
- Redis 데이터 최적화
- 블록체인 API 서비스 연동 테스트
- 비동기 처리에 의한 CallBack API 구현
- 배치 프로그램 기능 추가

Project Overview

 

 

서비스는 '아이템 거래소 플랫폼' 으로 연동해야 할 서비스가 많았습니다.

1. 플랫폼을 이용하는 외부 게임 개발사와의 연동

2. 블록체인을 연동해주는 내부 서비스 API 연동

3. 아이템 거래소를 직접 접속하는 플랫폼 웹 홈폐이지와의 연동

외부 게임 개발사와의 연동은 API 명세서를 작성하여 게임 개발사에 제공되는 API와 제공 되어야 할 API를 작성하여 공유하는 방식으로 진행하였습니다.

해당 이미지는 예시를 위해 작성된 이미지입니다. 실제 업무에서 사용되는 이미지는 제공될 수 없음을 알려드립니다.

 

블록체인과의 연동은 블록체인 API 서비스와 연동을 통해 블록체인 Transaction을 검증하고 판매자에게 판매 대금을 지급하였습니다. 판매 대금을 정산하는 과정에서 CrossChain 플랫폼 등을 연동하여 원하는 블록체인의 재화로 판매 금액을 받을 수 있도록 연동하였습니다.

마지막으로 거래소 플랫폼을 직접 접속하기 위해 포탈을 연동하였으며 이 과정에서 게임 Login 기능과 이를 통해 Bapp 연동 기능이 추가되었습니다.

 

거래소 플랫폼의 특징상 대부분의 서비스를 중계하는 플랫폼인만큼 연동해야 할 서비스가 많았으며 서비스들을 연동하면서 발생하는 데이터를 관리해야 했습니다. 가장 우선시 되어야 할 데이터 관리는

1. 판매 아이템 갯수 관리

 Redis를 이용하여 Message Queue 방식처럼 LPush RPop 을 활용하여 재고 갯수를 관리하였습니다.

2. 정산을 위한 데이터 관리

 DB 데이터를 기준으로 Batch 서비스를 도입, 블록체인 Transaction 검증을 통해 정산 이벤트를 발생하였습니다.

3. 아이템 거래 내역에 관한 History 관리

 발생하는 데이터를 DB에 저장하고, 서비스에 문제가 발생시 Transactional 특성상 롤백 & Redis 복원 작업을 하였습니다.

 

또, 서비스는 블록체인과 게임을 연동하는 만큼 양쪽에서 발생하는 트래픽을 동시에 감당해야 했습니다. 이를 위해 트래픽을 분산하기 위한 정책을 도입하였습니다.

1. Master / Slave DB 의 분할.

 Read는 SlaveDB를 통해서 작업하고, Write, Delete, Update 등의 Query는 Master DB 를 통해서 작업합니다.

2. Redis A-Side 전략 도입.

빠른 이해를 돕기 위해 '뤼튼' 을 통해 Redis A-Side 전략을 설명합니다.

3. 배치 / 비동기 처리를 통한 병행 처리

 여러 서비스를 연동하고 API를 호출하는 만큼 응답시간에 따른 서비스 과부화를 최소화 하고자 비동기 API를 호출하고

결과값을 CallBack API로 받아 비동기 처리를 진행하였습니다. 또, Transaction 검증을 위해 배치 프로그램을 활용하여 병행 처리하였습니다.


 

프로젝트 개발 경험 정리

🛠 초기 개발 방식 및 설계

  • 신규 도메인 기반 서비스로, 초기에는 워터폴 방식으로 개발 진행
  • 기획서를 기반으로 ERD 및 시퀀스 다이어그램 작성, 누락된 기능을 기획과 비교해 점검
  • WBS를 작성하여 업무를 세분화하고, Jira를 활용해 팀 간 진행 상황을 공유

🔄 기획 변경 대응 프로세스

  • 사내 기획 변경 발생 시 변경된 기획서를 기반으로 팀 내 회의 진행
  • 변경점에 필요한 리소스를 파악하고, 기획/FE/DevOps 등 관련 부서와 협의하여 반영

🎮 게임 서비스 연동 지연에 대한 대응

  • 게임 서비스는 병행 개발 중이라 실제 연동이 어려운 상황
  • 게임 담당자와 협의한 API 명세서를 기반으로 Fake API 구현, 내부 서비스 개발을 병행


❗ API 연동 실패 처리 로직

  • 다양한 외부 서비스 연동 특성상 API 호출 실패 대응이 중요
  • N회 재시도 후에도 실패 시 Spring Batch로 후처리
  • Admin BackOffice에 환불 기능 및 알림 기능 구현, 관리자가 직접 확인/처리 가능하도록 구성


📦 게임 아이템 재고 및 거래 처리

  • Redis를 활용한 실시간 재고 관리, 거래 발생 시 DB를 통한 데이터 정합성 검증
  • 판매 중: Order 테이블 / 판매 완료: Sale 테이블
  • Redis → DB 조회 순서로 데이터 정확성 확보