첫시작 계획
시작 전 내 생각은 최대한 카카오톡과 비슷한 수준으로 만드는게 목표다.
필요 요구사항
- 1대1 채팅을 할 수 있다.
- 그룹 채팅을 할 수 있다.
- 서버는 채팅을 3일치만 저장한다.
- 회원가입 및 로그인이 가능하다. (네이버, 구글 api 사용)
세부 요구사항
- 아직 redis등 메시지큐를 사용할 능력이 없으므로 공유메모리를 사용한다 (추후 메시지 큐로 변경 예정)
- 자바의 멀티스레드를 통해 비동기적으로 쿼리를 보내고 받는다
- 웹소켓을 사용하여 서버와 클라이언트가 통신한다
- 접속중이지 않은 사용자에 대하여 푸시 알림서버에 알린다 (외부 푸시서버 api사용)
- 프론트 엔드에서 푸시서버 토큰을 발행받고, 백엔드에 토큰 정보를 보내 데이터베이스에 저장한다.
- 프론트엔드에서 로컬DB(Sqlite) 를 사용하여 채팅 내용을 채팅방 아이디 별로 저장한다.
추가 요구사항
- 채팅관련 데이터는 Redis DB에 저장한다
- 나머지 메타데이터들은 MySql에 저장한다
- Java에서 데이터베이스를 다양하게 사용해본다.
- 이메일 인증 전송 활용해보기
세부 실천방안
- MySQL과 Redis 스프링에서 같이 적용해보기
- 웹소켓 Spring으로 코드 작성해보기
- Redis이용하여 메시지큐 적용해보기
- Spring에서 멀티스레드를 사용하여 Redis 메시지큐에서 작업을 빼올 Worker 만들기
- Spring에서 멀티스레드를 사용하여 MySQL에 Query보내는 작업 만들기
추가로 ElasticSearch도 써보고 싶음 (걍 쓰고 싶음 ㅋㅋ)
Redis 는 조건부 쿼리가 지원이안되고 하려면 전체를 다 받아오고 서버에서 filter해 줄수 밖에 없어서 Redis도 채팅 데이터만 담기엔 적당치 않다는 것을 느낌 MongoDB로 바꾸고 Redis는 그냥 캐싱 및 분산 만을 위한 용도로 쓸까 생각중
문서화를 하긴해야하는데
