첫시작 계획

프로젝트채팅

시작 전 내 생각은 최대한 카카오톡과 비슷한 수준으로 만드는게 목표다.

필요 요구사항

  1. 1대1 채팅을 할 수 있다.
  2. 그룹 채팅을 할 수 있다.
  3. 서버는 채팅을 3일치만 저장한다.
  4. 회원가입 및 로그인이 가능하다. (네이버, 구글 api 사용)

세부 요구사항

  1. 아직 redis등 메시지큐를 사용할 능력이 없으므로 공유메모리를 사용한다 (추후 메시지 큐로 변경 예정)
  2. 자바의 멀티스레드를 통해 비동기적으로 쿼리를 보내고 받는다
  3. 웹소켓을 사용하여 서버와 클라이언트가 통신한다
  4. 접속중이지 않은 사용자에 대하여 푸시 알림서버에 알린다 (외부 푸시서버 api사용)
  5. 프론트 엔드에서 푸시서버 토큰을 발행받고, 백엔드에 토큰 정보를 보내 데이터베이스에 저장한다.
  6. 프론트엔드에서 로컬DB(Sqlite) 를 사용하여 채팅 내용을 채팅방 아이디 별로 저장한다.

추가 요구사항

  1. 채팅관련 데이터는 Redis DB에 저장한다
  2. 나머지 메타데이터들은 MySql에 저장한다
  3. Java에서 데이터베이스를 다양하게 사용해본다.
  4. 이메일 인증 전송 활용해보기

세부 실천방안

  1. MySQL과 Redis 스프링에서 같이 적용해보기
  2. 웹소켓 Spring으로 코드 작성해보기
  3. Redis이용하여 메시지큐 적용해보기
  4. Spring에서 멀티스레드를 사용하여 Redis 메시지큐에서 작업을 빼올 Worker 만들기
  5. Spring에서 멀티스레드를 사용하여 MySQL에 Query보내는 작업 만들기

추가로 ElasticSearch도 써보고 싶음 (걍 쓰고 싶음 ㅋㅋ)

Redis 는 조건부 쿼리가 지원이안되고 하려면 전체를 다 받아오고 서버에서 filter해 줄수 밖에 없어서 Redis도 채팅 데이터만 담기엔 적당치 않다는 것을 느낌 MongoDB로 바꾸고 Redis는 그냥 캐싱 및 분산 만을 위한 용도로 쓸까 생각중

문서화를 하긴해야하는데