86 lines
2.7 KiB
Markdown
86 lines
2.7 KiB
Markdown
# IYKYKA (MSN) — 멀티 컨텍스트 메신저
|
|
|
|
Flutter 클라이언트와 Node.js 서버로 구성된 메신저 예제 프로젝트입니다. **컨텍스트**(일상·업무 등)별로 공간을 나누고, 그 안에서 방·메시지·프로필을 사용합니다.
|
|
|
|
---
|
|
|
|
## 사전 요구 사항
|
|
|
|
| 구분 | 내용 |
|
|
|------|------|
|
|
| 서버 | Node.js (npm) |
|
|
| 모바일 | Flutter SDK |
|
|
|
|
---
|
|
|
|
## 서버 (REST + WebSocket)
|
|
|
|
```bash
|
|
cd server
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| HTTP | `http://127.0.0.1:8787` |
|
|
| WebSocket | `ws://127.0.0.1:8787/ws?token=JWT` |
|
|
| 데이터베이스 | `server/data/msn.db` (SQLite, Node 내장 `node:sqlite`) |
|
|
|
|
### 데모 계정 (최초 기동 시 시드)
|
|
|
|
`alice@demo.msn`이 없으면 서버가 한 번만 데모 데이터를 넣습니다.
|
|
|
|
| 이메일 | 비밀번호 | 비고 |
|
|
|--------|----------|------|
|
|
| `alice@demo.msn` | `demo1234` | **일상**·**데모 회사** 컨텍스트 보유. 업무 공간에서 샘플 DM 확인 가능 |
|
|
| `bob@demo.msn` | `demo1234` | 멀티 기기·다른 사용자 테스트용 |
|
|
|
|
**DB를 처음부터 다시 쓰려면** 서버를 끄고 `server/data/msn.db`를 삭제한 뒤 다시 실행합니다.
|
|
|
|
---
|
|
|
|
## 모바일 (Flutter)
|
|
|
|
`mobile/`에서 실행합니다.
|
|
|
|
```bash
|
|
cd mobile
|
|
flutter pub get
|
|
flutter run --dart-define=API_BASE=http://127.0.0.1:8787
|
|
```
|
|
|
|
- **Android 에뮬레이터**에서 PC의 로컬 서버에 붙일 때:
|
|
`--dart-define=API_BASE=http://10.0.2.2:8787`
|
|
- **`android/` / `ios/` 폴더가 없다면** `mobile/` 안에서 한 번 `flutter create .` 로 생성합니다.
|
|
|
|
### 웹 (`flutter run -d chrome`)
|
|
|
|
`sqflite`가 웹에서 동작하지 않아 **채팅 로컬 캐시 전체**는 Android / Windows 데스크톱 / iOS 사용을 권장합니다.
|
|
|
|
### Firebase / FCM
|
|
|
|
푸시 알림·토큰 등록을 쓰려면 `flutterfire configure` 등으로 `firebase_options` 및 플랫폼 설정을 맞춰야 합니다. 미구성 시에도 앱은 기동할 수 있도록 처리되어 있습니다.
|
|
|
|
---
|
|
|
|
## 구현된 기능 요약
|
|
|
|
- JWT 인증, 세션, 선택된 컨텍스트(메신저 공간) — 보안 저장소·설정 연동
|
|
- 컨텍스트(일상·업무 등), 이메일 초대, `contextId` 기준 프로필 API
|
|
- 1:1·그룹 방, WebSocket 메시지, 컨텍스트별 로컬 SQLite 메시지 캐시
|
|
- 푸시 토큰 등록(FCM 연동 시 서버에 등록), 검색·읽음 처리(서버 확장), 앱 메뉴에서 그룹 방 생성
|
|
- 설정(테마·알림), 검색 탭(메시지/방/친구), 전송 재시도 큐, 타이핑·1:1 읽음 표시(WebSocket) 등
|
|
|
|
---
|
|
|
|
## 빌드·검증 (참고)
|
|
|
|
```bash
|
|
# 모바일
|
|
cd mobile && dart analyze lib && flutter test
|
|
|
|
# 서버
|
|
cd server && npx tsc --noEmit
|
|
```
|