Skip to content

Repository files navigation

UMC PRODUCT · Android typing

UMC(University MakeUs Challenge) 동아리 운영을 하나의 앱으로 통합하는 Android 클라이언트


Version Kotlin Compose Android Architecture


📖 소개

디스코드·구글 시트·노션으로 흩어진 동아리 운영 도구를 하나의 앱으로 통합하여, 부원이 운영 잡무 대신 성장에 집중할 수 있는 환경을 제공합니다.

✨ Killer Features

🔔

The Ping

공지 수신 확인을 추적하고 미확인자에게 재알림

📱

Mobile-First Admin

출석·경고·공지 운영을 모바일에서 바로 처리

🤖

On-device AI

Gemini Nano로 공지 요약· 문장 다듬기·채팅 요약

📍

위치 기반 일정

일정에 장소를 등록하고 출석과 연계


🛠️ 기술 스택

tech stack

구분 사용 기술
🧩 언어 / UI Kotlin 2.2.21 · Jetpack Compose (BOM 2025.02.00) · Navigation Compose (Type-safe)
🏗️ 아키텍처 Clean Architecture (data / domain / presentation) + 멀티 모듈
💉 DI Hilt 2.57.2
🌐 네트워크 Retrofit 3.0.0 · OkHttp · Gson
비동기 Coroutines 1.10.2 · Flow
💾 로컬 저장소 DataStore 1.2.1
🖼️ 이미지 Coil 2.6.0
🔐 인증 Kakao SDK 2.23.2 · 이메일 로그인
🤖 AI ML Kit GenAI Prompt API (Gemini Nano · 온디바이스)
🔔 기타 Firebase (FCM, Analytics) · ZXing (QR)


🏢 Android 팀



🧱 모듈 구조

레이어별로 모듈을 분리하고, 화면 단위 기능은 presentation 하위 모듈로 나눕니다.

umc-product-android
├── 📱 app                  # 애플리케이션 진입점, DI 설정, 매니페스트
├── 💾 data                 # Data Layer — API, DTO, DataSource, Repository 구현
├── 🧠 domain               # Domain Layer — Model, Repository Interface, UseCase
└── 🎨 presentation         # Presentation Layer — Compose UI
    ├── component           # 디자인 시스템 (색상·타이포·공통 컴포넌트), Base 클래스
    ├── splash              # 스플래시 · 자동 로그인
    ├── login               # 로그인 (카카오 / 이메일)
    ├── signUp              # 회원가입
    ├── permission          # 권한 요청
    ├── failCode            # 챌린저 코드 입력
    ├── home                # 홈 · 일정 · 알림 보관함
    ├── notice              # 공지 (목록 · 검색 · 작성 · 상세 · 운영진 공지)
    ├── act                 # 활동 관리 (출석 · 챌린저 관리)
    ├── study               # 스터디 · 워크북
    ├── community           # 커뮤니티 (스레드 · 채팅)
    └── mypage              # 마이페이지 · 명함 · QR
📐 레이어 의존 규칙
presentation  ──▶  domain  ──▶  data
  • presentationdomaindata 방향으로만 의존합니다.
  • presentationdata를 직접 참조하지 않고, domain의 UseCase를 통해 접근합니다.
  • 화면 모듈끼리는 서로 의존하지 않으며, 공통 요소는 presentation:component에 둡니다.

⚙️ 빌드 & 실행

git clone https://github.com/UMC-PRODUCT/umc-product-android.git
  1. Android Studio에서 프로젝트를 엽니다. (JDK 11 · AGP 8.12.3)
  2. 아래 시크릿 설정을 완료합니다.
  3. app 구성으로 실행합니다. (minSdk 24 / targetSdk 36)

🔑 시크릿 설정

local.properties — 팀 내부 채널에서 수령
kakao.native.key=...
kakao.rest.key=...
kakao.app.key=...
naver.client.id=...
  • app/google-services.json(Firebase 설정)도 팀 내부 채널에서 받아 배치합니다.
  • ⚠️ 실제 키·설정 파일은 원격 저장소에 커밋하지 않습니다.


📋 컨벤션

🌿 브랜치 컨벤션

기본 브랜치: main(배포), develop-compose(개발)

모든 작업은 기본 브랜치에서 파생된 기능별 하위 브랜치에서 진행하며, 브랜치명은 태그/#이슈번호 형식을 따릅니다. 예: feat/#2, ui/#15

태그 설명
main 애플리케이션 배포 브랜치
develop-compose 개발을 위한 통합 브랜치
feat 새로운 기능 개발(로직 포함)
ui 레이아웃 및 UI 작업
fix 버그 수정 및 에러 해결
refactor 코드 리팩토링
chore 빌드 설정 및 라이브러리 관리
📌 이슈 컨벤션

이슈는 템플릿 형태로 주어지며, 아래 내용을 작성합니다.

  • 기능 개요: 구현하고자 하는 기능을 요약해 작성
  • 상세 내용: 기능과 관련된 추가적인 정보를 작성
  • 작업 체크리스트: 작업 간 수행 여부 작성 및 체크
  • 참고 사항: 외부 문서나 추후 작업 시 참고 사항 작성

제목 형식: [태그] 작업 제목 — 예: [UI] 온보딩 화면 UI 구현

✅ PR 컨벤션

PR 작성 시 템플릿 형태가 주어지며, 아래 내용을 작성합니다.

  • 작업 내용: 이번 PR에서 작업한 내용을 간단히 요약
  • 리뷰 요구사항: 리뷰어가 중점적으로 봐주었으면 하는 부분 작성
  • 체크리스트: 코드에 이상 없는지 확인 및 체크
  • 스크린샷(선택): 작업한 화면 스크린샷

제목 형식: [태그/#이슈번호] 작업 제목 — 예: [Feat/#2] 온보딩 화면 구현

🏷️ 커밋 컨벤션

커밋 메시지는 [태그/#이슈번호] 작업 내용 형식을 권장합니다. 예: [Feat/#2] 온보딩 화면 UI 구현

태그 종류 (이슈 / PR / 커밋 공통)

태그 설명
[Feat] 새로운 기능 추가 및 로직 구현
[UI] Composable, Drawable, UI 컴포넌트 등 디자인 작업
[Fix] 버그 수정 및 예외 처리
[Data] API 연결, DTO 구성, 로컬 저장소 등 데이터 관련 작업
[Refactor] 리팩토링 및 파일/변수 이름 변경
[Merge] 브랜치 머지 및 충돌 해결
[Chore] 빌드 설정, 라이브러리 관리 등 기타 환경 설정
💻 코드 컨벤션

Ktlint를 통해 Android 공식 스타일 가이드를 준수하며, 자동 점검합니다.

Kotlin 네이밍

  • Class / Interface: PascalCase (예: NoticeViewModel)
  • 함수 / 변수: camelCase (예: getUserId())
  • 상수: UPPER_SNAKE_CASE (예: BASE_URL)

Compose 네이밍

  • Composable: PascalCase 명사형 (예: NoticeCard, UmcBottomNavigationBar)
  • 화면 단위: {화면명}Screen / 상태 주입 래퍼는 {화면명}Route
  • 상태 / 이벤트: {화면명}UiState, {화면명}Event
  • Drawable: ic_(아이콘명), bg_(배경명) (예: ic_bottom_nav_home.xml)

그 외

  • 화면은 Route(상태·네비게이션)와 Screen(순수 UI)으로 분리하고, Screen은 Preview가 가능하도록 상태를 파라미터로 받습니다.
  • 색상·타이포는 하드코딩하지 않고 presentation:component의 디자인 토큰을 사용합니다.

footer

About

UMC android 팀

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages