개요
암호화폐 거래소는 실시간 호가창, 체결 엔진, 지갑 관리, 관리자 백오피스, 시세 연동이 동시에 작동해야 하는 고난도 시스템이다. KODAQS는 이 모든 것을 1인 개발로 완성한 풀스택 암호화폐 거래소로, 실제 운영을 목표로 2019년에 개발되었다.
시스템은 5개의 독립 모듈로 구성된다. 사용자 거래소 웹(CRYPTO_FRONT), 관리자 백오피스(CRYPTO_ADMIN, eGovFramework), 지갑 서버(CRYPTO_WALLET, web3j), 실시간 체결 데몬(trade-server, RabbitMQ + Netty-SocketIO), C# 마켓메이커 도구가 각각 독립적으로 실행되며 MySQL과 Redis를 공유한다.
Bitcoin JSON-RPC, Ethereum web3j, XRP REST 세 가지 이기종 블록체인 프로토콜을 WalletProxyProviderFactory 패턴으로 추상화하고, TradingView 차트 라이브러리를 연동하여 전문 거래소 수준의 UI를 구현했다.
주요 기능
실시간 체결 엔진
RabbitMQ 메시지 큐로 매수/매도 주문을 수신하고, trade-server 데몬이 체결 알고리즘을 실행한다. 체결 결과는 Netty-SocketIO로 모든 접속 클라이언트에 즉시 브로드캐스트되어 실시간 호가창과 체결 내역을 갱신한다.
다중 코인 전자지갑
Bitcoin(JSON-RPC), Ethereum(web3j 4.2.0), XRP(REST)를 WalletProxyProviderFactory로 통합했다. 입금 감지는 각 블록체인 노드를 폴링하여 처리하고, 출금은 서명 후 트랜잭션을 브로드캐스트한다.
TradingView 차트 연동
전문 거래소에서 사용하는 TradingView Charting Library를 연동하여 실시간 캔들스틱 차트, 기술적 지표, 시간프레임 전환을 제공한다.
C# 마켓메이커 도구
빗썸·코인원·폴로닉스 외부 거래소의 실시간 시세를 KODAQS 거래소 호가창에 자동 주입하는 C# WinForms 도구를 별도 개발했다. 거래소 초기 유동성 문제를 해결하기 위한 접근이다.
관리자 백오피스 (eGovFramework)
전자정부프레임워크 기반 관리자에서 회원 관리, 코인 설정, 수수료 정책, 입출금 승인, 거래 통계를 관리한다.
기술적 도전
RabbitMQ + Netty-SocketIO 체결 엔진
도전: 수백 명이 동시에 주문할 때 체결 순서를 보장하면서 결과를 실시간으로 모든 클라이언트에 전달해야 했다. 해결: RabbitMQ FIFO 큐로 주문 순서를 보장하고, trade-server 데몬이 단일 스레드로 체결을 처리하여 동시성 문제를 제거했다. 체결 완료 후 Netty-SocketIO로 이벤트를 브로드캐스트한다.
이기종 블록체인 통합
도전: Bitcoin JSON-RPC, Ethereum web3j, XRP REST API가 각각 완전히 다른 인터페이스를 가진다.
해결: WalletProxyProviderFactory 패턴으로 코인 종류에 무관한 통합 인터페이스를 설계했다. 새로운 코인 추가 시 Provider 구현체만 추가하면 된다.
Spring Session + Redis 분산 세션
도전: CRYPTO_FRONT와 CRYPTO_ADMIN이 동일 사용자 세션을 공유해야 했다.
해결: spring-session-data-redis로 세션 데이터를 Redis에 저장하고, 두 서버가 동일 Redis 인스턴스를 참조한다. 세션 클러스터링으로 서버 간 세션 불일치 문제를 해결했다.
아키텍처
Multi-Module Monorepo (Spring MVC + Daemon Server) 구조다. 5개의 독립 실행 단위가 MySQL과 Redis를 공유한다.
exchange-kodaqs/
├── CRYPTO_FRONT/ # 사용자 거래소 웹 (Spring MVC 4.2.5, JSP)
│ ├── exchange/ # 거래 화면 (MainController, TradeRestController)
│ ├── trade/ # 주문/체결/차트 서비스
│ └── wallet/ # 지갑 입출금 화면
├── CRYPTO_ADMIN/ # 관리자 백오피스 (eGovFramework 3.7.0)
├── CRYPTO_WALLET/ # 지갑 서버 (Spring MVC + web3j)
├── daemon-server/
│ ├── trade-server/ # 실시간 체결 엔진 (RabbitMQ + Netty-SocketIO)
│ ├── notify-server/ # 알림 서버
│ └── cmd-tool/ # 운영 CLI 도구
├── market_maker/ # C# WinForms 시세 주입 도구
└── db_scripts/ # MySQL DDL (exchange_main/market)