Everyone's friend는 kubernetes를 활용한 배포 및 expressJS 환경에서의 개발 경험을 위해 만들어진 개인 프로젝트입니다.
누구나 쉽게 접속해 채팅 채널을 만들고, 대화할 수 있는 공간이라는 컨셉을 가지고 있습니다.
실시간 채팅 서비스의 로직은 다음과 같이 구성되었습니다.
1. 유저가 로그인하여 접속하게 되면, 먼저 room:lobby에 참여하게 됩니다.
2. restAPI를 통해 everyone's friend의 모든 채널과, 자신이 가입(즐겨찾기)한 채널 목록을 가져옵니다.
3. 각 채널은 고유의 roomID를 가지며, 채널 접속 시 API를 통해 DB에 저장된 해당 채팅 로그를 불러옵니다.
4. 채팅 로그는 유저의 닉네임, 유저가 접속해 있는 채널의 ID와 함께 저장됩니다.
채팅 로그의 저장 및 조회를 위한 DB는 실시간 서비스인 점을 고려하여, HashMap구조로 데이터를 저장함으로써 SQL보다 빠른 속도를 보여주는 NoSQL을 선택하였습니다.
가독성 및 차후 수정의 용이성을 위해 각 api에 대한 docs파일(.yaml)을 모듈화 하였습니다.
paths 폴더 안의 yaml 파일들은 스크립트를 통해 openapi.yaml파일의 paths 경로에 합쳐져
build.yaml을 생성하며 이를 통해 api-docs 페이지를 구현합니다.
api-docs : https://arios.shop/api-docs
- 다음은 GCP와 k8s를 활용한 서버 배포 구조입니다.
- backend server pod를 포함하고있는 deployment의 HorizontalPodAutoscaler을 통해 서버의 오토스케일링 기능을 구현하였으며, 이를 통해 롤링 배포 할 수 있습니다.
- backend service는 LoadBalancer를 통해 생성된 외부 IP 3000포트와 nodePort로 포트 포워딩하여 노출시켰으며
ingress를 통해 SSL 인증과, 경로 생성 시 서브 도메인 기반의 라우팅을 지원합니다.