database.png

기술 선택지 핵심 기술 선택 근거 리서치
In-Memory Database Redis,
Memcached 다양한 데이터 구조
Memcached는 단순한 키-값 저장소이지만 Redis는 단순한 키-값 저장소를 넘어서 리스트, 셋, 해시, 정렬된 셋(sorted set), 비트맵, 하이퍼로그로그 등 다양한 데이터 구조를 지원합니다. 이를 통해 게임 서버는 리더보드, 사용자 인벤토리, 채팅 기록, 실시간 게임 상태 등을 효율적으로 관리할 수 있습니다.

영속성 및 데이터 복구 Memcached는 메모리 기반의 휘발성 저장소로, 서버가 재시작되면 모든 데이터가 사라지지만 Redis는 데이터를 디스크에 저장하는 영속성 기능을 제공합니다. RDB 스냅샷이나 AOF(Append-Only File) 로그 방식을 사용하여 데이터가 서버 재시작 후에도 복구될 수 있습니다. 이는 게임 서버에서 중요한 사용자 데이터(예: 진행 상황, 리더보드)를 안전하게 보관하는 데 매우 유용합니다.

높은 성능과 확장성 Memcached도 빠르지만, Redis는 더 많은 기능을 제공하면서도 비슷한 성능을 유지하므로, 보다 복잡한 게임 서버 요구사항을 처리하는 데 적합합니다. | ‣ https://aws.amazon.com/ko/elasticache/redis-vs-memcached/ https://redis.io/comparisons/redis-vs-memcached/ https://scalegrid.io/blog/redis-vs-memcached/ | | Redis Client | ioredis, node-redis | 기능 및 성능 node-redis는 기본적인 Redis 명령어를 지원하고 단순한 설정과 사용과 성능 최적화가 제한적입니다. 반면 ioredis는 대부분의 Redis 명령어 및 고급 기능을 지원하고, 커넥션 풀링 및 자동 재연결을 제공하고, 클러스터링 및 Sentinel 지원과 고성능 및 대규모 애플리케이션에 적합합니다.

Docker Container 환경 호환성 node-redis는 일부 Docker 환경에서 호환성 문제가 있고, 네트워크 문제나 연결 끊김 시 자동 복구 기능이 제한됩니다. 반면 ioredis는 Docker 환경에서 더 나은 호환성을 제공하고, 네트워크 문제 시 자동 복구 기능을 제공합니다. 이후 안정적인 Reids 연결을 유지해줍니다. | https://stackshare.io/stackups/npm-ioredis-vs-npm-redis ‣ | | Database | MySQL, mongoDB | ACID 트랜잭션 지원 게임 서버에서는 데이터 일관성이 매우 중요합니다. 예를 들어, 플레이어의 경험치 증가, 아이템 거래와 같은 작업은 반드시 원자적으로 수행되어야 하며, 중간에 실패할 경우 데이터가 손상되면 안 됩니다. MySQL은 이러한 요구 사항을 충족시킬 수 있습니다.

명확한 스키마 정의를 통해 데이터 구조화된 방식으로 저장 이는 게임 서버의 데이터 관리에서 예측 가능성과 안정성을 제공합니다. 데이터의 형태가 명확히 정의되기 때문에 데이터 검증이 용이하고, 잘못된 데이터가 저장되는 것을 방지할 수 있습니다. | ‣ https://aws.amazon.com/ko/compare/the-difference-between-mongodb-vs-mysql/ https://www.mongodb.com/ko-kr/resources/compare/mongodb-mysql | | Concurrency Issue | BullQueue, rabbitmq, kafka | 비동기 처리의 필요성 게임 서버에서는 로그 기록, 외부 API 호출, 데이터베이스 갱신과 같은 비동기 작업을 자주 처리해야 합니다. 이러한 작업을 큐에 넣고 비동기적으로 처리함으로써 메인 서버의 성능을 최적화할 수 있습니다.

복잡한 작업 관리 Bull Queue는 작업 우선순위, 지연, 재시도 등의 기능을 제공하여 복잡한 작업을 효율적으로 관리할 수 있습니다.

부하 분산 서버에 부하가 많이 걸리는 작업을 여러 워커에 분산하여 처리할 수 있어, 서버 성능과 안정성을 높일 수 있습니다. | ‣ https://optimalbits.github.io/bull/ https://npmtrends.com/bull-vs-bullmq-vs-kafka-vs-kafka-node-vs-kafkajs-vs-rsmq-vs-ts-nats |