inflearn logo
강의

講義

知識共有

Slackクローンコーディング[バックエンド with NestJS + TypeORM]

채팅 데이터 처리 질문

3859

jgh9912039837

投稿した質問数 81

0

현재 채팅앱 구현중인데, 경험이없어 조언을 얻고싶어 질문드립니다!

 

지금까지 나름 조사해본결과, 채팅 데이터 처리방법으로는
1. 소켓으로 채팅 하나하나올때마다 MySQL에 저장한다. 

클라이언트가 앱 최초 실행시 Local DB에 저장되어있던 마지막 ChatId로 MySQL에서 그 이후 채팅을 조회후 클라이언트에게 보내줌.

---가장 깔끔하고 쉽지만,대규모 채팅앱이 되었을경우 매번 INSERT를 해버리면 MySQL이 감당을 못할것같음.---

 

2. 소켓으로 채팅 올때마다 redis에 저장후 일정시간혹은 일정량이차면 한꺼번에 MySQL에 저장한다.

클라가 앱 최초 실행시 Local DB에 있던 마지막 Chat createdAt으로 그시간 뒤의 채팅들은 MySQL에서 조회후,

redis에 임시저장된 채팅들이 있다면 그것들을 합처주고 클라이언트에게 보내줌.

---좀 번거롭지만 MySQL INSERT를 한번에 해줌으로서 DB부하를 줄일 수 있을것같음.

다만, 아주 극적인 타이밍으로 클라가 MySQL에 채팅내역을 조회함과 동시에 redis에서 일정량이차서 MySQL에 INSERT 해주고 redis가 비워저버릴경우 해당 클라이언트는 합처줘야할 대화내용이 유실될수있을것같음.(아주 주관적인 이론)---

 

 

이정도가 있는것같은데, "대규모 채팅앱"이라고 가정할경우

1.더 좋은 방법이 있는지,

2.만약 위의 두번째방법이 괜찮지만 제 이론대로 대화내용 유실 문제가 있을수있다면, 해결방법이 있는지.

3.제로초님은 어떤방식을 선호하는지 등

 

조언을 듣고싶습니다..!

nodejs express TypeORM NestJS

回答 2

1

zerocho

제가 카카오 그룹쪽에 다니긴 하지만 카카오모빌리티라서 카카오톡같은 채팅앱은 잘 모릅니다. ㅎㅎ 슬랙이랑 카카오톡도 성격이 꽤 다르고요.

대규모 채팅 시에는 저는 dynamodb같은 nosql을 주로 썼습니다. mysql같은 sql로는 insert, 조회 등이 감당이 안 되더라고요. dynamodb를 쓰면 소켓에서 채팅 하나하나 올때마다 바로 insert하셔도 크게 무리가 없습니다.

카카오톡은 제가 알기로 파일과 db를 같이 쓴 걸로 알고 있습니다. 그래서 3일 이상 접속을 안하면 파일이 날아가서 그 부분은 복구를 못하곤했죠.

0

jgh9912039837

답변 감사합니다.

0

jgh9912039837

제로초님 말씀을 듣고,

유저정보,프로필,방정보,맴버 등 요청이 적은 데이터들은 MYSQL에 넣고,

채팅내역과 같은 굉장히 빈번하게 일어나는 데이터들은 dynamoDB에 넣을려고합니다.

 

그래서 nestjs에서 mysql과 dynamo db를 같이 사용가능한지와 어떻게 사용해야하는지 알고싶습니다.

혹시 제로초님 dynamoDB 관련강의도 있다면 알려주시면 감사하겠습니다.

0

zerocho

다이나모 강좌는 없습니다. 이정도 스페시픽하게 들어가면 이제부터는 강의같은게 없다고 생각하셔야 합니다. 검색으로만 찾으셔야 합니다. 그냥 npm dynamodb 모듈 사용해서 연결 후 쿼리 하시면 됩니다.

강의자료는 어디서 다운받나요?

0

119

4

질문 있습니다.

0

300

3

코드 편집기 확장 프로그램

0

210

2

(질문)비밀 저장소에 접근하기 위한 인증 정보는 로컬 .env에 저장하는지?

0

148

2

(질문)외부 저장소를 통한 환경변수 불러오기 비동기 질문

0

170

3

로그인을 해도 LoggedInGuard쪽에서 false값이 나옵니다.

0

152

2

로그인방법이 고민됩니다.

0

191

2

yarn seed 명령어 실행 시 데이터 삽입 안됨

0

297

4

yarn run db:create 시에 발생하는 데코레이터 오류

0

243

2

npm run db:create 시에 발생하는 decorating 오류

0

235

2

RxJS 디버깅 질문 있습니다.

0

190

3

CacheManager에 대해 질문 있습니다.

0

176

2

로깅은 어떻게 하는게 효율적일까요?

0

226

1

CORS 질문 있습니다.

0

418

2

쿠키 옵션에 대해서 질문 있습니다.

0

185

2

로그아웃 요청이 403 forbidden 에러가 나는데 왜그런걸까요??

0

450

1

401 unauthorized문제

0

289

1

가드의 장점에 대해서 질문이 있습니다.

0

225

1

로그 관리에 대해 질문 있습니다.

0

252

2

CORS 에러 질문 있습니다.

0

319

2

배포 환경 DB 연결 질문 있습니다.

0

411

2

socket io 미 연결 문제 (nest & flutter)

1

1156

3

no elements in sequence 에러 관해서 질문이 있습니다.

0

456

1

start:dev-backup으로 돌리면 핫 리로딩이 되요 정상인가요?

0

323

1