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. 프로젝트 개요: 왜 만들었는가?

MMORPG 유저들에게 '일일/주간 숙제(퀘스트)' 관리는 필수적이지만 번거로운 일입니다. 단순히 체크리스트를 제공하는 것을 넘어, 공식 홈페이지의 데이터와 AI 요약 기술을 결합하여 유저의 편의성을 극대화하는 것을 목표로 프로젝트를 시작했습니다.

2. 전체 아키텍처 및 기술 스택

정적 파일(React)과 API 서버(Spring Boot)를 분리하여 확장성과 보안을 동시에 챙겼습니다.

  • Backend: Java 17, Spring Boot 3.3, Spring Data JPA
  • Security: Spring Security (JWT + OAuth2)
  • Database: MariaDB 10.11 (RDS)
  • Infrastructure: AWS (EC2, S3, CloudFront, SSM, CodeDeploy)
  • External API: Claude API (LLM), Jsoup (Crawling)

3. 핵심 기술 포인트 (Deep Dive)

① Jsoup을 활용한 신뢰성 있는 캐릭터 인증

단순히 아이디만 입력하는 방식은 타인의 캐릭터를 사칭할 위험이 있습니다. 이를 해결하기 위해 공식 홈페이지의 특정 게시글에 댓글을 작성하게 하고, 서버에서 Jsoup으로 이를 크롤링하여 소유권을 검증하는 로직을 구현했습니다. 외부 웹 데이터의 정적 분석을 통해 보안성을 높인 시도였습니다.

② Claude API 기반 공지사항 자동 요약 시스템

게임 공지사항은 길고 가독성이 떨어지는 경우가 많습니다. 3시간마다 크롤링한 데이터를 **Claude API (Haiku 모델)**에 전달하여 핵심 내용만 3줄로 자동 요약해 제공합니다. 최신 LLM 기술을 서비스 로직에 자연스럽게 녹여낸 기능입니다.

③ 스케줄링을 활용한 데이터 무결성 관리

게임의 정기 점검 시간(매주 수요일 오전 5시)에 맞춰 퀘스트 진행률이 초기화되어야 합니다. Spring의 @Scheduled 기능을 활용하여 서버 부하를 최소화하면서도 정확한 시점에 데이터 초기화가 이루어지도록 설계했습니다.


4. 인프라 및 운영 효율화

  • CI/CD 파이프라인: GitHub Actions와 AWS CodeDeploy를 연동하여 코드 수정부터 배포까지의 과정을 자동화했습니다. 이를 통해 개발 생산성을 크게 향상시켰습니다.
  • 보안 관리: DB 접속 정보나 API 키와 같은 민감한 설정값은 application.yml에 직접 노출하지 않고, AWS SSM Parameter Store를 통해 주입받아 보안 사고를 방지했습니다.
  • 비용 및 성능 최적화: EC2 t4g(Graviton2) 인스턴스를 활용하여 성능 대비 비용 효율을 극대화했습니다.

5. 기술적 도전과 해결

프로젝트 진행 중 CORS 문제OAuth2 인증 흐름에서 발생한 토큰 전달 이슈가 가장 큰 고민이었습니다.

  • 해결: React와 Spring Boot 사이의 보안 필터를 조정하고, CloudFront를 통해 도메인을 통합하거나 적절한 Proxy 설정을 통해 문제를 해결했습니다.
  • 또한, 백엔드 개발자로서 도메인 중심의 설계를 지향하며 각 서비스 계층이 명확한 책임(Responsibility)을 갖도록 리팩토링하는 과정에 공을 들였습니다.

6. 마무리하며

이번 프로젝트는 단순히 기능을 구현하는 것을 넘어, 사용자가 정말 필요로 하는 기능이 무엇인지 고민하고 이를 기술적으로 구현해 보는 귀중한 경험이었습니다. 특히 외부 API와의 연동 및 AWS를 활용한 안정적인 배포 경험은 실제 운영 가능한 서비스를 구축하는 데 큰 자산이 되었습니다.

더 자세한 코드는 저의 GitHub 레포지토리에서 확인하실 수 있습니다.

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

반응형

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