thiscode architecture.png


Server

각 스프링 서버는 AWS EC2 t3 small(CPU 2 RAM 2G)에 도커 컨테이너로 배포했습니다.

Container Orchestration

컨테이너 클러스터링과 로드밸런싱 기능을 구축 비용 없이 낮은 스펙으로 간단하게 사용하기 위해 docker swarm을 활용했습니다.

DataBase

유저와 채팅방 데이터에 대한 관리는 RDBMS인 MySQL을 사용했고 단순 저장/조회로 사용되는 채팅 데이터는 NoSQL인 MongoDB를 사용했습니다.

추가로 대규모 데이터 내에서 빠른 데이터 검색을 위해 역 인덱스 자료구조를 사용한 elasticsearch를 사용했습니다.

Middleware

db와의 커텍션을 유발하는 트랜잭션을 없애며 비동기적으로 db에 데이터를 저장하고 유저에게 채팅을 전송하는 kafka를 middleware로 채택하였습니다.

Test

소켓 통신 테스트를 위해 시나리오 작성이 가능한 JMeter로 부하 테스트를 진행했습니다.

Monitoring

cpu 사용률, heap 메모리, disk I/O 같은 지표를 시각화하는데 특화된 Grafana, Prometheus를 활용해 부하 테스트시 서버 모니터링을 통해 병목 지점을 관찰하고 분석했습니다.