🎯 기획
현재 나에게 직접 필요한 서비스를 만들어서 사용해보고 싶다고 생각했다.
컴퓨터 공학등과 같은(현재 기술 면접을 위한 암기중..) 질문을 등록하고, 실시간으로 나에게 문제를 물어봐줄 수 있으면 좋겠다고 생각했다.
(누워서도 그냥.. 심심찮게 풀어보면 너무 편할듯?!)
여러명이서 접속해서 먼저 맞추기와 같이 퀴즈 게임식으로 만들어도 재밌겠다고 생각했다.
비슷한 서비스를 찾아보면 충분히 있을법 하지만..?! 당연히 개발 성장과 낭만을 위하여(..?) 직접 만들어보고 배포하는 학습을 진행해보려고 한다.
(배포 해보자~!!!)
🎯 구상
🔗 WebSocket
자.. 그럼 이제 기획을 해봐야 하는데..!!
실시간 퀴즈 서비스..? 어떻게 해야되지?!
우선 여러사람과 퀴즈 풀이를 하기위해서 기본적인 회원 API는 필요할 것 같고,,,
퀴즈 API, 게임 API, 게임방 API 정도만 있으면 될 것 같다.
REST API 방식으로 구현하면 되는데,,,
여기서 애플리케이션의 핵심 기능인 서버가 실시간으로 클라이언트에게 퀴즈를 전송해주는 기능이 있어야 한다.
기본적으로 HTTP는 비연결성 특징을 가지는데, 지속적인 연결 유지를 위해서 별도의 기술을 사용해야 될 것 같다.
찾아보니 클라이언트 - 서버 간의 실시간 연결과 관련된 기술들이 아래와 같이 있었다...(많아!)
- Server Sent Events(SSE)
- Polling
- Long Polling
- gRPC
- WebSocket
- 기타 등등 ....!!!
실시간성 + 양방향 + 수많은 레퍼런스와 난이도(..?) 이 3가지를 기준으로 잡고 선택한 결과..
WebSocket 프로토콜을 사용하기로 하였다.
조금은 단순한 이유지만 SpringBoot와 React 프레임워크를 사용할 예정인데, 프레임워크 환경에서 WebSocket 관련 라이브러리들이 공식적으로 지원되고 있고, 실시간성/양방향에 적합할 뿐더러, 표준화된 웹 프로토콜로 브라우저 환경에서 지원이 잘 되기 때문에 웹 개발 프로젝트에 적합하다고 생각되었다.
(진짜입니다.. 아주 잘나와있다..! 궁금해서 이미 실습해보고옴 ㅋㅋㅋ)
https://spring.io/guides/gs/messaging-stomp-websocket
사실 진짜 실시간성이 중요한 게임이라면 웹 환경도 아니어야 하고, 성능을 우선시하는 통신기술을 사용했어야 하지만, 웹 개발 학습이 목표였기 때문에 WebSocket을 사용하기로 했다.
🔗 Stomp
퀴즈 애플리케이션은 사용자들이 특정한 방에 모이고, 해당 방에 존재하는 사람끼리 퀴즈 게임을 진행해야 한다.(우리의 요구사항..!)
그럼 방에 참여하면서 클라이언트가 서버에 실시간 연결을 시도해야 하고, 서버도 해당 방에 존재하는 클라이언트들을 관리해줘야 한다.
(ex 1번방에는 userId : 1, userId : 3, userId : 4 명 들어와있음.)
그래서 WebSocket중에서도 pub/sub 기능과간단한 텍스트 기반 및 텍스트 전송 양식을 제공하는 Stomp(Simple Text Oriented Messaging Protocol) 프로토콜을 사용하면 좋겠다고 생각했다.
그 이유는 아래와 같은데,,,
1. 우리 퀴즈 애플리케이션도 퀴즈/질문 형태로 메세지 기반 전송을 할 것이기 때문에 적합할 것 같다.
2. 단순 WebSocket보다 Stomp 를 통해 메세지 형식과 포맷이 약속되어있으면 프로그래밍 하기에 용이할 것 같다.
3. Stomp 또한 클라이언트/서버 프레임워크에서 공식적으로 지원되고, 레퍼런스가 많다.
-> Spring 환경에서 Stomp는 내부 메세지 브로커(외부 메세지 브로커 등) 를 적극 지원해서 확장에 유연하다.
4. pub/sub 기능이 퀴즈방 참가 기능을 구현함에 있어서 유용할 것 같다.
메세지 브로커 관련 내용은 일전에 간단한 채팅 서버 관련해서 직무 경험 프로그램에 참여하며 경험한 적이 있었는데, 서버 확장/무중단 배포 등과 관련해서 중요한 역할을 하는 기술이다.
🎯 다음에는?
다음번에는 전체적인 테이블과 서버쪽 아키텍처를 고민해보겠습니다!! 빠밤
'프로젝트 > CStar' 카테고리의 다른 글
[프로젝트] Redis 를 Queue로 활용했을때 성능 & 동시성 체크해보자 (0) | 2024.09.04 |
---|---|
[프로젝트] Busy Waiting 어떻게 개선해볼 수 있을까? (0) | 2024.09.02 |
[프로젝트] 테스트와 배포 자동화 (1) | 2024.09.01 |
[프로젝트] 이슈 & PR 템플릿 (1) | 2024.09.01 |
[프로젝트] 퀴즈 웹 애플리케이션 테이블/아키텍처 고민하기 (2) | 2024.08.17 |