[์•„ํ‚คํ…์ฒ˜] Repository/DataSource in Data Layer

๐Ÿ’ก์•ˆ๋“œ๋กœ์ด๋“œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์—์„œ Data Layer ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” Repository, DataSourece์— ๋Œ€ํ•˜์—ฌ ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์•„ํ‚คํ…์ฒ˜ ์›์น™

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

์ง€์†์ ์ธ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

  • OS์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ์ œ๊ฑฐํ•ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ๋ถˆ์•ˆ์ •ํ•˜๊ฑฐ๋‚˜ ๋น„์—ฐ๊ฒฐ ์ƒํƒœ์—๋„ ์•ฑ์ด ๋™์ž‘ ํ•ฉ๋‹ˆ๋‹ค.

SSOT

  • Single source of truth์˜ ์•ฝ์ž๋กœ ๋‹จ์ผ ์†Œ์Šค ์ €์žฅ์†Œ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.
  • Repository์— ๋…ธ์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Š” ์ผ๊ด€๋˜๊ณ  ์ตœ์‹ ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ, ํŠน์ • ์œ ํ˜• ๋ฐ์ดํ„ฐ์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์œ ํ˜•์ด ์กฐ์ž‘ํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ , ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ์ถ”์ ํ•˜์—ฌ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค์˜ ์ถœ์ฒ˜๋Š” ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค์ผ ์ˆ˜๋„ ์žˆ๊ณ , Repository์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์—์„œ๋งŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์™ธ๋ถ€์—์„œ๋Š” ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์—ฌ ์•ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Data Layer

  • ๋ฐ์ดํ„ฐ ๊ณ„์ธต์€ ๊ฐ N๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” Repository๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์•ฑ์— ๊ฐ€์น˜๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์š”์†Œ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์ƒ์„ฑ, ๋ณ€๊ฒฝ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

https://developer.android.com/topic/architecture/data-layer?hl=ko

 

๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด  |  Android Developers

์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. UI ๋ ˆ์ด์–ด์—๋Š” UI ๊ด€๋ จ ์ƒํƒœ ๋ฐ UI ๋กœ์ง์ด

developer.android.com

๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ์•„ํ‚คํ…์ฒ˜

  • ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด๋Š” 0๊ฐœ๋ถ€ํ„ฐ n๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๊ฐ๊ฐ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ(Repository)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ์•ฑ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ณ„๋กœ ์ €์žฅ์†Œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ๋ฐ์ดํ„ฐ ๋…ธ์ถœ
    • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•œ ๊ณณ์— ์ง‘์ค‘
    • ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ฐ„์˜ ์ถฉ๋Œ ํ•ด๊ฒฐ
    • ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์—์„œ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์ถ”์ƒํ™”
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํฌํ•จ

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ํ•ด๋‹น ๋ ˆ์ด์–ด์—์„œ ๋…ธ์ถœ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ฐ’์„ ์ผ๊ด€๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋งŒ๋“ค ์œ„ํ—˜์ด ์žˆ๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜ํ•œ ์กฐ์ž‘์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์ˆ˜์ค€์˜ Data Layer

  • ๋” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์ด ํฌํ•จ๋œ ์ผ๋ถ€ ๊ฒฝ์šฐ์—๋Š” ์ €์žฅ์†Œ๊ฐ€ ๋‹ค๋ฅธ ์ €์žฅ์†Œ์— ์ข…์†๋˜์–ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ์ง‘๊ณ„์ด๊ฑฐ๋‚˜ ์ฑ…์ž„์ด ๋‹ค๋ฅธ ์ €์žฅ์†Œ ํด๋ž˜์Šค์— ์บก์Šํ™”๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Repository

  • Repository ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์ ‘๊ทผ์„ ๋‹จ์ผ ์ง„์ž…์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ViewModel์ด ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์„ ์•Œ ํ•„์š” ์—†์ด, Repository๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ 

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ต์ฒด๊ฐ€ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•  ๋•Œ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง‘๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋‹จ์ผ Repository๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • Repository๋ฅผ Mockingํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.

DataSource

  • DataSource ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ๋Œ€ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋„คํŠธ์›Œํฌ API, ์บ์‹œ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ 

  • ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋กœ์ง์„ ์บก์Šํ™”ํ•˜์—ฌ, ์†Œ์Šค ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Repository๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Repository/DataSource ํŒจํ„ด์˜ ๊ตฌ์กฐ

Repository

  • ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ๋‹จ์ผ ์ง„์ž…์  ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋งž๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•ฉ๋‹ˆ๋‹ค.

LocalDataSource

  • ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ DataSource์ž…๋‹ˆ๋‹ค.

RemoteDataSource

  • ๋„คํŠธ์›Œํฌ API๋‚˜ ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” DataSource์ž…๋‹ˆ๋‹ค.

ViewModel, UseCase

  • Repository๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.
  • UseCase๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์”ฉ๋งŒ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜์—ฌ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌ

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

์ฐธ๊ณ 

https://velog.io/@hs0204/์•ˆ๋“œ๋กœ์ด๋“œ-์•„ํ‚คํ…์ฒ˜๋ฅผ-๊ณต๋ถ€ํ•ด๋ณด์ž