Skip to content

Mobile-App-Inscort/Inscort

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

53 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“ Inscort โ€“ SNS ๊ธฐ๋ฐ˜ ๋ฐ์ดํŠธ ์ฝ”์Šค ์ž๋™ ์ƒ์„ฑ ์•ฑ

Instagram ์žฅ์†Œ ์ •๋ณด โ†’ ์ง€๋„ ์ฝ”์Šค ์ž๋™ํ™”

์ธ์Šคํƒ€๊ทธ๋žจ์˜ โ€˜๋ง›์ง‘/์นดํŽ˜ ๋ชจ์Œโ€™ ๊ฒŒ์‹œ๋ฌผ ๋งํฌ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, OCR + ๊ฒ€์ƒ‰ API๋ฅผ ํ†ตํ•ด ์žฅ์†Œ ์ •๋ณด๋ฅผ ์ž๋™ ์ถ”์ถœํ•˜๊ณ  ์ง€๋„๋กœ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋‚˜๋งŒ์˜ ๋ฐ์ดํŠธ ์ฝ”์Šค๋ฅผ ์†์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” Android ์•ฑ์ž…๋‹ˆ๋‹ค.


๐Ÿš€ ํ”„๋กœ์ ํŠธ ๊ฐœ์š” (Overview)

SNS์˜ ๊ฐ์„ฑ์ ์ธ ์žฅ์†Œ ํƒ์ƒ‰์„ ์‹ค์ œ ์ง€๋„ ์ฝ”์Šค๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  1. ์ธ์Šคํƒ€ ๋งํฌ ๋ถ„์„

    • ์ธ์Šคํƒ€ ๊ฒŒ์‹œ๋ฌผ(ํ”ผ๋“œ/์บ๋Ÿฌ์…€) ๋งํฌ ์ž…๋ ฅ โ†’ ์ด๋ฏธ์ง€/ํ…์ŠคํŠธ ์ž๋™ ์ˆ˜์ง‘ (Selenium)
    • OCR๋กœ ์žฅ์†Œ๋ช…/ํ‚ค์›Œ๋“œ ์ถ”์ถœ
  2. ์ง€๋„ ๊ธฐ๋ฐ˜ ํ›„๋ณด ์žฅ์†Œ ๋ˆ„์ 

    • ์—ฌ๋Ÿฌ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์ถ”์ถœํ•œ ์žฅ์†Œ๋“ค์„ ์ง€๋„์—์„œ ํ•œ๋ˆˆ์— ๋น„๊ต
    • ๋งˆ์ปค ๋ˆ„์  ํ‘œ์‹œ
  3. ์ฝ”์Šค ๋นŒ๋”

    • ํ›„๋ณด ์ค‘ ์›ํ•˜๋Š” ์žฅ์†Œ๋งŒ ์„ ํƒ
    • Drag & Drop์œผ๋กœ ์ˆœ์„œ ํŽธ์ง‘
    • Firestore์— ์ €์žฅ
  4. ์ฝ”์Šค ์ƒ์„ธ

    • ์‹ค์ œ ์ตœ์  ๊ฒฝ๋กœ(Polyline) ์‹œ๊ฐํ™”
    • ์•ฝ์† ์žก๊ธฐ + ์นด์นด์˜คํ†ก ๊ณต์œ 

๐Ÿงฑ ๊ธฐ์ˆ  ์Šคํƒ (Tech Stack)

Android (Client)

  • Kotlin
  • MVVM + Jetpack ViewModel + StateFlow
  • Retrofit2 (์„œ๋ฒ„ & Kakao API)
  • Coroutines
  • Jetpack Compose / XML
  • Firebase Authentication
  • Firestore (Cloud Firestore)
  • Kakao Map SDK
  • Kakao Local / Mobility API

Backend (Server)

  • Python
  • Flask
  • Selenium (์ธ์Šคํƒ€ ์ด๋ฏธ์ง€ & ํ…์ŠคํŠธ ํฌ๋กค๋ง)
  • Requests / BeautifulSoup (๋ณด์กฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ)

Infra / External Services

  • Firebase ML Kit (OCR)
  • Firebase Authentication
  • Firestore
  • Kakao API (๊ฒ€์ƒ‰ / ๊ฒฝ๋กœํƒ์ƒ‰ / ์ง€๋„)

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (Repository Structure)

Inscort/
โ”‚
โ”œโ”€โ”€ android-app/          # Android Studio ํ”„๋กœ์ ํŠธ
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ gradle/
โ”‚   โ”œโ”€โ”€ build.gradle.kts
โ”‚   โ”œโ”€โ”€ settings.gradle.kts
โ”‚   โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ backend/              # Flask + Selenium ์„œ๋ฒ„
โ”‚   โ”œโ”€โ”€ app.py
โ”‚   โ”œโ”€โ”€ requirements.txt
โ”‚   โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ docs/                 # IA, ํ”Œ๋กœ์šฐ์ฐจํŠธ, Firestore ์„ค๊ณ„, API ๋ฌธ์„œ
โ”‚
โ”œโ”€โ”€ .github/              # PR/์ด์Šˆ ํ…œํ”Œ๋ฆฟ
โ”‚   โ”œโ”€โ”€ ISSUE_TEMPLATE/
โ”‚   โ””โ”€โ”€ PULL_REQUEST_TEMPLATE.md
โ”‚
โ””โ”€โ”€ README.md

Inscort Android App

Inscort is an Android application built with Jetpack Compose that allows users to discover places, build custom courses, and view them on an interactive map.

This project follows a practical MVVM + Repository architecture, commonly used in Android applications.


Architecture

  • UI Layer

    • Jetpack Compose screens
    • Handles rendering and user interaction only
  • ViewModel Layer

    • Manages UI state using StateFlow
    • Calls repositories and exposes data to UI
  • Repository Layer

    • Acts as a data bridge between local database and network APIs
    • No domain separation or use-case layer (non-DDD)
  • Data Layer

    • Room (local database)
    • Retrofit (network communication)

Key Features

  • Place discovery using Kakao Local API
  • Course creation with manual ordering of places
  • Course data stored locally using Room
  • Course detail screen with:
    • Kakao Map markers
    • Route polyline drawing
    • Bottom sheet UI (Material 3)
  • OCR support using:
    • ML Kit (on-device)
    • External Python OCR server (REST API)

Map Integration

  • Kakao Map SDK integrated with Jetpack Compose
  • Custom KakaoMapController used to:
    • Add markers
    • Draw routes
    • Control camera movement

Build & Execution

  • The app is built as a standard Android APK
  • External services (Kakao API, Python OCR server) are accessed via network
  • Python code is not embedded in the APK and runs separately

Summary

This project focuses on:

  • Clear separation of UI, state, and data handling
  • Real-world Android architecture without DDD complexity
  • Practical integration of maps, databases, and network APIs

๐Ÿ‘ฅ ํŒ€ ๊ตฌ์„ฑ (Roles)

์ด๋ฆ„ ์—ญํ•  ๋‹ด๋‹น ๋ฒ”์œ„
์กฐ์œค๊ฒฝ Backend Python, Flask, Selenium (์ธ์Šคํƒ€ ํฌ๋กค๋ง API)
๋‚จ์ง€ํ›„ App โ€“ OCR/๊ฒ€์ƒ‰ Firebase ML Kit, Kakao Local API, ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ & ์ขŒํ‘œ ๋ณ€ํ™˜
๊ฐ•์„ฑ๊ฒฝ App โ€“ map&navigation Kakao Map SDK, Mobility API, Polyline ์‹œ๊ฐํ™”, ์ง€๋„ UI
์ด์˜ˆ๋‚˜ App โ€“ Auth/DB Firebase Auth, Firestore CRUD, MY ์ฝ”์Šค ๊ด€๋ฆฌ ํ™”๋ฉด

๐Ÿงช ์‹คํ–‰ ๋ฐฉ๋ฒ• (Getting Started)

Android ์•ฑ ์‹คํ–‰

๋ฐฑ์—”๋“œ ์‹คํ–‰

cd python-server
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py

๐Ÿงฉ ๋ธŒ๋žœ์น˜ ์ „๋žต (Branch Strategy)

  • main โ€“ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ • ๋ฒ„์ „

  • dev โ€“ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜

  • feature/* โ€“ ๊ธฐ๋Šฅ ๋‹จ์œ„ ๋ธŒ๋žœ์น˜

    • ex) feature/firebase-auth, feature/insta-crawl, feature/map-polyline

๐Ÿ”ฅ ๊ฐœ๋ฐœ ํ”Œ๋กœ์šฐ (Contribution Guide)

  1. Issue ์ƒ์„ฑ โ†’ feature/๊ธฐ๋Šฅ๋ช… ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
  2. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
  3. PR ์ƒ์„ฑ (dev๋กœ)
  4. ํŒ€ ๋ฆฌ๋ทฐ
  5. Merge โ†’ dev โ†’ main (๊ธฐ๋Šฅ ๋™๊ฒฐ ์‹œ)

๐Ÿ“Œ ์ปค๋ฐ‹ ๊ทœ์น™ (Commit Convention)

feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix: ๋ฒ„๊ทธ ์ˆ˜์ •
chore: ํ™˜๊ฒฝ์„ค์ •/๋นŒ๋“œ/์˜์กด์„ฑ
refactor: ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„ 
docs: ๋ฌธ์„œ ์ˆ˜์ •
style: ํฌ๋งท/์„ธ๋ฏธ์ฝœ๋ก  ๋“ฑ

๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

  • ์ธ์Šคํƒ€ ์žฅ์†Œ ํƒ์ƒ‰ โ†’ ์ง€๋„ ์ฝ”์Šค ์ƒ์„ฑ๊นŒ์ง€์˜ ๋ชจ๋“  ๊ท€์ฐฎ์€ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ค‘์‹ฌ ์„œ๋น„์Šค
  • ๊ฐ์„ฑ ์ฝ˜ํ…์ธ (SNS) + ์‹ค์ œ ๋™์„ (์ง€๋„/๊ฒฝ๋กœ) ๊ฐœ๋…์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํŠธ ํ”Œ๋ž˜๋‹ ๊ฒฝํ—˜ ์ œ๊ณต

Map & Navigation Implementation

I implemented the map-related features using the Kakao Map SDK and integrated them with Jetpack Compose.

Map Rendering

  • Embedded Kakao Map into Compose using AndroidView
  • Managed map lifecycle and state through a custom controller (KakaoMapController)

Marker Management

  • Displayed course places as map markers
  • Dynamically added and cleared markers based on course data
  • Supported ordered markers to reflect the sequence of places in a course

Route Drawing

  • Requested route data from Kakao Navigation API
  • Parsed route polyline coordinates
  • Drew routes directly on the map using polyline overlays

Camera Control

  • Automatically moved the camera to fit course locations
  • Updated camera position when course data changed

Compose Integration

  • Connected map updates with StateFlow and LaunchedEffect
  • Ensured map rendering reacts to data changes without recreating the map view

This implementation focuses on real-time data-driven map updates while keeping the UI responsive and lifecycle-safe within a Compose-based architecture.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •