개요
앞서 프로젝트를 진행하면서 항상 문제가 되었던건 회원 인증에 대한 내용이었다.
어차피 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를 배운다고 생각하고 열심히 구현을 해 봐야겠다.
구현 단계
프로젝트는 아래와 같은 순서로 구현을 해볼 예정이다.
- Qt 클라이언트 구조, 게임 로직, UI 구현
- AI 싱글플레이 (휴리스틱, 미니맥스)
- C++ 멀티플레이어 서버, 네트워크 동기화
- 랭킹, 채팅, 기타 기능 구현
- 프로젝트 회고
최대한 애자일하게 2주간의 스프린트를 설정하고 단계별로 구현한다면 10주 데드라인을 잡아 프로젝트를 마감해 볼 생각이다. 물론 취업 준비도 병행해 가면서 해야하기 때문에 스프린트가 뒤로 밀리거나 하는 불상사가 발생할 가능성이 많아 보이긴 한다...
'프로젝트 > [윈도우 어플리케이션] blokus-online' 카테고리의 다른 글
[blokus-online] 멀티플레이어 보드게임 프로젝트 개요 (1) | 2025.06.26 |
---|