Skip to content

ge-um/Sahara

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AppIcon

์‚ฌํ•˜๋ผ

์‚ฌ์ง„์„ ํฌํ† ์นด๋“œ๋กœ ๋งŒ๋“ค์–ด ๊ธฐ๋ก, ํŽธ์ง‘ํ•˜๊ณ  ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ง„ ์•„์นด์ด๋น™ ์•ฑ

AppStore Link

image 6 image 7 IMG_2300 IMG_2492
๊ตฌ๋ถ„ ๋‚ด์šฉ
ํŒ€ ์ธ์› 1๋ช… / ๊ธฐํš, ๋””์ž์ธ, ๊ฐœ๋ฐœ
๊ธฐํš ๋ฐ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ 2025.09 - 2025.10 (3์ฃผ, ํ•ต์‹ฌ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ 1์ฃผ)
์ตœ์†Œ์ง€์›๋ฒ„์ „ iOS 16.0+

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

  • ์‚ฌ์ง„ ์ดฌ์˜ ๋ฐ ํฌํ† ์นด๋“œ ํŽธ์ง‘ - ์Šคํ‹ฐ์ปค, ํ•„ํ„ฐ, ํŽœ, ๋ฉ”๋ชจ, ์‚ฌ์ง„ ๋ถ„๋ฅ˜
  • ๋‚ ์งœ/์ง€์—ญ/ํ…Œ๋งˆ/ํด๋”๋ณ„ ์‚ฌ์ง„ ๋ถ„๋ฅ˜
  • ๋น„๋ฐ€ ์นด๋“œ ์ž ๊ธˆ ์„ค์ •
  • ์นด๋“œ ๊ฒ€์ƒ‰ ๋ฐ ์ •๋ ฌ ํ†ต๊ณ„ ํ™•์ธ
  • ์„œ๋น„์Šค ์†Œ์‹ ์•Œ๋ฆผ ์ˆ˜์‹ 
  • 4๊ฐœ ๊ตญ์–ด ์ง€์›(ํ•œ๊ตญ์–ด, ์˜์–ด, ์ค‘๊ตญ์–ด, ์ผ๋ณธ์–ด)

๊ธฐ์ˆ  ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ  ์Šคํƒ
UI Framework UIKit SnapKit
Asynchronous Programming RxSwift RxCocoa RxDataSources
Architecture MVVM Input/Output Pattern
Networking Alamofire Router Pattern
Database Realm
Libraries Kingfisher DiffableDataSource
Apple Frameworks MapKit PencilKit CoreLocation AVFoundation CoreImage Photos PhotosUI LocalAuthentication
Tools Xcode Git
Testing XCTest
Firebase Firebase Analytics Firebase Crashlytics Firebase Cloud Messaging

์ „์ฒด ๊ตฌ์กฐ

MVVM + Reactive Programming + Input/Output

  • Protocol ๊ธฐ๋ฐ˜ DI๋ฅผ ์ ์šฉํ•ด ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ์˜์กด์„ฑ ๋ถ„๋ฆฌ, ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ™•๋ณด
  • ์™ธ๋ถ€ ์˜์กด์„ฑ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋„คํŠธ์›Œํฌ๋งŒ DI๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ…Œ์ŠคํŠธ
  • ๋„๋ฉ”์ธ ์š”๊ตฌ์‚ฌํ•ญ์˜ ์žฆ์€ ๋ณ€ํ™”๋กœ ์ธํ•ด ๊ณผ๋„ํ•œ ์ถ”์ƒํ™” ๋ฐฐ์ œ, MVVM์œผ๋กœ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„

  • Card-Sticker 1:N ์ •๊ทœํ™” ๊ด€๊ณ„ ์„ค๊ณ„
  • ๋‚ ์งœ ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค ํ™œ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ์ตœ์ ํ™”
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐœ์ƒ์‹œ Observable ์ŠคํŠธ๋ฆผ์œผ๋กœ UI ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”

DTO ํŒจํ„ด

  • Realm ๊ฐ์ฒด์˜ ์Šค๋ ˆ๋“œ ์ œ์•ฝ์„ DTO ๋ณ€ํ™˜์œผ๋กœ ํ•ด๊ฒฐํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
  • View๋Š” DTO๋งŒ ์ฐธ์กฐํ•˜์—ฌ write ํŠธ๋žœ์žญ์…˜ ์ถฉ๋Œ ๋ฐฉ์ง€

์บ์‹ฑ

์ด๋ฏธ์ง€ ์บ์‹ฑ ์ „๋žต (Kingfisher)

  • ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋Š” 100MB ๋˜๋Š” 100๊ฐœ ์ดˆ๊ณผ ์‹œ, ๋””์Šคํฌ ์บ์‹œ ๋Š” 500MB ์ดˆ๊ณผ ์‹œ LRU ๋ฐฉ์‹ ์‚ญ์ œ๋กœ ์šฉ๋Ÿ‰ ์ œํ•œ
  • ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋Š” 10๋ถ„ ํ›„ ์ž๋™ ์‚ญ์ œ, ์บ์‹œ๋Š” ๋””์Šคํฌ 7์ผ ํ›„ ์ž๋™ ์‚ญ์ œ๋กœ ์‹œ๊ฐ„ ์ œํ•œ
  • Downsampling์„ ํ™œ์šฉํ•˜์—ฌ ์ธ๋„ค์ผ 200x200, ์‹ค์‚ฌ์šฉ์€ ๋ทฐ ํฌ๊ธฐ ์ด๋ฏธ์ง€ ์‚ฌ์šฉ

๊ตฌํ˜„ ๊ธฐ๋Šฅ

๊ฐค๋Ÿฌ๋ฆฌ

1 2 3 4

๋‚ ์งœ๋ณ„ ๋ณด๊ธฐ

  • ์›”๋ณ„ ์บ˜๋ฆฐ๋” ๋ทฐ(Custom Calendar)
  • ๊ฐ ๋‚ ์งœ์— ์ตœ๋Œ€ 4๊ฐœ ํ‘œ์‹œ (๋ ˆ์ด์•„์›ƒ 3๊ฐœ)
  • ๋™์  ๋ฏธ๋‹ˆ/์ตœ๋Œ€ ๋ ˆ์ด์•„์›ƒ (1๊ฐœ/2๊ฐœ/3๊ฐœ ์ง€๋„ ๋ฐฐ์น˜)
  • ์›” ์ด๋™, ์˜ค๋Š˜ ๋‚ ์งœ ํ•˜์ด๋ผ์ดํŠธ

์žฅ์†Œ๋ณ„ ๋ณด๊ธฐ

  • MapKit ๊ธฐ๋ฐ˜ ์ง€๋„
  • ์คŒ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ํ•€ ํด๋Ÿฌ์Šคํ„ฐ๋ง
  • ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ ํ‘œ์‹œ (์ ์œ  ์—ฌ๋•Œ์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„ ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ ฌ)
  • ํด๋Ÿฌ์Šคํ„ฐ ๊ฐœ์ˆ˜ ํ‘œ์‹œ

์ฃผ์ œ๋ณ„ ๋ณด๊ธฐ

  • Vision Framework ์ง€๋Šฅ ๋ถ„๋ฅ˜ (์‚ฌ๋žŒ/์Œ์‹/์‹๋ฌผ/๋™๋ฌผ/์ค‘๊ตญ์–ด ๊ฐ„์ฒด)

ํด๋”๋ณ„ ๋ณด๊ธฐ

  • ์ปค์Šคํ…€ ํด๋” ์ƒ์„ฑ/์ƒ‰์ƒ/์„ผ์ƒ
  • ํด๋”๋ณ„ ์นด๋“œ ํ•„ํ„ฐ๋ง

ํŽธ์ง‘

5 6 7
8 9 10

์Šคํ‹ฐ์ปค

  • RESTful API + offset ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง€๋„ค์ด์…˜
  • ๋“œ๋ž˜๊ทธ/ํ•€์น˜/ํšŒ์ „ ์ œ์Šค์ฒ˜ ์ง€์›
  • ์‹ ๊ทœ ์Šคํ‹ฐ์ปค ์ถ”๊ฐ€ (์‚ฌ์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ ‘๊ทผ)
  • ๋‹ค์ค‘ ์Šคํ‹ฐ์ปค ๋ฐฐ์น˜ ์ง€์›
  • ์‹ ๊ทœ ์Šคํ‹ฐ์ปค ์ถ”๊ฐ€ ์‹œ ํ…œํ”Œ๋ฆฟ์—์„œ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ‹€ ์ œ๊ณต

๊ทธ๋ฆฌ๊ธฐ(PencilKit)

  • ์ž์œ  ๊ทธ๋ฆฌ๊ธฐ
  • ์‹คํ–‰ ์ทจ์†Œ/์žฌ์‹คํ–‰ ๊ธฐ๋Šฅ

ํ•„ํ„ฐ

  • 10๊ฐ€์ง€ ํ•„ํ„ฐ ์ œ๊ณต
  • ์‹ค์‹œ๊ฐ„ ํ”„๋ฆฌ๋ทฐ

์ž๋ฃŒ ๊ธฐ์ž…

  • ๋‚ ์งœ ์ž…๋ ฅ (OCR ์ž๋™ ์ถ”์ถœ, ๋””ํดํŠธ ์˜ค๋Š˜)
  • ๋ฉ”๋ชจ ์ž…๋ ฅ (OCR ํ…์ŠคํŠธ Vision Framework ์ถ”์ถœ)
  • ์œ„์น˜ ๊ฒ€์ƒ‰ (MapKit ์žฅ์†Œ ๊ฒ€์ƒ‰, ํ˜„์žฌ ์œ„์น˜)
  • ํด๋” ์„ ํƒ
  • ์ƒ์ฒด ์ธ์ฆ (Face ID/Touch ID, ์‹คํŒจ ์‹œ ๊ธฐ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ)

์นด๋“œ์ž‘์„ฑ

11 12 13
14 15

๋ฏธ๋””์–ด ์„ ํƒ

  • ์‹œ์Šคํ…œ ์นด๋ฉ”๋ผ/์•จ๋ฒ”
  • Photo Picker (์ „์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ ‘๊ทผ)
  • ๊ถŒํ•œ ๊ธฐ๋ฐ˜ ์œ„์น˜ ๊ทธ๋ฆฌ๋“œ (GPS/๋‚ด์žฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํฌํ•จ)
  • Limited/Authorized ๊ถŒํ•œ๋ณ„ ๊ทธ๋ฆฌ๋“œ ๋ฐ์ดํ„ฐ ํ…œํ”Œ๋ฆฟ
  • ๊ทธ๋ฆฌ๋“œ ํ‘œ์‹œ ํ›„ ๋‚ด/์™ธ๋ถ€์—์„œ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ธฐ๋Šฅ ์ œ๊ณต

์นด๋“œ ์ •๋ณด ์ž…๋ ฅ

  • ๋‚ ์งœ ์„ ํƒ
  • ๋ฉ”๋ชจ ์ž…๋ ฅ (OCR ํ…์ŠคํŠธ Vision Framework ์ถ”์ถœ)
  • ์œ„์น˜ ๊ฒ€์ƒ‰ (MapKit ์žฅ์†Œ ๊ฒ€์ƒ‰, ํ˜„์žฌ ์œ„์น˜)
  • ํด๋” ์„ ํƒ
  • ์ƒ์ฒด ์ธ์ฆ (Face ID/Touch ID ์ƒ์ฒด ์ธ์ฆ, ์‹คํŒจ ์‹œ ๊ธฐ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ)

๊ฒ€์ƒ‰ / ํ†ต๊ณ„ / ์„ค์ •

16 17 18 19

์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰

  • ๋ฉ”๋ชจ (์„œ๋ธŒํ…์ŠคํŠธ ๊ฒ€์ƒ‰) ์ž…๋ ฅ, OCR ํ…์ŠคํŠธ (Vision Framework ์ถ”์ถœ) ๊ฒ€์ƒ‰
  • Masonry Layout ๊ทธ๋ฆฌ๋“œ

ํ†ต๊ณ„

  • ์ด ์นด๋“œ ์ˆ˜ / ์ด๋ฒˆ ๋‹ฌ ์นด๋“œ ์ˆ˜ / ์—ฐ์† ์ž‘์„ฑ ์ผ์ˆ˜ (Streak) ํ†ต๊ณ„
  • ๋ง‰๋Œ€ ์ฐจํŠธ

์„ค์ •

์ผ๋ฐ˜

  • ์–ธ์–ด ์„ ํƒ (ํ•œ๊ตญ์–ด/์˜์–ด/์ผ๋ณธ์–ด/์ค‘๊ตญ์–ด ๊ฐ„์ฒด)

์•Œ๋ฆผ

  • ์„œ๋น„์Šค ์†Œ์‹ ํ† ํ”ฝ ๊ตฌ๋… ๋ฐฉ์‹ FCM Topic ๊ตฌ๋… ๊ด€๋ฆฌ

์ง€์›

  • ์•ฑ ๋ฉ”์ผ์„ ํ™œ์šฉํ•œ ๊ฐœ๋ฐœ์ž ๋ฌธ์˜
  • ๊ธฐ๊ธฐ ์ •๋ณด ์ž๋™ ์ˆ˜์ง‘
  • ๋ฒ„์ „๋ณ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ

About

๐Ÿ“

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages