์ก์๋ฆฌ2
by JiwonDevhttps://www.youtube.com/watch?v=26S4VFUWlJM
๋งํด ํ์ธ๋ฌ๊ฐ ์ด๋ ๊ฒ.
Transaction Script (์ ์ฐจ์งํฅ)
Domain Model (๊ฐ์ฒด์งํฅ)
* Table Module ํจํด (ํ ์ด๋ธ = Entity ์์ ๋์ผํ๊ฒ ์ฌ์ฉ)์ ์๋ฐ์ชฝ์์ ๊ฑฐ์ ์ฌ์ฉ์ํจ.
๐ญ ๋๋ฉ์ธ ๋ ์ด์ด๊ฐ ์ ์ฒด ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ๋ค.
๋๋ฉ์ธ์ ์ด๋ป๊ฒ ์ง๋๋์ ๋ฐ๋ผ ์ํคํ ์ฒ ๊ตฌ์ฑ์ด ๋ฌ๋ผ์ง๋ค.
๐ญ ์๊ตฌ์ฌํญ ์ดํด๋ณด๊ธฐ
์จ๋ผ์ธ ์ํ ์๋งค ์์คํ ์ Transcation Script์ Domain Model๋ก ๋๋์ด์ ๊ตฌํํด๋ณด์.
๋น์ฆ๋์ค ๊ธฐ๋ฅ : ์ํ๋ฅผ ์๋งคํ๋ค.
๋๋ฉ์ธ ๊ฐ๋ : ์์คํ ์ ๊ตฌํํ๋ ๊ฐ๋ ๋ค
[์ํ] - ๋ฉํ๋ฐ์ดํฐ. ์ํ์ ๋ํ ์ ๋ณด
[์์] - ์๋งคํ ์ฃผ์ฒด
[ํ ์ธ] - ์๋น์๋ฅผ ํน์ ํ ์๊ฐ๋๋ก ์ ๋ํ๊ธฐ ์ํ ํ ์ธ
ํ ์ธ ์ ์ฑ : ๊ณ ์ ๊ธ์ก ํ ์ธ, ๋น์จ ํ ์ธ
ํ ์ธ ๊ท์น : ํน์ ์๊ฐ ํ ์ธ, ํน์ ์ ์ฑ ํ ์ธ(์์นจ์ํ, 10ํ ์์)
์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ถ์ํด๋ณด๋ฉด, ์๋์ ๊ฐ์ ์ต์ข ๋๋ฉ์ธ(๋๋ ํ๋ณด ๋๋ฉ์ธ)์ด ๋ง๋ค์ด์ง๋ค.
๐ญ 1. ํธ๋์ญ์ ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค์ด๋ณด๊ธฐ (์ ์ฐจ์งํฅ)
Process์ Data๊ฐ ๋ฐ๋ก ๋ ผ๋ค.
[๋ฐ์ดํฐ] ๋ฌด์์ ์ ์ฅํด์ผ ํ๋๊ฐ?
๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ทธ๋๋ก ๋ฐฐ์นํ [๋๋ฉ์ธ ํด๋์ค]๋ฅผ ๋ฐฐ์นํ๋ค - Anemic Domain Model (๋น์ฝํ ๋๋ฉ์ธ ๋ชจ๋ธ)
๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๋๋ฉ์ธ์ ์ฌ์ฉํ๊ธฐ ์ํ DAO(Data Access Object)๋ฅผ ๊ตฌ์ฑํ๋ค.
์ด์ [ํ๋ก์ธ์ค]๋ฅผ ๊ณ ๋ฏผํ๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น?
์ด์ ๋ง๋ค์ด์ง DAO๋ฅผ ๋ฐํ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๋ ๋ค.
public Reservation reserveShowing(int customerId, int showingId, int audienceCount){
๐ฉ1 //๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ถํฐ Moving, Showing, Rule ์กฐํ
๐ฉ2 //Showing์ ์์ฑํ ์ ์๋ Rule์ด ์กด์ฌํ๋์ง ํ๋จ
๐ฉ3 if(Rule์ด ์๋ค๋ฉด){
//Discount๋ฅผ ์ฝ์ด ํ ์ธ๋ ์๊ธ์ ๊ณ์ฐ
} else {
//ํ ์ธ ์์ด Moive์ ์ ๊ฐ๋ฅผ ์ด์ฉํด ์๊ธ ๊ณ์ฐ
}
๐ฉ4 //Reservation ์์ฑ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ
return result;
}
์ ํ์ ์ธ ํธ๋์ญ์ ์คํฌ๋ฆฝํธ์ ๊ตฌํ๋ฐฉ๋ฒ.
๋ชจ๋ ์๋น์ค๊ฐ ์คํฌ๋ฆฝํธ(์๋น์ค)์ ์ง์ค๋์ด ์๋ค.
๐ญ 2. ๋๋ฉ์ธ ๋ชจ๋ธ๋ก ๊ตฌํํ๊ธฐ (๊ฐ์ฒด์งํฅ)
๊ฐ์ฒด์งํฅ์ด๋. ์ฃผ์ด์ง ์ฑ ์์ ์ํํ๋ ๊ฐ์ฒด๋ค์ ํ๋ ฅ.
ํผ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๊ฐ์ฒด๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๊ฐ์ฒด๋ค์ด ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง ํ์ ํ๋ค. CRC ์นด๋
๊ฐ์ฒด๊ฐ ํ๋๊ณผ ์ํ๋ฅผ ํจ๊ป ๋ค๋ค์ผํ๋ค. (๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๊ฐ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ์ด์ผ ํ๋ค.)
๋ง๋ค์ด์ง ๋๋ฉ์ธ์ ๋ฐํ์ผ๋ก ์ฑ ์์ ๋ด๋นํ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๋ค. ์ด๋ ์๊ตฌ์ฌํญ์์ ๋ถํฐ ์ ์๋๋ค.
์ด์ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๋ค. ์์ ์ ์ฑ ์์ด ์๋ ์ผ์, ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ๋์์ ์์ํ๋ค.
์ฒ์๋ถํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๊ฒ ์๋๋ค. ๊ฐ ์๊ตฌ์ฌํญ๋ง๋ค ํ์ํ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด๋๊ฐ๋ค.
๊ฐ์ฒด๋ค์ ํ๋ ฅ๊ด๊ณ๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
์ด๋ฅผ ์ฑ ์ ์์(delegated) ๋๋ ๋ถ์ฐ(dispersed) ์ ์ด ์คํ์ผ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๊ฐ์ฒด์์ ๋ฃ์ง ์๋๋ค.
๊ฐ์ฒด๋ ์์ ์ด ๋งก์ ์ฑ ์๋ง ๋ด๋นํ ๋ฟ, ๋ณธ์ธ์ด ์ด๋์์ ํธ์ถ๋๋์ง์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค.
๋คํธ์ํฌ๋ DB ๊ฐ์ ๊ณณ์ ์ข ์์ฑ์ด ์๊ธฐ๋ฉด์ ํ ์คํธ๋ ์ด๋ ต๊ณ , ๊ฐ์ฒด๊ฐ ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ณ , ๋ฐ์ดํฐ ์์ง๋๊ฐ ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ํํ 4๋จ๊ณ ์ํคํ ์ฒ [ํํ-์๋น์ค-๋๋ฉ์ธ-์ธํ๋ผ]์์ ์ดํ๋ฆฌ์ผ์ด์ ๋ถ๋ถ์ ์๋น์ค์ ๋๊ธด๋ค.
์๋น์ค ๋ ์ด์ด๋ ๋๋ฉ์ธ์ ์ด์ฉํด์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ค. ํธ๋์ญ์ ๋ํ ์๋น์ค ๋ ์ด์ด ๋จ์๋ก ๊ฑธ๋ฆฐ๋ค.
๋๋ฉ์ธ์ ์ด๋ ํ ์ข ์์ฑ๋ ๊ฐ์ง์ง ์๋๋ค. ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ดํ๋ฆฌ์ผ์ด์ ๊ด์ฌ์ฌ -> ์๋น์ค
๋๋ฉ์ธ ๊ด์ฌ์ฌ -> ๋๋ฉ์ธ
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ๋ง๋ค๋ฉด DB๋ฅผ ์ง๊ธฐ ์ด๋ ต๋ค.
์? ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ DB ์คํค๋ง๋ ๋ถ์ผ์น ํ๊ธฐ ๋๋ฌธ์.
์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ฐ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ค์ํ์ง๋ง
DB๋ ๋ฐ์ดํฐ์ ์ค๋ณต, ์ฑ๋ฅ์ด ์ค์ํ๋ค. ์ ์ฐ์ฑ์ด ์ค์ํ์ง ์๋ค.
๊ทธ๋์ Mapper๋ฅผ ์จ์ ๊ฒฐํฉ๋๋ฅผ ๋๋ ๊ฒ์ด๋ค. (์ํผ๋์ค ๋ถ์ผ์น ํด๊ฒฐ)
์์ชฝ์ด ๊ฐ์์ ์ญํ ์ ์ถฉ์คํ ๋งก์ ์ ์๋๋ก. ๋ฐ๋ก ๋ฐ๋ก ๋ ์ ์๋๋ก
๋ฌด์์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
๋ณํ์ง ์๋ ๊ฒ์, ๋ชจ๋ ๊ฒ์ด ๋ณํ๋ค๋ ์ฌ์ค ๋ฟ์ด๋ค.
์ํํธ์จ์ด๋ ์ค๊ณ๋๊ฐ ์์ฑ๋ ๊ฑด์ถ๋ฌผ์ด ์๋๋ค.
๊ณ ๊ฐ๊ณผ ๊ณ์ํด์ ์ํตํ๋ฉด์ ๋์์์ด ๋ณํํ๊ณ ๊ฐ์ ๋๋ค.
์ฒ์ ๋ง๋ค๋ ํธ๋์ญ์ ์คํฌ๋ฆฝํธ๊ฐ DB๋ฅผ ๋ง๋ค๊ธฐ๋ ํธํ๊ณ , ๊ฐ๋จํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ ๋ณํ๋ฅผ ๊ฐ๋นํ๊ธฐ์ ๋๋ฌด ๋ฒ ์ฐจ๋ค. ์ฌ๋ฌ ์ฑ ์์ด ํ ๊ณณ์ ๋ญ์ณ์๊ณ , ์ธ๋ถ ๋คํธ์ํฌ, DB์๋ ๊ฐ๋ ฅํ๊ฒ ์ฐ๊ฒฐ๋์ด์๊ธฐ์ ํ ์คํธํ๊ธฐ๋ ์ด๋ ต๋ค. ๊ฒฐํฉ๋๊ฐ ๋๋ฌด ๋๋ค.
๋ ์์ง๋๊ฐ ๋ฎ์์, ๋ด๊ฐ ์์ ํ ๋ถ๋ถ์ ์ฐพ๊ธฐ ์ด๋ ต๋ค. ์ฌ๊ธฐ์ ๊ธฐ ๋ค ๋ค์ ธ์ผํ๋ค.
โก ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ , ๊ธฐ๋ฅ์ ์์ ํ์ ๋ ๋๋ ค์์ด ์๊ธด๋ค. ํ ์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ , ๋ณ๊ฒฝ์ด ์ฌ๊ธฐ์ ๊ธฐ ์ ํ๋๊ธฐ ๋๋ฌธ
๋ํ ๋ฉ์๋๊ฐ ๋๋ฌด ์ปค์ ํ ์คํธ ํ๋ ๊ฒ ์์ฒด๋ ๋๋ฌด ์ด๋ ต๋ค. ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ด ์จ์ด์๋ค. (์๋ฌต์ ์ด๋ค)
๋ณ๊ฒฝํ๊ธฐ ์ด๋ ค์ด ๊ฒ, ์ค์ํ ๊ฒ
์ผ์ฐ, ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒฐ์ ํ๊ณ ์ถ์ ๊ฒ
๊ฐ์ฒด์งํฅ์ ์ถ์ํ๋ฅผ ํตํด ํจ์จ์ ์ธ ์ปค๋ฎค๋์ผ์ด์ ํ ์ ์๋ค.
์ํ(Movie)๋ ํ ์ธ ์ ์ฑ (DiscountStrategy)์ ๋ฐ๋ผ ๊ฐ๊ฒฉ์ ํ ์ธ(Rule) ๋ฐ์ ์ ์์ด
์ด๋ ๊ฒ ๋๋ฉ์ธ์ ์ถ์ํํด์ ๋ฝ๊ณ , ๋ฝ์๊ฒ ๊ฒฐ๊ตญ Domain Layer Architecture
๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ณต์ก์ฑ์ ์๊ณ ๋ฆฌ์ฆ์์ ๋ถ๋ฆฌํ๊ณ , ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ก ๋ง๋ ๊ฒ
์ ํจ์ฑ ๊ฒ์ฌ, ๊ณ์ฐ๋ฑ ํฌํจ๋ ๋ณต์กํ๊ณ ๋์์์ด ๋ณํ๋ ๋น์ฆ๋์ค ๊ท์น์ ๊ตฌํํด์ผํ๋ค๋ฉด ์ข์ ๋ฐฉ๋ฒ
๐ญ ์๊ตฌ์ฌํญ์ด ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋ ์ง ์ ์ ์๋์?
๋ชฐ๋ผ์. Movie๋ฅผ ์ ์ธํ๊ณค ์ ๋ถ ๋ฐ๋ ์ ์์ด์.
๊ทธ๋์ ์ต๋ํ '๋จ์ํ๊ณ ๊น๋ํ๊ฒ' ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๊ณ์ํด์ ๋ฆฌํฉํ ๋ง ํด์ผํฉ๋๋ค.
'๐์ผ์ > ๋ฉํ ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์กด์ฑ์ ์ด์ฉํด ์ค๊ณ ์งํ์ํค๊ธฐ (0) | 2021.11.13 |
---|---|
์ก์๋ฆฌ3 (0) | 2021.11.12 |
์ก์๋ฆฌ1 (0) | 2021.11.12 |
ํ๋ก์ ํธ ๊ธฐํ (2021 11 06) (0) | 2021.11.06 |
2์ฃผ์ฐจ (0) | 2021.08.04 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev