우리 프로젝트에서 기술적으로 강점을 삼을 만할 항목을 정리해 주세요. (최종 발표 및 면접에서 프로젝트를 진행할 때 어떤 도전을 했는지 말할 수 있는 좋은 소스가 됩니다)
프로젝트에 적용했던 핵심 기술 목록을 작성해 주시고, 각 기술을 도입하게된 의사결정 과정을 정리해주세요.
| 구분 | 요구사항 | 선택지 | 핵심 기술을 선택한 이유 및 근거 |
|---|---|---|---|
| FE / BE | 화상 채팅 기능 구현을 위한 WebRTC (SFU / MESH / MCU) | MESH (P2P) vs SFU | 실시간성이 중요한 게임 서비스임을 고려했을 때, 실시간성이 가장 낮고 중앙 서버에서 데이터 혼합 및 가공에 많은 비용이 요구되는 MCU는 제외하기로 했다. Mesh와 SFU 방식을 놓고 고민하게 됨. |
| 나몰닭 서비스 특성 상 한 방에 최대 인원이 4명인 점을 고려했을 때 클라이언트의 부하가 심하지 않을 것이라고 판단했고, 서버에 거치는 일 없이 바로 peer끼리 정보를 주고 받기 때문에 실시간성이 중요한 게임 서비스에 적합하다고 판단했다. | |||
| 또한 서버의 부하를 줄일 수 있다는 장점까지 포함하여 Mesh 방식을 선택했다. | |||
| FE / BE | 유저에게 잦은 로그인을 요구하지 않기 위한 Refresh Token 사용 | Redis를 활용한 Refresh Token | Access Token의 유효 시간을 길게 설정하면 유저에게 잦은 로그인을 요구하지 않아도 되지만 토큰이 탈취되었을 때 남은 유효 기간 동안 탈취자가 마음대로 사용할 수 있다는 단점이 있다. 이를 극복하기 위하여 Access Token의 유효 기간은 2시간, Refresh Token의 유효 기간은 1주일로 설정하여 Access Token이 만료되면 자동으로 재발급 해줄 수 있도록 설계했다. |
| Refresh Token을 저장할 DB로는 Redis를 선정했는데, Redis 자체의 TTL 기능으로 토큰 생명 주기 관리가 용이하기 때문에 선정했다. | |||
| Refresh Token을 client 쪽에서는 Cookie에 저장했다. local / session stor | |||
| BE | 방 입장 시 트랜잭션이 겹쳐서 최대 인원을 초과하는 이슈를 발생. | ||
| 동시성을 해결하기 위한 DB락이 필요 | Pessimistic Lock vs Optimistic Lock | 나몰닭의 메인 서비스인 게임을 하기 전에 필수적으로 이루어져야하는 방 입장하기 로직이기 때문에 동시적으로 여러 트랜잭션이 DB에 접근하는 상황이 많을 것이라고 생각. | |
| 충돌이 발생했을 경우 오버헤드가 생기는 Optimistic Lock보다 충돌이 발생하지 않았을 경우 오버헤드가 발생하는 Pessimistic Lock이 더 효율적이라고 판단했다. | |||
| BE | 웹 시그널링 서버 연결 시 간헐적으로 끊기는 이슈 | synchronized | 한 개의 스레드만 활용하고 있어서 동시에 메소드를 여러번 실행하면 간헐적으로 서버가 다운되는 상황이 발생. |
| synchronized를 통한 동기화 작업으로 동시에 여러번 실행되지 않도록 수정 | |||
| BE | S3 이미지 다운로드 시 엔드포인트가 그대로 노출되는 이슈 | CloudFront, Route53 | AWS CloudFront를 이용하요 속도 개선 및 엔드포인트를 감추는 용도로 사용. |
| CloudFrontd의 배포 도메인을 감추기 위해서 Route53을 이용하여 도메인 변경 | |||
| BE | 문자 채팅을 위한 SockJS와 STOMP 사용 | SockJS & STOMP, Only Websocket | 메시징 전송을 효율적으로 처리하기 위해 pub/sub 구조로 메시지를 공급하는 STOMP를 사용하여 기존 WebSocket만을 사용 했을 때 보다 쉽게 메세징 처리. |
| WebSocket을 지원하지 않는 브라우저에서도 기능을 사용할 수 있도록 도우며, 낮은 대기 시간과 크로스 브라우징을 지원하는 SockJS를 선택해서 사용 |
이번주 한 일
BE
FE
유저 테스트를 진행했다면 해당 항목을 추가로 작성 해 주세요
유저테스트 설문지의 링크와 결과, 결과를 토대로 반영해야 할 점을 작성 해 주세요
유저 테스트를 기반으로, 무엇을 어떻게 개선하면 좋을지 우선순위 별로 기록 해 주세요