1. 프로젝트 소개

이번 프로젝트는 단순한 게임 구현을 넘어, 실시간성보안에 초점을 맞춘 **'UNO Multiplayer Game'**입니다. 2~4인이 실시간으로 방을 만들어 카드 게임을 즐길 수 있으며, Spring BootReact라는 현대적인 기술 스택을 활용해 안정적인 게임 환경을 구축했습니다.

2. 사전 요구사항 (Prerequisites)

이 프로젝트를 실행하기 위해 필요한 개발 환경입니다.

  • Backend: Java 21 이상
  • Frontend: Node.js 18 이상

3. 주요 핵심 기능

  • 🌐 WebSocket(STOMP) 기반 실시간 동기화
    • Pub/Sub 모델을 활용해 게임 내 모든 액션(카드 내기, 드로우, 턴 변경)을 실시간으로 모든 플레이어에게 전송합니다.
  • 🛡️ 서버 사이드 룰 엔진 (UnoRuleEngine)
    • 클라이언트가 아닌 서버에서 모든 게임 로직을 관리합니다. 특히 손패 정보를 서버에서만 보관하여 클라이언트 변조를 통한 치트를 원천 차단했습니다.
  • 🃏 UNO 오리지널 룰 완벽 구현
    • 숫자 카드는 물론 SKIP, REVERSE, +2, WILD, +4 등 특수 카드를 모두 구현했습니다.
    • 2인 플레이 시 REVERSE가 SKIP으로 작동하는 세부 룰까지 적용되어 있습니다.
  • 🏠 로비 및 방 시스템
    • 6자리 초대 코드를 통해 친구와 같은 방에 입장하여 게임을 시작할 수 있습니다.

4. 기술적 의사결정 및 아키텍처

  • Java 21 Record 활용: 카드(Card) 정보를 불변 값 객체인 record로 선언하여 데이터 무결성을 보장했습니다.
  • In-Memory Store: 게임 데이터의 휘발성을 고려하여 ConcurrentHashMap 기반의 메모리 저장소를 구현, Redis 없이도 멀티스레드 환경에서 안전하게 데이터를 관리합니다.
  • Zustand 상태 관리: 프론트엔드에서는 가벼운 Zustand를 사용해 WebSocket으로 넘어오는 실시간 게임 상태를 효율적으로 처리합니다.

5. 프로젝트 구조

  • Backend: UnoRuleEngine(도메인 로직), GameService(흐름 제어), STOMP Controller 등으로 분리되어 유지보수가 용이합니다.
  • Frontend: Lobby, WaitingRoom, GameBoard로 이어지는 직관적인 페이지 구조와 useWebSocket 커스텀 훅을 통한 통신 관리가 특징입니다.

6. 마치며

단순한 토이 프로젝트를 넘어 WebSocket 통신과 서버 측 유효성 검사 로직을 깊게 고민해 볼 수 있었던 프로젝트였습니다. 실시간 멀티플레이어 게임 개발의 메커니즘을 이해하고 싶은 분들에게 좋은 참고 사례가 될 것입니다.

📌 GitHub Repository: https://github.com/wjsskagur/uno-game

 

반응형

1. 프로젝트 소개

아이온2를 즐기는 유저들이라면 매일, 매주 반복되는 퀘스트 관리에 번거로움을 느껴본 적이 있을 것입니다. **'AION2 Quest Checker'**는 캐릭터별로 퀘스트 완료 현황을 한눈에 관리하고, 파티 모집 및 서버 랭킹 확인까지 지원하는 종합 웹 서비스입니다.

단순히 체크만 하는 도구를 넘어, AI를 활용한 공지 요약과 공식 홈페이지 크롤링을 통한 캐릭터 인증 등 유저 편의성을 극대화하는 데 초점을 맞추어 개발했습니다.

2. 주요 핵심 기능

이 프로젝트에서 공을 들인 주요 기능들을 소개합니다.

  • 🛡️ 퀘스트 체커 & 자동 초기화
    • 캐릭터별로 일일/주간 퀘스트 진행률을 시각적으로 표시합니다.
    • 퀘스트별로 초기화 시간을 개별 설정할 수 있으며, 기본적으로 매주 수요일 오전 5시에 자동 초기화되도록 구현했습니다.
  • 🤖 Claude API 기반 공지 자동 요약
    • 아이온2 공식 공지사항을 3시간마다 수집합니다.
    • 수집된 방대한 양의 공지를 Claude API(Haiku 모델)를 통해 핵심 3줄로 요약하여 유저들에게 제공합니다.
  • 🔗 Jsoup 기반 캐릭터 소유권 인증
    • 보안과 신뢰를 위해 공식 홈페이지의 게시글 댓글을 크롤링하여 실제 캐릭터 소유주인지 검증하는 프로세스를 도입했습니다.
  • 📢 파티 모집 게시판
    • 1차·2차 카테고리 구조를 통해 효율적인 파티 매칭이 가능하며, 관리자가 유연하게 카테고리를 관리할 수 있습니다.
  • 📊 서버 랭킹 서비스
    • 등록된 캐릭터들의 데이터를 기반으로 서버별 전투력 및 레벨 랭킹을 실시간으로 제공합니다.

3. 기술 스택 및 아키텍처

성능과 확장성을 고려하여 최신 기술 스택을 활용했습니다.

  • Backend: Java 17, Spring Boot 3.3, Spring Data JPA
  • Security: Spring Security (JWT Stateless 인증), OAuth2 (카카오, 네이버, 구글)
  • Frontend: React 18, Vite, React Router v6
  • Database: MariaDB 10.11
  • Infrastructure: AWS (EC2 t4g, RDS, S3, CloudFront)
  • CI/CD: GitHub Actions, AWS CodeDeploy

4. 개발 포인트: 인프라와 보안

운영 환경에서의 안정성을 위해 AWS ap-northeast-2(서울) 리전에 배포를 진행했습니다.

  • 보안 관리: DB 비밀번호, API 키 등 민감한 정보는 AWS SSM Parameter Store를 통해 안전하게 관리했습니다.
  • 효율적인 배포: GitHub Actions와 CodeDeploy를 연동하여 코드 수정 시 자동으로 EC2에 배포되는 CI/CD 파이프라인을 구축했습니다.
  • 정적 파일 서빙: React 빌드 파일은 S3와 CloudFront를 통해 전 세계 어디서든 빠르게 접속할 수 있도록 구성했습니다.

5. 마치며

이번 프로젝트를 통해 실제 게임 유저들이 겪는 불편함을 기술적으로 해결해 보는 즐거운 경험을 할 수 있었습니다. 특히 외부 API(Claude)와 크롤링 기술을 적절히 조합하여 서비스의 완성도를 높인 점이 기억에 남습니다.

더 자세한 코드와 설정 방법은 아래 GitHub 레포지토리에서 확인하실 수 있습니다.

📌 GitHub Repository: https://github.com/wjsskagur/AION2_QuestCheck

 

반응형

+ Recent posts