Skip to content

Android app for couples to communicate and share messages in a private space

Notifications You must be signed in to change notification settings

doding2/feeltalk-android

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

356 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํ•„๋กœ์šฐํ†ก(feeltalk)

FeelTalk_ProfileImage

โš ๏ธ Project Status

ํ˜„์žฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ์‹ค์ œ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์€ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์Šคํ† ์–ด ๋ฐฐํฌ๋„ ์ข…๋ฃŒ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋ณธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์™€ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ‘‹ ์†Œ๊ฐœ

๐Ÿ’ž โ€œ์ž๊ธฐ๋Š” ์ด๋Ÿฐ๊ฒŒ ์ข‹์•„?โ€, โ€œ์ €๋Ÿฐ๊ฒŒ ์ข‹์•„?โ€ ์—ฌ๋Ÿฌ๋ถ„์€ ์—ฐ์ธ๊ณผ ์ด๋Ÿฐ ๋Œ€ํ™”๋ฅผ ์ž์ฃผ ๋‚˜๋ˆ„์‹œ๋‚˜์š”?
๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์‚ฌ์ด์ด์ง€๋งŒ, ๊นŠ์€ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๊ธฐ ์–ด๋ ค์›Œํ•˜๋Š” ์—ฐ์ธ๋“ค์ด ๋งŽ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ ์•ฑ์€ ์—ฐ์ธ๋“ค์ด ์Šคํ‚จ์‹ญ์— ๋Œ€ํ•œ ์†๊นŠ์€ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.


๐Ÿ“ฑ ์Šคํฌ๋ฆฐ

1. ํšŒ์›๊ฐ€์ž… & ๋กœ๊ทธ์ธ

ํšŒ์›๊ฐ€์ž… ํ”Œ๋กœ์šฐ

  • ํ•„๋กœ์šฐํ†ก์€ ์†Œ์…œ ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ๊ณผ ํšŒ์›๊ฐ€์ž…์„ ํ•˜๋‚˜์˜ ํ”Œ๋กœ์šฐ๋กœ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ ์„ฑ๊ณต ์‹œ ์œ ์ €์˜ ํšŒ์›๊ฐ€์ž… ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ „์ฒด ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ฑ์ธ ๋Œ€์ƒ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ํœด๋Œ€ํฐ ๋ณธ์ธ ์ธ์ฆ์„ ํ•„์ˆ˜๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณธ์ธ ์ธ์ฆ ์ดํ›„์—๋Š” ๋‹‰๋„ค์ž„์„ ์„ค์ •ํ•˜๊ณ  ์ปคํ”Œ ์ดˆ๋Œ€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ปคํ”Œ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2. ์‹œ๊ทธ๋„ ๋ฐ”๊พธ๊ธฐ

์‹œ๊ทธ๋„ ์ „์†ก ํ”Œ๋กœ์šฐ

  • ์‹œ๊ทธ๋„ ๋ฐ”๊พธ๊ธฐ ์œ ์ €์˜ ํ˜„์žฌ ๊ธฐ๋ถ„ ์ƒํƒœ๋ฅผ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ์„œ๋กœ์˜ ๊ธฐ๋ถ„์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ์œ ์ €๋Š” ์ž์‹ ์˜ ์‹œ๊ทธ๋„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์„ ํƒ๋œ ์‹œ๊ทธ๋„์€ ์ปคํ”Œ๋กœ ์—ฐ๊ฒฐ๋œ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

3. ์˜ค๋Š˜์˜ ์งˆ๋ฌธ

์˜ค๋Š˜์˜ ์งˆ๋ฌธ ํ”Œ๋กœ์šฐ

  • ์˜ค๋Š˜์˜ ์งˆ๋ฌธ์€ ์ปคํ”Œ ๊ฐ„ ๋Œ€ํ™”๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์œ ๋„ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์ผ ์ƒˆ๋กœ์šด ์งˆ๋ฌธ์„ ์ œ๊ณตํ•˜๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ์œ ์ €๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ž‘์„ฑํ•˜๊ณ  ๋‹ต๋ณ€์€ ์ปคํ”Œ๋กœ ์—ฐ๊ฒฐ๋œ ์ƒ๋Œ€๋ฐฉ๊ณผ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒ๋Œ€๋ฐฉ์ด ์•„์ง ๋‹ต๋ณ€ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ โ€˜์ฝ• ์ฐŒ๋ฅด๊ธฐโ€™ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐ€๋ฒผ์šด ๋ฐฉ์‹์œผ๋กœ ๋‹ต๋ณ€์„ ์žฌ์ด‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์ฑŒ๋ฆฐ์ง€

์ฑŒ๋ฆฐ์ง€ ํ”Œ๋กœ์šฐ

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

5. ํ™”๋ฉด์ž ๊ธˆ

ํ™”๋ฉด์ž ๊ธˆ ํ”Œ๋กœ์šฐ

  • ํ™”๋ฉด ์ž ๊ธˆ์€ ์ปคํ”Œ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋…ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ์ž ๊ธˆ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, ์•ฑ ์ง„์ž… ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์„ ์š”๊ตฌํ•˜์—ฌ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ„์‹ค ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•ด ๋ณด์•ˆ ์งˆ๋ฌธ์„ ํ†ตํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

6. ํƒˆํ‡ด & ํ—ค์–ด์ง€๊ธฐ

ํƒˆํ‡ด&ํ—ค์–ด์ง€๊ธฐ ํ”Œ๋กœ์šฐ

  • ํ•„๋กœ์šฐํ†ก์€ ๊ณ„์ • ํƒˆํ‡ด์™€ ์ปคํ”Œ ๊ด€๊ณ„ ํ•ด์ œ(ํ—ค์–ด์ง€๊ธฐ)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ํƒˆํ‡ด ์‹œ ์œ ์ € ๊ณ„์ • ๋ฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋ฉฐ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ—ค์–ด์ง€๊ธฐ๋Š” ๊ณ„์ •์„ ์œ ์ง€ํ•œ ์ฑ„ ์ปคํ”Œ ๊ด€๊ณ„๋งŒ ํ•ด์ œํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ผ์ • ๊ธฐ๊ฐ„ ๋‚ด ์ปคํ”Œ๋กœ ์žฌ์—ฐ๊ฒฐ ํ•˜์ง€ ์•Š์„ ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ค ๋‹ด๋‹น ์—ญํ• 

  • Android ๊ฐœ๋ฐœ ์ „๋‹ด
    • ์•ฑ ์•„ํ‚คํ…์ณ ์„ค๊ณ„
    • ์ฃผ์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • AES/RSA ๊ธฐ๋ฐ˜ ์ข…๋‹จ๊ฐ„ ์•”ํ˜ธํ™” ๊ตฌ์กฐ ์„ค๊ณ„ ์ „๋‹ด
  • ์ธ์ฆ ๋ฐ API ์—ฐ๋™ ์„ค๊ณ„ ํ˜‘์—… (์•ฝ 40% ๊ธฐ์—ฌ)
    • API ์ŠคํŽ™ ์ •์˜
    • JWT ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ ์ธ์ฆ ํ”Œ๋กœ์šฐ ์„ค๊ณ„

๐Ÿ”ฅ ์ฃผ์š” ๊ตฌํ˜„ ํฌ์ธํŠธ

์ธ์ฆ / ๋ณด์•ˆ ์„ค๊ณ„

  • JWT๋ฅผ ์ด์šฉํ•œ ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ Stateless ์ธ์ฆ ๊ด€๋ฆฌ
  • RSA ๋ฐ AES ๋ฅผ ์ด์šฉํ•œ ํ˜ผํ•ฉ ์•”ํ˜ธํ™” ๊ตฌ์กฐ ์„ค๊ณ„, Android KeyStore๋ฅผ ํ†ตํ•œ ๊ตฌํ˜„
  • Android WebView๋ฅผ ์‚ฌ์šฉํ•ด Apple Sign-In ์šฐํšŒ ๊ตฌํ˜„

์ƒํƒœ / ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ด€๋ฆฌ

  • Resource ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ด ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์‹œ์˜ ์„ฑ๊ณต/์‹คํŒจ ์ƒํƒœ๋ฅผ ๋ช…ํ™•ํžˆํ•จ
  • Remote + Local ๋ฐ์ดํ„ฐ ์บ์‹ฑ์„ ์ด์šฉํ•œ ๋กœ๋”ฉ ์ง€์—ฐ ์ตœ์†Œํ™”
  • Paging 3๋ฅผ ํ™œ์šฉํ•œ ํŽ˜์ด์ง€๋„ค์ด์…˜์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

UI / UX

  • MotionLayout, Lottie ๋“ฑ์„ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„
  • Snackbar, Dialog, Button ๋“ฑ์˜ ์ปค์Šคํ…€ UI ์ œ์ž‘์œผ๋กœ UX ๊ฐœ์„ 
  • Firebase Cloud Messaging(FCM)์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ

๐Ÿ—๏ธ ์•„ํ‚คํ…์ณ

Architecture Diagram

Clean Architecture

  • Presentation / Domain / Data์˜ 3๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ํ•จ
  • ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Domain)์„ ์™ธ๋ถ€ ํ™˜๊ฒฝ(UI, DB, API) ๋ณ€ํ™”๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด Presentation๊ณผ Data ๊ณ„์ธต์ด Domain ๊ณ„์ธต์„ ํ–ฅํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ์„ ๊ฐ€๋„๋ก ์„ค๊ณ„
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก Domain ๊ณ„์ธต์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜ํ•˜๊ณ  Data ๊ณ„์ธต์—์„œ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์„ ์ ์šฉ

MVVM Architecture

  • UI ๋กœ์ง๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด MVVM์„ ๋„์ž…
  • ViewModel์€ UI์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๋ถ„๋ฆฌ๋˜์–ด ํ™”๋ฉด ํšŒ์ „๊ณผ ๊ฐ™์€ UI ๋ณ€๊ฒฝ์—๋„ UI ์ƒํƒœ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด์กดํ•ด์คŒ

UseCase Pattern

  • ViewModel์ด ์—ฌ๋Ÿฌ Repository๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์กฐํ•ฉํ•ด์•ผ ํ•˜๋Š” ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด UseCase ํŒจํ„ด์„ ์ ์šฉ
  • ๋‹จ์ผํ•œ ์ฑ…์ž„์„ ๊ฐ–๋Š” ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ์„ UseCase ํด๋ž˜์Šค๋กœ ์บก์Аํ™”ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž„

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Category Tech Stack
Language Kotlin
Platform Android
Architecture MVVM, Clean Architecture
Async Coroutines, Flow
Dependency Injection Hilt
Networking Retrofit, OkHttp, REST API
Local Data Room, SQLCipher
Jetpack ViewModel, Navigation, Paging3
Auth Google, Apple, Naver, Kakao
Push FCM

๐Ÿงฉ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฒฝํ—˜

๐Ÿ”น์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ์˜ Apple Sign-In ๋ฏธ์ง€์› ๋ฌธ์ œ

๋ฌธ์ œ์ 

  • Apple Sign-In์€ iOS์™€ Web ํ™˜๊ฒฝ์—์„œ๋งŒ ๊ณต์‹ ์ง€์›
  • iOS์—์„œ Android๋กœ ๊ธฐ๊ธฐ ๋ณ€๊ฒฝ ์‹œ ๊ณ„์ • ์ด์ „์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • Android WebView + ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•ด ์šฐํšŒ ๋กœ๊ทธ์ธ ๊ตฌ์กฐ ์„ค๊ณ„
  • Apple Sign-In ์›นํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ redirect_uri๋ฅผ ์„œ๋ฒ„๋กœ ์ง€์ •ํ•˜์—ฌ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ์ˆ˜์‹  ๊ฐ€๋Šฅ
  • redirect_uri์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒ์„ฑํ•œ UUID๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์„œ๋ฒ„์— ๊ฐ™์ด ์ „๋‹ฌ
  • ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒ์„ฑํ•œ UUID๋ฅผ ๊ฐ€์ง€๊ณ  ์„œ๋ฒ„์—์„œ ์• ํ”Œ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋งค์นญ ๊ฐ€๋Šฅ

๊ฒฐ๊ณผ

  • Android์—์„œ๋„ Apple ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ
  • ํด๋ผ์ด์–ธํŠธ๋Š” UUID๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์—์„œ ์ธ์ฆ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒ
  • ๊ธฐ์กด์— ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ธ์ฆ ํ”Œ๋žซํผ์„ ์›น์œผ๋กœ ์šฐํšŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›€

๐Ÿ”น์ข…๋‹จ๊ฐ„ ์•”ํ˜ธํ™” ๊ตฌํ˜„ ๋„์ค‘ RSA ์•”ํ˜ธํ™”์˜ ํ…์ŠคํŠธ ๊ธธ์ด ์ œํ•œ ๋ฌธ์ œ

๋ฌธ์ œ์ 

  • RSA๋Š” ํ‚ค ํฌ๊ธฐ๋ณด๋‹ค ์•”ํ˜ธํ™” ํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์•ผ ํ•จ
  • ์•”ํ˜ธํ™” ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ธธ์ด์— ์ œํ•œ์ด ์กด์žฌํ•ด ๊ธด ํ…์ŠคํŠธ๋ฅผ ์•”ํ˜ธํ™” ํ•  ์ˆ˜ ์—†์Œ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • AES์™€ RSA๋ฅผ ํ˜ผํ•ฉํ•ด์„œ ์ ์šฉ
    • ํƒ€๊ฒŸ ํ…์ŠคํŠธ๋ฅผ ๋žœ๋ค ์ƒ์„ฑํ•œ AES ํ‚ค๋กœ ์•”ํ˜ธํ™”
    • AES ํ‚ค๋ฅผ RSA ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”
  • ๋‘ ์•”ํ˜ธํ™”๋œ ํ…์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ ํ…์ŠคํŠธ ์ฑ„ํŒ…์œผ๋กœ ๋ฌถ์–ด์„œ ์„œ๋ฒ„๋กœ ์ „์†ก

๊ฒฐ๊ณผ

  • ๋ฌธ์žฅ์˜ ๊ธธ์ด ์ œํ•œ ์—†์ด ์•”ํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง
  • RSA์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์•”ํ˜ธํ™”์˜ ์•ˆ์ •์„ฑ์ด ๋”์šฑ ์ƒ์Šนํ•จ

๐Ÿ”ธ์ข…๋‹จ๊ฐ„ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์˜ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์„œ๋น„์Šค ๋ฐฉํ–ฅ์„ฑ ๋ณ€๊ฒฝ ๊ฒฐ์ •

๋ฌธ์ œ

  • ํ‚ค ๊ด€๋ฆฌ ๋กœ์ง์ด ๋ณต์žกํ•ด์„œ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•จ
  • ์ปคํ”Œ ์–‘์ธก์ด ๋™์‹œ์— ๋ฐ์ดํ„ฐ ์†์‹ค๋กœ ์ธํ•œ ๊ฐœ์ธํ‚ค๋ฅผ ๋ถ„์‹คํ•˜๋ฉด ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ฆฌ์Šคํฌ ์กด์žฌ

๊ฒฐ์ • ๋ฐฐ๊ฒฝ

  • ์œ ์ €๋“ค์€ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์˜ ํ•„์š”์„ฑ์„ ํฌ๊ฒŒ ๋А๋ผ์ง€ ์•Š์Œ
  • ๊ธฐ์กด ์ข…๋‹จ๊ฐ„ ์•”ํ˜ธํ™” ์ฑ„ํŒ… ์•ฑ(ํ…”๋ ˆ๊ทธ๋žจ ๋“ฑ)์— ๋Œ€ํ•œ ์‚ฌํšŒ์  ์ธ์‹ ์•…ํ™”

๊ฒฐ๋ก 

  • ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์€ MVP ๋ฒ„์ „๊นŒ์ง€๋งŒ ์œ ์ง€
  • Release ๋ฒ„์ „์—์„œ๋Š” ๊ธฐ๋Šฅ ์ œ๊ฑฐ

๐Ÿ”„ ๊ฐœ์„  ๋ฐฉํ–ฅ

๐Ÿ”น Data Layer ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฌธ์ œ

๋ฌธ์ œ

  • Data Layer ๋‚ด๋ถ€์˜ DataSource๋งˆ๋‹ค interface๋ฅผ ๋งŒ๋“ค์–ด ๋†“์Œ
  • ๋ถˆํ•„์š”ํ•œ boilerplate ์ฝ”๋“œ ์ฆ๊ฐ€

๊ฐœ์„  ๋ฐฉํ–ฅ

  • DataSource๋Š” ์–ด์ฐจํ”ผ ์™ธ๋ถ€(Domain, Presentation)์— ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ interface ์ œ๊ฑฐ

๋ฐฐ์šด ์ 

  • Clean Architecture๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด ์•„๋‹Œ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฏ€๋กœ ๋„ˆ๋ฌด ์—„๊ฒฉํ•˜๊ณ  ์ง€์—ฝ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์€ ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์›€

๐Ÿ”น JWT ํ† ํฐ ๊ด€๋ฆฌ ๋ฐฉ์‹ ๊ฐœ์„  ํ•„์š”

๋ฌธ์ œ

  • API ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ํ† ํฐ ๋งŒ๋ฃŒ ์—ฌ๋ถ€๋ฅผ UseCase์—์„œ ์ง์ ‘ ์ฒดํฌ
  • boilerplate ์ฝ”๋“œ ์ฆ๊ฐ€ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€

๊ฐœ์„  ๋ฐฉํ–ฅ

  • ์ธ์ฆ ๋กœ์ง์„ Data Layer์˜ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ์ฝ”๋“œ๋กœ ์œ„์ž„
  • OkHttp Interceptor๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ ์ž๋™ ๊ฐฑ์‹  ์ฒ˜๋ฆฌ

๋ฐฐ์šด ์ 

  • ๋ฐ˜๋ณต๋˜๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์— ๋™์ผํ•œ ๋กœ์ง์„ ์ผ๊ด€์ ์œผ๋กœ ์ ์šฉํ•ด์ฃผ๋Š” OkHttp Interceptor๋ฅผ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋จ

๐Ÿ”น ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌ์กฐ์˜ ํ•œ๊ณ„

๋ฌธ์ œ

  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ Firebase Cloud Messaging(FCM) ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„
  • FCM ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฉ”์‹œ์ง€๊ฐ„์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์–ด๋ ค์›€
  • ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€ ์‹œ ํŒŒ์ด์–ด๋ฒ ์ด์Šค ๋น„์šฉ์ด ๋ถ€๋‹ด๋จ

๊ฐœ์„  ๋ฐฉํ–ฅ

  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋กœ์ง์„ WebSocket ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜ ์˜ˆ์ •
  • FCM์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•Œ๋ฆผ ์šฉ๋„๋กœ๋งŒ ์œ ์ง€

๋ฐฐ์šด ์ 

  • FCM์œผ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ํฌ์–ด๊ทธ๋ผ์šด๋“œ UI๋ฅผ ๋„์šฐ์ง€ ์•Š๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋จ
  • WebSocket์€ FCM๊ณผ ๋‹ฌ๋ฆฌ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Ping-Pong ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“ฑ Keep-alive ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™œ์šฉํ•œ ์—ฐ๊ฒฐ ์œ ์ง€ ๋กœ์ง์„ ์ง์ ‘ ์„ค๊ณ„ํ•ด์•ผํ•˜์ง€๋งŒ ๋•๋ถ„์— ์ฑ„ํŒ… ์ฝ์Œ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๋” ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋จ

๐Ÿ”— ๋งํฌ

About

Android app for couples to communicate and share messages in a private space

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published