- 기본 환경
- IDE: Visual Studio Code
- OS: Mac
- GIT
- Server
- Node.js (v16)
- Express (v4.19.2)
- DB
- MongoDB (v6.8.0)
- Infra
- AWS EC2
- PM 2
- Docker
- 라이브러리 및 도구
- Socket.IO (v4.7.5)
- Redis (ioredis v5.4.1)
- RabbitMQ (amqplib v0.10.4)
- Mongoose (v8.5.1)
-
Git, Node.js 는 설치되어 있다고 가정한다.
-
.env 파일 설정
MONGO_URI=mongodb://localhost:27017/chatdb
PORT=5001
REDIS_URL=redis://localhost:6379
$ git clone https://github.com/juhwano/backend-challenge-chat-server.git
$ cd backend-challenge-chat-server
npm install
npm start
- 간단한 채팅 시스템을 구현하려고 합니다.
- 사용자는 서버에 접속하여 실시간으로 메시지를 주고받을 수 있습니다.
- 많은 유저들이 이 서비스를 이용할 수 있도록 부하와 확장을 고려합니다.
- 실시간 채팅이 가능한 환경을 구성합니다.
- 1:1 채팅 및 그룹 채팅을 모두 지원합니다.
- 웹, 앱 모두 지원하는 서버를 구성합니다.
- 사용자의 접속 상태를 알 수 있어야합니다.
- 채팅 로그는 반드시 기록되어야 합니다.
- 그룹 채팅의 인원은 최대 100명으로 제한합니다.
- 사용자가 전달할 수 있는 메시지는 텍스트만 가능합니다.
- 텍스트 메시지의 길이는 1,000자로 제한합니다.
- 암호화는 구현하지 않아도 됩니다만, 구현한다면 어떻게 할 수 있을지 논의해볼 수 있습니다.
- 사용자 로그인/로그아웃
- 사용자 검색
- 사용자 접속 상태 관리
- 1:1 채팅방 생성 및 조회
- 그룹 채팅방 생성 및 조회
- 채팅방 번호 자동 생성
- 메시지 전송 및 조회
- 메시지 순서 관리
- 메시지 저장 및 로깅
- GET /api/users : 활성 사용자 목록 조회
- POST /api/users/login : 사용자 로그인
- POST /api/users/logout : 사용자 로그아웃
- GET /api/users/search : 사용자 검색
- GET /api/chats : 그룹 채팅방 목록 조회
- POST /api/chats : 채팅방 생성
- GET /api/chats/one-to-one/:userId : 사용자의 1:1 채팅방 목록 조회
- GET /api/chats/group/:userId : 사용자의 그룹 채팅방 목록 조회
- GET /api/chats/:number : 채팅방 번호로 채팅방 조회
- GET /api/messages/:chatId : 채팅방의 메시지 목록 조회


