{"id":23956837,"url":"https://github.com/youuungh/sns","last_synced_at":"2026-06-18T11:31:18.411Z","repository":{"id":271206972,"uuid":"912708843","full_name":"youuungh/SNS","owner":"youuungh","description":"소셜 네트워킹 Compose 앱","archived":false,"fork":false,"pushed_at":"2025-04-30T11:45:15.000Z","size":8278,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-30T13:04:11.357Z","etag":null,"topics":["android","clean-architecture","compose","fcm-push-notification","hilt","kotlin-android","ktor-client","mvi-architecture","websocket"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/youuungh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-06T08:28:53.000Z","updated_at":"2025-04-30T11:45:18.000Z","dependencies_parsed_at":"2025-01-06T09:37:51.593Z","dependency_job_id":"b3722c1a-f968-4128-95ac-b5ca3c886ef5","html_url":"https://github.com/youuungh/SNS","commit_stats":null,"previous_names":["youuungh/sns"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/youuungh/SNS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youuungh%2FSNS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youuungh%2FSNS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youuungh%2FSNS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youuungh%2FSNS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/youuungh","download_url":"https://codeload.github.com/youuungh/SNS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/youuungh%2FSNS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34489019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","clean-architecture","compose","fcm-push-notification","hilt","kotlin-android","ktor-client","mvi-architecture","websocket"],"created_at":"2025-01-06T16:19:07.801Z","updated_at":"2026-06-18T11:31:18.297Z","avatar_url":"https://github.com/youuungh.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SNS\n\n![Kotlin](https://img.shields.io/badge/kotlin-1.9.24-blue.svg)\n![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-darkcyan)\n![Architecture](https://img.shields.io/badge/Architecture-Clean-green)\n![Ktor](https://img.shields.io/badge/Backend-Ktor-red)\n\nSNS는 클린 아키텍처와 최신 Android 기술을 활용한 소셜 네트워킹 앱입니다. 사용자는 게시물을 작성하고, 댓글을 달고, 다른 사용자를 팔로우하며, 실시간 채팅을 할 수\n있습니다. Jetpack Compose, Kotlin Coroutines, Hilt 등 최신 안드로이드 개발 기술을 활용하였습니다.\n   \n## 프리뷰\n\n\u003ca href=\"https://streamable.com/m9ybby\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/5ca7f006-7db9-4651-8da7-a7a21d4fa034\" height=\"600px\"/\u003e\n\u003c/a\u003e\n\n## 다운로드\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/youuungh/SNS/releases/tag/v1.0.0\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/SNS_v1.0.0-다운로드-2ea44f?style=for-the-badge\u0026logo=android\" alt=\"APK 다운로드\" width=\"250px\"/\u003e\n  \u003c/a\u003e\n  \u003cp\u003e\u003cstrong\u003e호스팅 서버를 이용한 실시간 기능이 포함된 APK 앱\u003c/strong\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n## 주요 기능\n\n### 인증 시스템\n    - 이메일/비밀번호 로그인 및 회원가입\n    - Google, Kakao, Naver 소셜 로그인 통합\n\n### 소셜 피드\n    - 사용자 게시물 타임라인 및 탐색 \n    - 게시물 보기/생성/수정/삭제\n    - 다중 이미지 및 리치 텍스트 지원\n    - 좋아요, 댓글, 게시물 저장 기능\n\n### 실시간 기능\n    - WebSocket 기반 1:1 채팅\n    - 메시지 읽음 확인\n    - FCM 알림 시스템(좋아요, 댓글, 팔로우 등의 활동에 대한 푸시 알림)\n\n### 탐색 및 검색\n    - 사용자 검색 및 최근 검색 기록\n    - 개인 프로필 및 다른 사용자 프로필 조회\n    - 팔로우/언팔로우 시스템\n    - 추천 사용자\n\n### 사용자 경험\n    - 라이트/다크 테마 지원\n    - 사용자 맞춤 알림 설정\n    - 애니메이션 및 트랜지션 효과\n    - 오프라인 지원\n\n## 기술 스택\n\n### 아키텍처\n- **클린 아키텍처**: 도메인, 데이터, 프레젠테이션 레이어 분리\n- **[MVI (Model-View-Intent)](https://orbit-mvi.org/)**: Orbit MVI를 활용한 단방향 데이터 흐름\n- **모듈화**: 기능 및 레이어별 모듈 분리\n\n### 안드로이드 \u0026 코틀린\n- **[Jetpack Compose](https://developer.android.com/jetpack/compose)**: 선언적 UI 구현\n- **[Kotlin Coroutines \u0026 Flow](https://kotlinlang.org/docs/coroutines-overview.html)**: 비동기 프로그래밍\n- **[Hilt](https://developer.android.com/training/dependency-injection/hilt-android)**: 의존성 주입\n- **[Room](https://developer.android.com/training/data-storage/room)**: 로컬 데이터베이스 관리\n- **[DataStore](https://developer.android.com/topic/libraries/architecture/datastore)**: 사용자 설정 저장\n- **[WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)**: 백그라운드 작업 처리\n\n### 네트워킹\n- **[Ktor Client](https://ktor.io/docs/client.html)**: 네트워크 통신\n- **[WebSocket](https://ktor.io/docs/websocket.html)**: 실시간 채팅 구현\n- **[Kotlinx Serialization](https://github.com/Kotlin/kotlinx.serialization)**: JSON 직렬화/역직렬화\n\n### 기타 라이브러리\n- **[Paging 3](https://developer.android.com/topic/libraries/architecture/paging/v3-overview)**: 페이지네이션 처리\n- **[Coil](https://github.com/coil-kt/coil)**: 이미지 로딩\n- **[RichEditor](https://github.com/wasabeef/richeditor-android)**: 리치 텍스트 에디터\n- **[Lottie](https://airbnb.design/lottie/)**: 애니메이션\n- **[Timber](https://github.com/JakeWharton/timber)**: 로깅\n\n### 백엔드 \u0026 서비스\n- **[Firebase Authentication](https://firebase.google.com/docs/auth)**: 사용자 인증\n- **[Firebase Cloud Messaging (FCM)](https://firebase.google.com/docs/cloud-messaging)**: 푸시 알림\n\n## 아키텍처\n\n```\ncom.ninezero.sns\n├── domain\n│   ├── model         # 도메인 모델\n│   ├── repository    # 인터페이스\n│   └── usecase       # 비즈니스 로직\n│\n├── data\n│   ├── di            # 의존성 주입 모듈\n│   ├── db            # Room 데이터베이스\n│   ├── ktor          # 네트워크 클라이언트\n│   ├── model         # DTO 및 매핑\n│   ├── repository    # 구현체\n│   ├── usecase       # 구현체\n│   ├── worker        # Background 작업\n│   └── util          # 유틸리티\n│\n└── presentation\n    ├── auth          # 인증 화면\n    ├── base          # 기본 컴포넌트\n    ├── chat          # 채팅 화면\n    ├── component     # 재사용 가능 UI 컴포넌트\n    ├── detail        # 상세 화면\n    ├── feed          # 피드 화면\n    ├── main          # 메인 화면\n    ├── model         # UI 모델\n    ├── notification  # 알림 화면\n    ├── post          # 게시물 작성\n    ├── profile       # 프로필 화면\n    ├── search        # 검색 화면\n    ├── setting       # 설정 화면\n    ├── theme         # 테마 및 스타일\n    ├── user          # 사용자 화면\n    └── util          # UI 유틸리티\n```\n\n### Domain\n- **엔티티**: 비즈니스 모델 정의\n- **유스케이스**: 비즈니스 로직 캡슐화\n- **레포지토리 인터페이스**: 데이터 액세스 추상화\n\n### Data\n- **레포지토리 구현**: 도메인 레이어에 정의된 인터페이스 구현\n- **데이터 소스**: 로컬(Room) 및 원격(Ktor) 데이터 소스\n- **모델 매퍼**: DTO와 도메인 모델 간 변환\n\n### Presentation\n- **ViewModels**: UI 상태 관리 및 비즈니스 로직 처리\n- **Compose UI**: 선언적 UI 구성\n- **Navigation**: 화면 간 이동 관리\n\n## 상태 관리\n- **State**: UI 상태를 정의하는 불변 객체\n- **Intent**: 사용자 액션 또는 이벤트를 나타내는 함수\n- **SideEffect**: 일회성 이벤트(토스트, 내비게이션 등)\n\n## 스크린샷\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/42c7a4de-99e5-4696-a41f-63baa6420f21\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/1529a81d-c688-4e5b-8729-de7340706437\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/83644a73-0697-4bd9-8333-84e4bc61ddc3\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/0ae867b8-747f-4c1b-b9f8-f84b12ddbe2d\" height=\"20%\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/8cbb91b4-a40c-499d-978a-fc080c7480ad\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/fdfc2dee-c6af-490f-b387-3e3df4f178f5\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/3f0d313e-e85e-47ec-91ec-712eebcdc7de\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/86e736a7-d41b-4f66-a297-e069ed41f413\" height=\"20%\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/21d1629f-1d69-4b54-aee4-685b7592fc59\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/8b0a9690-213e-4217-9c4a-fc8706c147d4\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/3f3dc904-9ac9-479b-bee9-cae4c74a13dc\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/653bdeff-f67f-4bcc-b64e-dd7608081cff\" height=\"20%\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/0bc57b6e-7f13-4045-b441-61427e61b920\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/095c9479-7089-484e-b4fa-32135dff1f31\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/6a4191b2-0149-4563-bb2e-19fb328924d2\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/05e83eeb-3d5b-4d17-ab42-145368387a46\" height=\"20%\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/44ac7e13-55f6-4054-adf6-3a892051e935\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/5bedefd0-b992-4874-a1c7-8423d061ad31\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/b1b2d19f-562e-4b2c-8df0-b4c8adaebbaa\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/4e33035a-78e0-46d5-9dfa-71e03365c5ab\" height=\"20%\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/306b0a57-ca6c-49f3-bfca-8978059c6e2c\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/b61cfd91-4440-450f-89d6-31674dc5abc5\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/cbe2edf1-06fa-400b-b50b-e9868b2c90e5\" height=\"20%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"https://github.com/user-attachments/assets/c3ac26b0-736c-4882-985c-bee9d07d8410\" height=\"20%\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 설정 및 빌드\n\n### 백엔드 설정\n\n\u003ca href=\"https://github.com/youuungh/ktor-sns-api\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/백엔드_서버-서버_저장소로_이동-blue?style=for-the-badge\u0026logo=github\" alt=\"Backend Server\" /\u003e\n\u003c/a\u003e\n\n### 필수 요구사항\n```\n- Android Studio Arctic Fox 이상\n- Kotlin 1.8.0 이상\n- Gradle 8.0 이상\n- JDK 17\n```\n\n### 필수 환경 변수\n\n- **Firebase 프로젝트를 설정**\n```\ngoogle-services.json\n```\n\n- **소셜 로그인 API 키를 설정**\n```\nKAKAO_NATIVE_KEY=your_kakao_key\nNAVER_CLIENT_ID=your_naver_client_id\nNAVER_CLIENT_SECRET=your_naver_client_secret\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyouuungh%2Fsns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyouuungh%2Fsns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyouuungh%2Fsns/lists"}