Skip to content

Arios67/everyones-friend

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 

Repository files navigation

Everyone's friend 개요

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(swagger-ui)의 모듈식 구성

가독성 및 차후 수정의 용이성을 위해 각 api에 대한 docs파일(.yaml)을 모듈화 하였습니다.

s   ss
paths 폴더 안의 yaml 파일들은 스크립트를 통해 openapi.yaml파일의 paths 경로에 합쳐져
build.yaml을 생성하며 이를 통해 api-docs 페이지를 구현합니다.

api-docs : https://arios.shop/api-docs

kubernetes(GKE Autopilot)를 활용한 무중단 배포

  • 다음은 GCP와 k8s를 활용한 서버 배포 구조입니다.

EF_K

  • backend server pod를 포함하고있는 deployment의 HorizontalPodAutoscaler을 통해 서버의 오토스케일링 기능을 구현하였으며, 이를 통해 롤링 배포 할 수 있습니다.
  • backend service는 LoadBalancer를 통해 생성된 외부 IP 3000포트와 nodePort로 포트 포워딩하여 노출시켰으며 ingress를 통해 SSL 인증과, 경로 생성 시 서브 도메인 기반의 라우팅을 지원합니다.

get Svc

desc ingress

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 81.9%
  • HTML 16.8%
  • Dockerfile 1.3%