프로젝트/[윈도우 어플리케이션] blokus-online

[blokus-online] 멀티플레이어 보드게임 시스템 아키텍처 구성

마달랭 2025. 6. 26. 22:27

개요

앞서 프로젝트를 진행하면서 항상 문제가 되었던건 회원 인증에 대한 내용이었다.

어차피 SSAFY라는 교육기관 내에서 프로젝트를 진행하기에 배포 시 사람들의 참여를 유발하기 위해선 가장 간단한 인증 절차가 유리했다.

따라서 OAuth기반의 Google, SSAFY로그인을 사용하거나 그냥 이메일 형식의 정규식을 검증을 거친 후 가입을 성사시켰다. 하지만 이런 방식의 문제점은 비밀번호를 까먹었을때 찾아줄 수가 없다!

비대칭 형식의 암호 알고리즘을 사용했더니 이메일을 통해 사용자를 식별해 줄 수가 없었다. 따라서 이번 프로젝트는 살짝 고민이 되는 부분이 있다. 실시간 랭킹 시스템을 도입하곤 싶은데 그럼 실제 사람을 제대로 식별해 주어야 할 것 같기 때문!

 

그래서 인증 절차는 아직 고민이 되는 부분에 있다. 하기엔 프로젝트 개발에 앞서 간단하게 사용할 기술스택과 인프라 요소를 구상해봤다.

 

 

서버

  • 언어 : C++20
  • 네트워크 : Boost.asio(TCP 소켓)
  • 프로토콜 : protobuf
  • 빌드 도구 : Makefile
  • 패키지 관리 : vcpkg
  • 로깅 : spdlog
  • 데이터베이스 : PostgreSQL
  • 캐시 : Redis
  • 아키텍처 : 계층형 구조 (Presentation → Business → Data Access → Infrastructure)

 

클라이언트

  • 언어 : C++20
  • 프레임워크 : Qt5
  • 그래픽 : QGraphicsView + QGraphicsScene (벡터 기반 폴리오미노 렌더링)
  • 빌드 도구 : qmake
  • 패키지 관리 : vcpkg
  • 타겟 플랫폼 : Windows 주 타겟, 크로스플랫폼 지원(희망)

 

웹 서비스(미정)

  • 언어 : javascript
  • 프레임워크 : vue.js, Spring Boot
  • 이메일 서비스 : 무료로 사용 가능한거...
  • 기능 : 회원가입 인증, 비밀번호 재설정

 

개발 환경

  • IDE : Visual Studio 2022
  • 버전 관리 : Git
  • 저장소 : GitHub
  • CI/CD : GitActions
  • 인프라 : AWS or 랙, Docker

 

도전 과제

  • 실시간 네트워크 동기화 (턴 관리, 블록 배치 브로드캐스팅)
  • 폴리오미노 벡터 렌더링 및 충돌 검사
  • AI 알고리즘 최적화 (제한 시간 내 최적해)
  • 확장 가능한 서버 아키텍처

이전 게임 시스템에선 RDB검증 및 매칭 관련 동기화를 진행해 주었다. 따라서 해당 부분은 쉽게 구현할 수 있을 것 같다.

하지만 실제 게임 세션 내에서 실시간 동기화 처리는 구현해 보지 못했기 때문에 서버 사이드에선 이 부분을 중점적으로 볼 것 같다.

물론 가장 어려운 점은 클라이언트 개발이겠지만 이 또한 Qt를 배운다고 생각하고 열심히 구현을 해 봐야겠다.

 

 

구현 단계

프로젝트는 아래와 같은 순서로 구현을 해볼 예정이다.

  1. Qt 클라이언트 구조, 게임 로직, UI 구현
  2. AI 싱글플레이 (휴리스틱, 미니맥스)
  3. C++ 멀티플레이어 서버, 네트워크 동기화
  4. 랭킹, 채팅, 기타 기능 구현
  5. 프로젝트 회고

최대한 애자일하게 2주간의 스프린트를 설정하고 단계별로 구현한다면 10주 데드라인을 잡아 프로젝트를 마감해 볼 생각이다. 물론 취업 준비도 병행해 가면서 해야하기 때문에 스프린트가 뒤로 밀리거나 하는 불상사가 발생할 가능성이 많아 보이긴 한다...

728x90