An open API service indexing awesome lists of open source software.

https://github.com/youuungh/sns

소셜 네트워킹 Compose 앱
https://github.com/youuungh/sns

android clean-architecture compose fcm-push-notification hilt kotlin-android ktor-client mvi-architecture websocket

Last synced: 6 days ago
JSON representation

소셜 네트워킹 Compose 앱

Awesome Lists containing this project

README

          

# SNS

![Kotlin](https://img.shields.io/badge/kotlin-1.9.24-blue.svg)
![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-darkcyan)
![Architecture](https://img.shields.io/badge/Architecture-Clean-green)
![Ktor](https://img.shields.io/badge/Backend-Ktor-red)

SNS는 클린 아키텍처와 최신 Android 기술을 활용한 소셜 네트워킹 앱입니다. 사용자는 게시물을 작성하고, 댓글을 달고, 다른 사용자를 팔로우하며, 실시간 채팅을 할 수
있습니다. Jetpack Compose, Kotlin Coroutines, Hilt 등 최신 안드로이드 개발 기술을 활용하였습니다.

## 프리뷰



## 다운로드



APK 다운로드

호스팅 서버를 이용한 실시간 기능이 포함된 APK 앱


## 주요 기능

### 인증 시스템
- 이메일/비밀번호 로그인 및 회원가입
- Google, Kakao, Naver 소셜 로그인 통합

### 소셜 피드
- 사용자 게시물 타임라인 및 탐색
- 게시물 보기/생성/수정/삭제
- 다중 이미지 및 리치 텍스트 지원
- 좋아요, 댓글, 게시물 저장 기능

### 실시간 기능
- WebSocket 기반 1:1 채팅
- 메시지 읽음 확인
- FCM 알림 시스템(좋아요, 댓글, 팔로우 등의 활동에 대한 푸시 알림)

### 탐색 및 검색
- 사용자 검색 및 최근 검색 기록
- 개인 프로필 및 다른 사용자 프로필 조회
- 팔로우/언팔로우 시스템
- 추천 사용자

### 사용자 경험
- 라이트/다크 테마 지원
- 사용자 맞춤 알림 설정
- 애니메이션 및 트랜지션 효과
- 오프라인 지원

## 기술 스택

### 아키텍처
- **클린 아키텍처**: 도메인, 데이터, 프레젠테이션 레이어 분리
- **[MVI (Model-View-Intent)](https://orbit-mvi.org/)**: Orbit MVI를 활용한 단방향 데이터 흐름
- **모듈화**: 기능 및 레이어별 모듈 분리

### 안드로이드 & 코틀린
- **[Jetpack Compose](https://developer.android.com/jetpack/compose)**: 선언적 UI 구현
- **[Kotlin Coroutines & Flow](https://kotlinlang.org/docs/coroutines-overview.html)**: 비동기 프로그래밍
- **[Hilt](https://developer.android.com/training/dependency-injection/hilt-android)**: 의존성 주입
- **[Room](https://developer.android.com/training/data-storage/room)**: 로컬 데이터베이스 관리
- **[DataStore](https://developer.android.com/topic/libraries/architecture/datastore)**: 사용자 설정 저장
- **[WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)**: 백그라운드 작업 처리

### 네트워킹
- **[Ktor Client](https://ktor.io/docs/client.html)**: 네트워크 통신
- **[WebSocket](https://ktor.io/docs/websocket.html)**: 실시간 채팅 구현
- **[Kotlinx Serialization](https://github.com/Kotlin/kotlinx.serialization)**: JSON 직렬화/역직렬화

### 기타 라이브러리
- **[Paging 3](https://developer.android.com/topic/libraries/architecture/paging/v3-overview)**: 페이지네이션 처리
- **[Coil](https://github.com/coil-kt/coil)**: 이미지 로딩
- **[RichEditor](https://github.com/wasabeef/richeditor-android)**: 리치 텍스트 에디터
- **[Lottie](https://airbnb.design/lottie/)**: 애니메이션
- **[Timber](https://github.com/JakeWharton/timber)**: 로깅

### 백엔드 & 서비스
- **[Firebase Authentication](https://firebase.google.com/docs/auth)**: 사용자 인증
- **[Firebase Cloud Messaging (FCM)](https://firebase.google.com/docs/cloud-messaging)**: 푸시 알림

## 아키텍처

```
com.ninezero.sns
├── domain
│ ├── model # 도메인 모델
│ ├── repository # 인터페이스
│ └── usecase # 비즈니스 로직

├── data
│ ├── di # 의존성 주입 모듈
│ ├── db # Room 데이터베이스
│ ├── ktor # 네트워크 클라이언트
│ ├── model # DTO 및 매핑
│ ├── repository # 구현체
│ ├── usecase # 구현체
│ ├── worker # Background 작업
│ └── util # 유틸리티

└── presentation
├── auth # 인증 화면
├── base # 기본 컴포넌트
├── chat # 채팅 화면
├── component # 재사용 가능 UI 컴포넌트
├── detail # 상세 화면
├── feed # 피드 화면
├── main # 메인 화면
├── model # UI 모델
├── notification # 알림 화면
├── post # 게시물 작성
├── profile # 프로필 화면
├── search # 검색 화면
├── setting # 설정 화면
├── theme # 테마 및 스타일
├── user # 사용자 화면
└── util # UI 유틸리티
```

### Domain
- **엔티티**: 비즈니스 모델 정의
- **유스케이스**: 비즈니스 로직 캡슐화
- **레포지토리 인터페이스**: 데이터 액세스 추상화

### Data
- **레포지토리 구현**: 도메인 레이어에 정의된 인터페이스 구현
- **데이터 소스**: 로컬(Room) 및 원격(Ktor) 데이터 소스
- **모델 매퍼**: DTO와 도메인 모델 간 변환

### Presentation
- **ViewModels**: UI 상태 관리 및 비즈니스 로직 처리
- **Compose UI**: 선언적 UI 구성
- **Navigation**: 화면 간 이동 관리

## 상태 관리
- **State**: UI 상태를 정의하는 불변 객체
- **Intent**: 사용자 액션 또는 이벤트를 나타내는 함수
- **SideEffect**: 일회성 이벤트(토스트, 내비게이션 등)

## 스크린샷




































## 설정 및 빌드

### 백엔드 설정


Backend Server

### 필수 요구사항
```
- Android Studio Arctic Fox 이상
- Kotlin 1.8.0 이상
- Gradle 8.0 이상
- JDK 17
```

### 필수 환경 변수

- **Firebase 프로젝트를 설정**
```
google-services.json
```

- **소셜 로그인 API 키를 설정**
```
KAKAO_NATIVE_KEY=your_kakao_key
NAVER_CLIENT_ID=your_naver_client_id
NAVER_CLIENT_SECRET=your_naver_client_secret
```