- 문장 게임
영화 대사, 명언 등 다양한 문장이 주어집니다.
주어진 문장을 누구보다 빠르고 정확하게 입력하여 게임에서 승리하세요! - 코드 게임
다양한 언어의 코드가 주어집니다.
주어진 코드를 누구보다 빠르고 정확하게 입력하여 게임에서 승리하세요! - 단어 게임
화면의 단어들을 입력하여 점수를 획득하세요.
가장 많은 단어를 입력한 사람이 승자가 됩니다!
박영재 | 김대휘 |
---|---|
zerozae | marooo326 |
실시간 게임
상대방의 위치를 실시간으로 확인하며 긴장감 넘치는 게임을 즐겨보세요.실시간 접속자
누가 접속해있는지 확인하고 함께 게임을 즐겨보세요!랭킹
전체, 모드별 랭킹을 통해 순위를 확인해보세요!초대 코드
랜덤한 코드로 친구를 초대할 수 있어요!
- 1차 개발: 2024.02.02 ~ 2024.03.24
- 2차 개발: 2024.04.01 ~ 진행중
기능 | 기술 선택 이유 및 근거 |
---|---|
게임방 리스트 조회 | - Polling은 구현이 간단하지만, 실시간 반응을 위해 서버에 짧은 간격으로 요청을 반복해야 하며, 이로 인해 서버 부하가 증가할 수 있음 - Long Polling은 실시간성을 향상시킬 수 있으나, 구현 복잡성이 증가하며 서버 리소스 관리가 더 까다로워질 수 있음 - WebSocket의 경우 실시간성을 달성할 수 있으나, 게임방 리스트 조회 기능에서는 양방향 통신을 필요로 하지 않음 - 따라서 클라이언트와 서버 간의 단방향 통신을 위한 기술인 Server-Sent Events (SSE)를 채택하였음 |
게스트 관리 | - 일회성 게스트는 MySQL과 같은 RDB에 저장될 필요가 없다고 판단 - Redis의 경우, MySql에 비해 접근 속도가 빠르고 다양한 데이터 형식을 저장할 수 있음 - 또한, 자체적으로 만료시간을 설정할 수 있음 - 따라서 Redis(운영환경에서는 Elaticache)를 활용하여 게스트를 관리하기로 결정 |
실시간 게임 정보 | - 실시간 게임 정보는 짧은 주기로 많은 삽입&업데이트 연산이 발생함 - Redis는 key를 이용해 빠른 접근이 가능하고, 싱글 스레드 구조로 인해 동시성 문제에 있어서도 상대적으로 안전 - 따라서 Redis(운영환경에서는 Elaticache)를 활용하여 실시간 게임 정보를 관리하기로 결정 |
웹소켓 메세지 브로커 | - 여러 대의 동시에 운영 될 시, 인메모리 브로커를 사용하면 브로커 간의 메세지 동기화가 이루어지지 않음 - 따라서 Kafka를 외부 메세지 브로커로 도입하여 모든 메세지가 중앙에서 처리될 수 있도록 구성 |
랭킹 | - 작업 실행 시간이 고정되어 있고 해당 시간에 실행되는 로직이 단순함을 고려하여, 프로젝트의 규모에 맞는 Spring Scheduler를 사용 |