Skip to content

실시간 채팅 구현: 인메모리 방식을 선택한 이유

Sunny edited this page Dec 3, 2024 · 3 revisions

📋 서론

실시간 채팅 시스템을 구현하기 위해 데이터 저장소로 두 가지 옵션을 고려하였습니다.

  1. 인메모리 방식
  2. Redis를 활용한 방식

각각의 장단점을 비교 분석한 후, 우리 서비스의 특성과 현재 인프라 상황을 고려하여 인메모리 방식을 선택하게 되었습니다.

🤔 의사결정 과정

💡 인메모리 방식의 장점

  1. 구현의 단순성
    • 별도의 인프라 설정이 필요 없음
    • 빠른 개발과 테스트가 가능
  2. 성능적 이점
    • 메모리에 직접 접근하므로 더 빠른 속도
    • 외부 데이터베이스 연결 오버헤드 없음
  3. 현재 인프라와의 적합성
    • 단일 서버로 운영 중이므로 데이터 일치성 문제가 없음
    • 채팅 데이터의 영구 저장이 불필요한 상황

📊 Redis 방식과의 비교

Redis는 다음과 같은 장점이 있었지만, 현재 상황에서는 오버스펙이라고 판단했습니다.

  • 서버 확장에 유리
  • 다중 서버 환경에서 데이터 일치성 보장
  • TTL을 이용한 채팅 내역 캐싱 용이

🎯 결정적 요인들

  1. 서비스 특성
    • 채팅 데이터의 휘발성이 허용됨
    • 영구 저장의 필요성이 낮음
  2. 인프라 상황
    • 단일 서버 운영으로 데이터 동기화 이슈 없음
    • 추가 인프라 구축 비용 절감
  3. 개발 효율성
    • 빠른 구현과 배포가 가능
    • 유지보수의 단순성

🚀 결론

현재 서비스의 규모와 요구사항을 고려할 때, 인메모리 방식이 가장 적합한 선택이었습니다. 향후 서비스가 확장되어 다중 서버 운영이 필요해지거나, 채팅 데이터의 영구 저장이 요구될 경우 Redis로의 마이그레이션을 고려할 수 있습니다.

이러한 선택은 YAGNI(You Aren't Gonna Need It) 원칙에도 부합하며, 현재 상황에서 최적의 솔루션이라고 판단됩니다.

💻 관련 PR

https://github.com/boostcampwm-2024/web20-camon/pull/189

👥 팀 강점

🧑‍💻 개발 일지

📌 ALL

📌 FE

📌 BE

💥 트러블 슈팅

📌 FE

📌 BE

🤔 고민

📚 학습 정리

📌 김광현

📌 백지연

📌 전희선

📌 한승헌

🤝 회의록

🗒️ 데일리 스크럼

💬 팀 회고


👨‍👩‍👧‍👦 소개

🌱 문화

🔨 기술 스택

⚙️ 서비스 아키텍쳐

🚧 CI/CD

🌊 Flow

💭 6주를 보내면서

Clone this wiki locally