채팅방과 채팅 목록 백엔드 시스템 구현

요구 사항

  1. 실시간 채팅
    • 사용자는 제목을 포함하여 채팅방을 생성할 수 있습니다.
    • 사용자는 1명 이상의 사용자와 실시간으로 채팅할 수 있습니다.
    • 메시지는 실시간으로 전송되어야 하며, 채팅 참여자가 채팅방의 이전 모든 메시지와 새로운 메시지를 볼 수 있습니다.
    • 사용자는 30분 내 접속자 수를 알 수 있습니다.
  2. 30분 내 접속자 수 기준으로 채팅 목록 정렬
    • 채팅 목록은 30분 내에 접속한 사용자 수의 내림차순으로 정렬됩니다.
  3. 채팅 목록에 최근 메시지 노출
    • 채팅 목록에는 해당 채팅방의 가장 최근 메시지가 노출됩니다.
    • 최근 메시지는 실시간으로 업데이트되어야 하며, 새로운 메시지가 도착할 때마다 자동으로 변경되어야 합니다.
  4. 데이터베이스 관리
    • 데이터베이스 구조는 효율적이고 확장 가능해야 합니다.
    • 2개 이상의 데이터베이스를 사용해도 무관합니다.
  5. 사용자 관리
    • 각 사용자는 고유한 식별자(ID)를 가지고 있어야 합니다.
    • 회원가입 및 로그인은 구현하지 않아도 되며, 임의의 사용자 ID가 있다고 가정합니다.
  6. 테스트
    • 각 기능은 적절한 테스트를 거쳐야 합니다.

참고 사항

  • 원하는 기술 스택과 설계 방식을 선택하여 과제를 진행하시면 됩니다.
  • 모든 요구 사항을 다 구현하지 않았더라도, 가능한 선까지 개발 후 제출 부탁드립니다.
  • 요구 사항 외 구현하고 싶으신 부분이 있으면 추가적으로 구현해도 무관합니다.
  • 과제에는 README 파일을 포함하여 실행 방법을 기술해주세요.
  • 개발 과정 중 필요한 가정이 있다면, 해당 가정을 README에 기록해주세요.
  • 완성된 프로젝트를 GitHub에 업로드하고, URL을 제출해 주세요.

구현 내용

기술 스택

  • Kotlin, Spring Boot, Websocket, MongoDB, Redis, JPA

디렉토리 구조

/chat-server
├── docker
├── http
├── src
│   ├── main
│   │   ├── chat
│   │   │   ├── api
│   │   │   ├── config
│   │   │   ├── handler
│   │   │   ├── model
│   │   │   ├── service
│   │   ├── user
│   │   │   ├── api
│   │   │   ├── model
│   │   │   └── service
└── build.gradle


실행 방법 및 테스트

  • /docker 폴더에서 docker-composes.yml 파일로 mongod, redis 로컬에서 실행 후 서버를 기동합니다.
  • /http 폴더에서 엔드포인트 별 테스트를 진행합니다.