[ํฐ๋] ํฐ๋ ํด๋ฆฐ์ํคํ ์ฒ๋ฅผ ํฅํด์ ๐จ
์๋
ํ์ธ์ ํฐํ์ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ์ ์ฑํ์
๋๋ค๐๐๐๐๐
์ ๋ฒ์ ๋ง์๋๋ฆฐ ๋์์ธ ํจํด์ ์ด์ด์ Clean Architecture์ ๋ํ ์ค๋ช ์ ์ด์ด๊ฐ๋ ค ํฉ๋๋ค!
์ ์ด๋ ๊ฒ ๋ค๋ค ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ๋์ ํ๋ ค ํ๋ ๊ฑธ๊น์??
์ด ์ด์ ์ ๋ํด ์๊ฐํ๊ธฐ์ํด์๋ ๋จผ์ ์๊ฐํด๋ณด์์ผ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๐ฉ๐ป ๊ธฐ๋ฅ VS ๊ตฌ์กฐ ?
์ฑ์ ๋ณผ ๋ ๊ธฐ๋ฅ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ์๋์? ์๋๋ฉด ๊ตฌ์กฐ๊ฐ ์ค์ํ๋ค๊ณ ์๊ฐํ์๋์?
๊ธฐ๋ฅ์ ์ฑ์ ๊ฐ์น๋ฅผ ๋ง๋ค์ด ๋ธ๋ค๋ ์ ์์ ๊ธฐ๋ฅ์ด ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ์ฌ๋์ด ์๊ณ
๊ธฐ๋ฅ๊ณผ ์ถ๊ฐ์ ์์ ์ ์ฉ์ดํ๊ฒ ํ๋ ๊ตฌ์กฐ๊ฐ ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ์ฌ๋์ด ์์ ๊ฒ์ ๋๋ค.
์ฌ์ค ์ ๋ ์๋ ๊ธฐ๋ฅํ์์ต๋๋ค...
์ผ๋จ ๊ธฐ๋ฅ์ด ์์ด์ผ ์ฑ์ ๊ฐ์น๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ์ด ์๋ง์ธ๋ฐ ๊ตฌ์กฐ๊ฐ ์๋ฒฝํด๋ ๊ทธ๊ฒ ๋ฌด์จ ์์ฉ์ด์ผ ๐คท๐ปโ๋ผ๊ณ ์๊ฐํ๋ ์ฌ๋์ด์์ต๋๋ค.
๊ทธ๋ฌ๋๊น ํฐ๋์ ๋ฆฌํฉํ ๋ง ํ๊ธฐ ์ ๊น์ง ๋ง์ด์ฃ ...
.
.
์ ๋ ํฐ๋์ ๋ฆฌํฉํฐ๋ง ํ๋ฉฐ '์ํํธ์จ์ด ๋น์ฉ'์ ๋ํ ์๊ฐ์ ๋ ๊น๊ฒ ํ๊ฒ ๋์์ต๋๋ค.
์ํํธ์จ์ด ๋น์ฉ์์ ๊ฐ๋ฐ ๋จ๊ณ๋ณด๋จ ์ ์ง๋ณด์์์ ๋น์ฉ์ด ๋ ๋ง์ด ๋ค์ด๊ฐ๋ค๋ ์ฌ์ค์ ๋ค์ด๋ณด์ จ์ ๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค.
์ ๋ ์ค์ ํฐ๋์ ๋ฆด๋ฆฌ์ฆํ๋ฉฐ ์์ํ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์๋ ์ ๋ ํ ์คํธ์ ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
์ ๋ํ ์คํธ์์ด ํ๋ํ๋ ๋ค์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ ์๊ตฌ์ฌํญ์ ๋์น๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ ์ด๋ฐ Testable ํ๊ณ ์ ์ง๋ณด์์ ๋ ํฐ ๋น์ฉ์ ๋ค์ด๋ ์ ์ ๋ณด์ํ๊ธฐ ์ํด ์ข์ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ณ ์ฐฐ์ ํ๊ธฐ ์์ํ์ต๋๋ค.
๐ฉ๐ป ์ข์ ๊ตฌ์กฐ ?
์ข์ ๊ตฌ์กฐ? ์ข์ ๊ตฌ์กฐ๊ฐ ๋ญ์ผ..?
์ผ๋ฐ์ ์ผ๋ก ์ข์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ค์ํ ํจ๋ฌ๋ค์, ์ค๊ณ์์น(SOLID), ์์ง์์น ๋ฑ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ์ ๋๋ค.
ํด๋ฆฐ ์ํคํ ์ฒ๋ ์ด๋ค ์ํฉ์์ ๋์จ ๊ฒ์ผ๊น์?
๊ธฐ์กด ํ๋ก์ ํธ์์ DB๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํด์ ์ ์ฒด ํ๋ก์ ํธ๊ฐ ์ํฅ๋ฐ๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ณ '์์กด์ฑ ์ญ์ '์ด๋ผ๋ ๋๋ฉ์ธ ์ค์ฌ์ ํด๋ฆฐ ์ํคํ ์ฒ๊ฐ ๋๋๋๊ธฐ ์์ํ์ต๋๋ค.
* Clean Architecture์ ํน์ง : ํต์ฌ ๊ท์น์ ๋ด๊ณ ์๋ ๋๋ฉ์ธ์ด ์ค์ฌ์ด๋ฉฐ, ๋๋ฉ์ธ์ด ์ธ๋ถ ์ฌํญ์ ์์กดํ์ง ์๋๋ค.
๊ทธ๋ผ ํด๋ฆฐ ์ํคํ ์ฒ์ ๋ํ ๋ด์ฉ์ ๋ ์์๋ณผ๊น์?
๐ฉ๐ป Clean Architecture ์ค๋ช
ํด๋ฆฐ ์ํคํ ์ฒํ๋ฉด ํํ๋ค ๋ณผ ์ ์๋ ๊ทธ๋ฆผ์ด์ฃ ?
"Clean Architecture"๋ ์ํํธ์จ์ด ์ค๊ณ์ ํ ๋ฐฉ์์ผ๋ก, ์์คํ ์ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ณ , ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ฉฐ, ๋ ๋ฆฝ์ ์ธ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ๋ ๋ฐ ์ด์ ์ ๋ง์ถฅ๋๋ค. ์ด ์ํคํ ์ฒ๋ ํฌ๊ฒ ๋ค ๊ฐ์ง ์ฃผ์ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค:
1. ์ํฐํฐ (Entities)
์ด ๊ณ์ธต์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ์ ์ด๋ฃจ๋ ๋๋ฉ์ธ ๊ฐ์ฒด๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ํฐํฐ๋ค์ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๊ท์น์ ๋ด๋นํ๋ฉฐ, ์ธ๋ถ ์์์๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ด์๋ฉ๋๋ค. ์ด๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ค์ฌ์ ์ธ ๋ถ๋ถ์ผ๋ก, ๊ฐ์ฅ ๋์ ์์ค์ ์ ์ฑ ์ ๊ตฌํํฉ๋๋ค.
2. ์ ์ฆ ์ผ์ด์ค(Use cases)
์ด ๊ณ์ธต์ ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ฐ์ดํฐ์ ์ ์ฅ์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)์ ๊ฐ์ ์ธ๋ถ ์์๋ค์ ๋ํ ๊ด์ฌ์ ํฌํจ๋์ง ์์ต๋๋ค. ๋์ , ์ด ๊ณ์ธต์ ์ฃผ๋ก ์ํฐํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
3. ์ธํฐํ์ด์ค ์ด๋ํฐ (Interface Adapter)
์ด ๊ณ์ธต์ ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์ ๋ฐ์ดํฐ์ ์ธ๋ถ ์ธ๊ณ(์: ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์น, UI) ๊ฐ์ ํต์ ์ ๋ด๋นํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ํํ๋ก ๋ณํํ๊ฑฐ๋, ๋ฐ๋๋ก ์ธ๋ถ์ ์ ํฉํ ํํ๋ก ๋ณํํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ณ์ธต์ ์ธ๋ถ ์ธ๊ณ์ ๋ด๋ถ ๋ก์ง ๊ฐ์ ๊ต๋ ์ญํ ์ ํฉ๋๋ค.
4. ์ธ๋ถ์์: ํ๋ ์์ํฌ์ ๋๋ผ์ด๋ฒ (Frameworks & Drivers)
์ด ๊ณ์ธต์ ํน์ ํ๋ ์์ํฌ๋ ๊ธฐ์ ์ ์์กดํ๋ ๋ถ๋ถ์ ์๋ฏธํฉ๋๋ค. ์ด๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ ๋ถ๋ถ์ ๊ตฌ์ฑํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์น ํ๋ ์์ํฌ, ๊ธฐํ ์ธ๋ถ ์ธํฐํ์ด์ค์์ ํต์ ์ ๋ด๋นํฉ๋๋ค.
ํด๋ฆฐ ์ํคํ ์ฒ์ ์ด๋ฌํ layer๋ ๊ธฐ์ค์ด ์ ๋งคํด ๋น์ทํ ํน์ง์ ๊ฐ์ง ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ํตํ์ฌ ๋ ๋ง์ ๋ด์ฉ์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
๐ฉ๐ป Hexagonal Architecture ์ค๋ช
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ์ํํธ์จ์ด ์ค๊ณ์์ ์ฌ์ฉ๋๋ ํจํด์ผ๋ก, ํด๋ฆฐ ์ํคํ ์ฒ์ ์ ์ฌํ ์์น์ ๋ฐ๋ฅด์ง๋ง ๋ช ๊ฐ์ง ์ฃผ์ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ "Ports and Adapters" ํจํด์ผ๋ก๋ ์๋ ค์ ธ ์์ผ๋ฉฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋ก์ง์ ์ธ๋ถ ์์๋ก๋ถํฐ ๊ฒฉ๋ฆฌ์ํค๋ ๋ฐ ์ด์ ์ ๋ง์ถฅ๋๋ค. ์ฃผ์ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํต์ฌ ๋ก์ง (Core Logic): ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํฉ๋๋ค. ์ด ๋ก์ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ค์ฌ์ ์ธ ๋ถ๋ถ์ผ๋ก, ๋ณ๊ฒฝ์ด ํ์ํ์ง ์์ ์์ ์ ์ธ ์ฝ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ํฌํธ (Ports): ํต์ฌ ๋ก์ง๊ณผ ์ธ๋ถ ์์(์: ์ฌ์ฉ์ ์ธํฐํ์ด์ค, ๋ฐ์ดํฐ๋ฒ ์ด์ค) ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ํฌํธ๋ ํต์ฌ ๋ก์ง์ ์ธ๋ถ ์ธ๊ณ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ์ํค๊ณ , ์ธ๋ถ ์์๊ฐ ํต์ฌ ๋ก์ง๊ณผ ํต์ ํ ์ ์๊ฒ ํฉ๋๋ค.
- ์ด๋ํฐ (Adapters): ์ค์ ์ธ๋ถ ์์(์: ์น ์๋ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ํต์ฌ ๋ก์ง ์ฌ์ด์ ์ฐ๊ฒฐ ์ญํ ์ ํฉ๋๋ค. ์ด๋ํฐ๋ ํฌํธ๋ฅผ ํตํด ํต์ฌ ๋ก์ง๊ณผ ํต์ ํ๋ฉฐ, ์ธ๋ถ ์์์์ ๋ฐ์ดํฐ ๋ณํ์ ๋ด๋นํฉ๋๋ค.
๐ฉ๐ป ํฐ๋์ ๋ชฉํ
๊ทธ๋์ ํฐ๋ ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅด๋ ค๊ณ ํฉ๋๋ค.
๋ฌผ๋ก ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ฐ๋ฅด๋ผ๋ ๋ง์์ ๋๋ฆฌ๋ ๊ฒ ์๋๋ฉฐ ์ฝ๋์ ์์ด ๋ง์์ง๊ณ ํจํค์ง๋ ๋ง์์ง๊ณ ๋ณต์ก๋๊ฐ ๋์์ง๋ ๋ฑ ๋ค์ํ ๋จ์ ๋ค๋ ์กด์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ค๋ค ๋ณธ์ธ์ ํ๋ก์ ํธ์ ๋ง๋ ์ํคํ ์ฒ๋ฅผ ์ ํํด์ ๊ฐ๋ฐํ์๊ธธ ๋ฐ๋๋๋ค :)
์๋์ ๋งํฌ๋ ์ ๊ฐ ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ๊ณต๋ถํ๋ฉฐ ๊ฐ์ฅ ๋ง์ ๋์์ด ๋์๋ ์ฐ์ํ ํ ํฌ์ 10๋ถ ๋ฐํฌํก์ ๋๋ค.
[10๋ถ ํ ์ฝํก] ๋๋, ๋ค์ฆ์ ํด๋ฆฐ ์ํคํ ์ฒ
https://www.youtube.com/watch?v=Ql7CoQminoM&t=948s
ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ํฅํด ์ด์ฌํ ๋ฆฌํฉํ ๋ง ํ๊ณ ์๋ ํฐ๋์ ๊ธฐ๋ํด ์ฃผ์ธ์!!
๋ค์ ๊ธ๋ ๊ธฐ๋ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค:)๐ค
๊ฐ์ฌํฉ๋๋ค!!
โฌ๏ธ ์ง๊ธ ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์์ ํฐ๋ ๋ค์ด ๋ฐ๊ธฐ
https://play.google.com/store/apps/details?id=com.team7.tikkle&hl=ko-KR

๐ฉ Contact : wjdcogus6@gmail.com
๐ฒ SNS : https://www.instagram.com/chaeehyuny/
'๐ฉโ๐ป TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TECH] ์๋ฒ API ์ฑ๋ฅ๊ฐ์ ๊ธฐ(2) (0) | 2023.10.31 |
---|---|
[TECH] ์๋๋ก์ด๋ ๋ค์ํ ์ํคํ ์ณ ํจํด(MVC, MVP, MVVM) (0) | 2023.10.19 |
[TECH] ๊ฐ์ธ์ ๋ณด์ ๊ฐ๋ช ์ ๋ณด ๊ทธ๋ฆฌ๊ณ ์ต๋ช ์ ๋ณด๋? (1) | 2023.10.11 |
[TECH] ์๋ฒ API ์ฑ๋ฅ๊ฐ์ ๊ธฐ(1) (0) | 2023.09.27 |
[TECH] Kotlin Coroutine์ ์จ์ผํ๋ ์ด์ (0) | 2023.09.22 |