๋ฆฌํฉํ ๋ง 2ํ์ ๊ณต๋ถํ๋ค๊ฐ Repository ํจํด์ด ๋์์ ๋ฐ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
Repository ํจํด์ด๋
๋ฐ์ดํฐ์ ์ํธ์์ฉํ๋ ๋ฐ ํ์ํ ๋ ผ๋ฆฌ๋ฅผ ์บก์ํํ๋๋ฐ ์ค์ ์ ๋ ํด๋์ค ๋ชจ์์ผ๋ก ์ ์ํ ์ ์๋ค.
๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ํ์๋ฉด, ๋ฐ์ดํฐ ์ถ์ฒ(๋ก์ปฌ DB, ์๋ฒ API ์๋ต ๋ฑ)์ ๊ด๊ณ ์์ด ๋์ผ ์ธํฐํ์ด์ค๋ก ๋ฐ์ดํฐ์ ์ ์ํ ์ ์๋๋ก ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๊ด๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค.
๋์ ๋ฐฐ๊ฒฝ
๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ Domain์์๋ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์์ผ๋ฉฐ ViewModel์ ๋ฐ์ดํฐ ์ถ์ฒ๋ฅผ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๊ณ ์ฌ๋ฌ Repository๋ฅผ ๊ณต์ ํ๋๋ผ๋ ์ผ๊ด๋ Interface๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ํ๋ก๊ทธ๋จ์ ํต์ฌ์ด ๋๋ ์์์ด๋ฉฐ, ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ง์ผ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ถํ ์ ์๋ค. ์ด๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์น์๋น์ค ๋ฑ์ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ ๊ทผํ๊ฒ ๋๋๋ฐ ์ด ๊ณผ์ ์์ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ฃผ๋ก ์ค๋ณต๋๋ ์ฝ๋, ์ค๋ฅ๋ฅผ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋, ์คํ, ๋น์ฆ๋์ค ๋ก์ง ํ ์คํธ์ ์ด๋ ค์ ๋ฑ์ด ์๋ค.
์ด์ ๋ฐ๋ผ ๋ช ๊ฐ์ง ์๊ตฌ์ฌํญ์ด ๋ฐ์ํ๋๋ฐ,
(1) ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๊ณ
(2) ์ค์ ์ง์ค ์ฒ๋ฆฌ ๋ฐฉ์์ ํตํด ์ผ๊ด๋ ๋ฐ์ดํฐ์ ๋ก์ง์ ์ ๊ณตํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
Repository ํจํด ๋์ ์
์ ์บก์ฒ์์ ๊ณ์ ์ค์ ์ปจํธ๋กค๋ฌ์ ์ ํ ์ปจํธ๋กค๋ฌ๊ฐ ๋ชจ๋ ์ฌ์ฉ์์ ์ด๋ฆ์ ๊ฒ์ํ๊ธฐ ์ํด์
์์ฒด์ ์ธ ์ฌ์ฉ์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ ์๋ค. (์ฝ๋ ์ค๋ณต)
Repository ํจํด ๋์ ํ
๊ฐ์ ํ ์ฝ๋๋, ๋ฐ์ดํฐ ์ก์ธ์ค ์ฝ๋๊ฐ ์ค์ ์ง์คํ๋๊ณ ์ฝ๋ ์ค๋ณต์ด ์ฌ๋ผ์ก๋ค.
๋ฐ์ดํฐ์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ฑ ์๋ ์ด์ ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด๊ฐ ์ด์ ์ธํ๋ผ ๊ณ์ธต์์ ๋ถ๋ฆฌ๋์ด ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๋ณ๊ฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ฑ ์๋ ์ด์ ํ๋ค.
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํธ๋กค๋ฌ์ ๋ํ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์ ๋์๋ง ์ ์ํ๊ณ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ณดํธํ ์ ์๋ค.
ํน์ orm apis์ ๊ฐ์ ๋ฐ์ดํฐ ์ก์ธ์ค์์ ์ค๊ณ ์ ํ์ ๊ณ ๋ คํ ๋ ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ค.
์ด ๊ธฐ์ ์ ํต์ฌ์ ์ฝ๋๊ฐ ๋ ๋์จํ๊ฒ ๊ฒฐํฉ๋ ์๋ก ๋ณ๊ฒฝ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฌ์์ง๊ณ ์ ๋ฐ์ ์ผ๋ก ๋ ํฐ ์ ์ฐ์ฑ์ ๊ฐ๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค.
๋์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ ์์ค ์ธํ๋ผ์ ์ฝ๋งค์ด์ง ์๊ฒ ๋๋ค.
Repository ํจํด : ์์ฝ ๋ฐ ์ ๋ฆฌ
ํน์ฑ
(1) ๋ฐ์ดํฐ๊ฐ ์๋ ์ฌ๋ฌ ์ ์ฅ์(Local Data Source, Remote Data Source)๋ฅผ ์ถ์ํํ์ฌ ์ค์ ์ง์ค ์ฒ๋ฆฌ ๋ฐฉ์์ ๊ตฌํํ ์ ์๋ค.
(2) ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ Domain์์๋ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ViewModel์์๋ ๋ฐ์ดํฐ๊ฐ ๋ก์ปฌ DB์์ ์ค๋์ง, ์๋ฒ์์ API ์๋ต์ ํตํด ์ค๋ ๊ฒ์ธ์ง ์ถ์ฒ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค. Repository๋ฅผ ์ฐธ์กฐํ์ฌ Repository๊ฐ ์ ๊ณตํด์ฃผ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
(3) Repository๊ฐ ์ถ์ํ๋์ด ์์ผ๋ฏ๋ก ํญ์ ๊ฐ์ Interface๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์๋ค.
ViewModel์ด ์ฌ๋ฌ Repository๋ฅผ ๊ณต์ ํ๋๋ผ๋ ์ผ๊ด๋ Interface๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ๋ํ ์ ์งํ ์ ์๋ค.
์ฅ์
(1) ๋ฐ์ดํฐ ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ ์ ์๋ค
(2) Domain์์๋ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์๋ค.
(3) ๋ฐ์ดํฐ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ์บก์ํํ ์ ์๋ค. ๊ฐ์ฒด์งํฅ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ๋ ์ ํฉํ๋ค.
(4) ๋จ์ ํ ์คํธ๋ฅผ ํตํ ๊ฒ์ฆ์ด ๊ฐ๋ฅํ๋ค.
(5) ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๊ฐ์ํ๋ค.
(6) ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด์ ์ธ ๋์์ธ์ด ๋ฐ๋๋๋ผ๋ ์ ์ฉํ ์ ์๋ ์ ์ฐํ ์ํคํ ์ณ์ด๋ค.
๊ธฐํ ์ฐธ๊ณ : https://velog.io/@shinsw627/Repository-Pattern-%EA%B5%AC%ED%98%84
https://4z7l.github.io/2020/11/24/repository-pattern.html
'๋์์ธํจํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธํจํด] MVC (0) | 2022.05.24 |
---|