랜덤 매칭 기반 익명 실시간 채팅 iOS 앱
| 홈 | 채팅방 목록 | 채팅 |
|---|---|---|
![]() |
![]() |
![]() |
| 신고 | 푸시 알림 딥링크 |
|---|---|
![]() |
![]() |
| 기능 | 설명 |
|---|---|
| 랜덤 매칭 | START 버튼으로 랜덤 사용자와 즉시 매칭 |
| AI 매칭 | 8초 내 상대가 없으면 GPT와 대화하는 방 자동 생성 |
| 실시간 채팅 | WebSocket STOMP 기반 메시지 송수신, 발신 시간 표시, 무한 스크롤 |
| 채팅방 목록 | 기존 매칭된 방 재입장, Pull-to-Refresh |
| 사용자 신고 | 채팅 상대방 신고 (스팸·욕설·광고·허위정보·저작권 침해·기타) |
| 설정 | 닉네임 변경, 푸시 알림 ON/OFF |
| 푸시 알림 | FCM 기반 메시지 수신 알림, 탭 시 해당 채팅방으로 딥링크 이동 |
| 보안 | iOS Keychain Services를 이용한 userId 암호화 저장 |
| 분류 | 사용 기술 |
|---|---|
| 언어 | Swift |
| UI | SwiftUI |
| 아키텍처 | Clean Architecture (MVVM + UseCase + Repository) |
| 상태 관리 | @Observable (Swift Observation) |
| 비동기 | async/await, @MainActor |
| 네트워크 | Alamofire |
| WebSocket | StompClientLib (STOMP 프로토콜) |
| 보안 | iOS Keychain Services |
| 푸시 알림 | Firebase Cloud Messaging (FCM) |
| 테스트 | XCTest |
| 의존성 관리 | CocoaPods, Swift Package Manager |
ranchat/
├── ranchatApp.swift
├── ContentView.swift
├── Domain/
│ ├── Entity/
│ ├── Repository/ # Repository Protocols
│ ├── Service/ # WebSocketService Protocol
│ └── UseCase/
│ ├── User/
│ ├── Room/
│ ├── Chat/
│ └── Notification/
├── Data/
│ ├── DTO/
│ ├── DataSource/ # NetworkClient
│ ├── LocalStorage/
│ └── Repository/
├── Infrastructure/
│ ├── WebSocket/ # WebSocketHelper (STOMP)
│ ├── Keychain/
│ ├── Network/
│ ├── Session/
│ └── Logger/
└── Presentation/
├── Home/
├── RoomList/
├── Chatting/
├── Setting/
├── Common/
└── Extension/




