-
Notifications
You must be signed in to change notification settings - Fork 2
실시간 채팅 구현: 인메모리 방식을 선택한 이유
Sunny edited this page Dec 3, 2024
·
3 revisions
실시간 채팅 시스템을 구현하기 위해 데이터 저장소로 두 가지 옵션을 고려하였습니다.
- 인메모리 방식
- Redis를 활용한 방식
각각의 장단점을 비교 분석한 후, 우리 서비스의 특성과 현재 인프라 상황을 고려하여 인메모리 방식을 선택하게 되었습니다.
-
구현의 단순성
- 별도의 인프라 설정이 필요 없음
- 빠른 개발과 테스트가 가능
-
성능적 이점
- 메모리에 직접 접근하므로 더 빠른 속도
- 외부 데이터베이스 연결 오버헤드 없음
-
현재 인프라와의 적합성
- 단일 서버로 운영 중이므로 데이터 일치성 문제가 없음
- 채팅 데이터의 영구 저장이 불필요한 상황
Redis는 다음과 같은 장점이 있었지만, 현재 상황에서는 오버스펙이라고 판단했습니다.
- 서버 확장에 유리
- 다중 서버 환경에서 데이터 일치성 보장
- TTL을 이용한 채팅 내역 캐싱 용이
-
서비스 특성
- 채팅 데이터의 휘발성이 허용됨
- 영구 저장의 필요성이 낮음
-
인프라 상황
- 단일 서버 운영으로 데이터 동기화 이슈 없음
- 추가 인프라 구축 비용 절감
-
개발 효율성
- 빠른 구현과 배포가 가능
- 유지보수의 단순성
현재 서비스의 규모와 요구사항을 고려할 때, 인메모리 방식이 가장 적합한 선택이었습니다. 향후 서비스가 확장되어 다중 서버 운영이 필요해지거나, 채팅 데이터의 영구 저장이 요구될 경우 Redis로의 마이그레이션을 고려할 수 있습니다.
이러한 선택은 YAGNI(You Aren't Gonna Need It) 원칙에도 부합하며, 현재 상황에서 최적의 솔루션이라고 판단됩니다.
- Mediasoup 포트 매핑 문제
- swagger 같은 응답 코드에 다양한 응답 보여주기
- Sudo가 계속 비밀번호를 요청함
- Docker 이미지가 너무 크다
- Git action에서 도커 이미지 빌드 시간을 단축시켜보자
- Docker compose를 이용해서 메모리 사용률을 줄여보자
- 방송 녹화 시 CPU 과부하 문제를 해결해보자
- Release 브랜치? 너 필요해?
- 로딩이 너무 짧아…!
- NestJS ORM으로 무엇을 사용해야 할까?
- WebRTC를 이용한 1:N 스트리밍 서비스에서 시그널링 서버가 필요할까?
- 실시간 채팅 구현: 인메모리 방식을 선택한 이유
- MySQL 아키텍처 개선: DB 의존성 분리와 서버 역할 명확화
- 브라우저 창이 최소화되면 비디오 송출이 안된다…!
- Mediasoup 기본 개념
- DLTS와 Signaling
- Tell, Don't Ask (TDA) 원칙이란
- VPC(Virtual Private Cloud) 학습 정리
- 순환참조: A 서비스 ‐ B 서비스 vs. A 서비스 ‐ B 레포지토리
- Dto 메서드 전략
- WebRTC란?
- 자바스크립트 패키지 매니저(npm, yarn, pnpm)
- shadcn/ui을 이용해 UI 개발 생산성 높이기
- React 이벤트 핸들러 네이밍(on vs handle)
- React-router-dom의 createBrowserRouter을 사용해보기
- fetch vs axios