์ฌํด 6์ ๋ง ์ฏค๋ถํฐ 8์ ์ด๊น์ง ๋ฌ๋ ธ๋ ๋์๋ฆฌ์์ Spring Boot, Java, MySQL์ ํ์ฉํ ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค.
๋์๋ฆฌ์์๋ ์ฅ๊ณ ๋ฅผ ๊ฐ๋ฅด์น๊ณ , ๊ฐ๋ฐ ๊ธฐ๊ฐ์ด ํฑ ์์ด ๋ถ์กฑํ๋ ํฐ๋ผ ์ถฉ๋ถํ ๊ณต๋ถํ๊ณ ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์๋ ์๊ฐ์ด ์ ์๋ค. ๊ทธ ๊ฒฐ๊ณผ 10์ ๋ง์ธ ์ง๊ธ๊น์ง ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ค๋นํ๋ฉฐ ๋์์ ๊พธ์คํ ๋ฆฌํฉํ ๋ง ํด์๋ค.
ํนํ ๊ฐ์ด ๊ฐ๋ฐํ๋ ํ์๋ ๋ฆฌํฉํ ๋ง์ ํ์์ฑ์ ๋๋ฌด ๋๊ผ๋ ํฐ๋ผ, ๋ ผ์ ํ ์์ํ๊ฒ ๋ฆฌํฉํ ๋ง ํ ์ ์์๋ค.
ํด๋น ํ๋ก์ ํธ ๋ด์ฉ์ ๋ณธ๋ฌธ์์ ์์๋ก ๋ค๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด, ์ ์ ๊ฐ ๊ฐ์กฑ์ ๊ฐ์ ํ๊ณ ๊ฐ์กฑ ๊ตฌ์ฑ์๋ค๊ณผ ํจ๊ป ์ฑ๋ฆฐ์ง๋ฅผ ํ ์ ์๋ ํํ์ ์๋น์ค์ด๋ค.
๋จผ์ ๊ฐ๋จํ๊ฒ ๋ฌธ์ ๋ฅผ ์ดํดํ๊ธฐ ์ํ ๊ฐ๋ ๋ค์ ์ ๋ฆฌํ์๋ค.
์์กด์ฑ ์ฃผ์ ์ ์ธ๋ถ๋ก๋ถํฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
MVC ๋ชจ๋ธ๋ก ๊ฐ๋ฐํจ์ ์์ด์, Controller์์๋ Service์ ๋ชจ๋์ ํธ์ถํ๊ณ Service์์๋ Repository(DAO)์ ๋ชจ๋์ ํธ์ถํ๋ ์ผ์ด ๋ฐ์ํ๋ค. ์ด ๋, Controller๋ Service์ ์์กดํ๊ณ Service๋ Repository์ ์์กดํ๋ค๊ณ ๋งํ ์ ์๋ค.
์์ ์์์์๋ UserService๊ฐ UserRepository์ ์์กดํ๋ฉฐ, @RequiredArgsConstructor ์ด๋ ธํ ์ด์ ์ ํตํด ์์ฑ์ ์ฃผ์ ์ ํด์ฃผ๊ณ ์๋ค.
ACID๋ ์๋์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ด ์์ ํ๊ฒ ์ํ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ฑ์ง์ด๋ค.
Atomcity(์์์ฑ) : ํธ๋์ญ์ ๊ณผ ๊ด๋ จ๋ ์์ ๋ค์ด ๋ถ๋ถ์ ์ผ๋ก ์คํ๋๋ค๊ฐ ์ค๋จ๋์ง ์๋ ๊ฒ์ ๋ณด์ฅํ๋ ๋ฅ๋ ฅ
Consistency(์ผ๊ด์ฑ) : ํธ๋์ญ์ ์ด ์คํ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๋ฉด ์ธ์ ๋ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ก ์ ์งํ๋ ๊ฒ
Isolation(๋ ๋ฆฝ์ฑ) : ํธ๋์ญ์ ์ ์ํ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฐ์ฐ ์์ ์ด ๋ผ์ด๋ค์ง ๋ชปํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ
Durability(์ง์์ฑ) : ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ํธ๋์ญ์ ์ ์์ํ ๋ฐ์๋์ด์ผ ํจ
Spring์์๋ ์์ ๊ฐ์ @Transactional ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
๋ค์์ ํด๋น ํ๋ก์ ํธ ์ํคํ ์ฒ์ ๋ณ์ฒ์ฌ๋ค.
์ฒ์ ํ๋ก์ ํธ์ ์ํคํ ์ฒ๋ ์์ ๊ฐ์๋ค. Controller์ Service๊ฐ ์ผ๋์ผ ๋งคํ ๋์ด ์์๊ณ , ๊ฐ ์๋น์ค๊ฐ ํ์ํ ๋ชจ๋ Repository์ ์์กดํ๊ณ ์์๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์์์ ๊ฐ์กฑ ๋๊ฐ๊ธฐ
๊ธฐ๋ฅ์ ์ ์ ํํด
๊ธฐ๋ฅ ์์ ์ํด ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋ก์ง์ด ๋ค๋ฅธ Service(๊ฐ๊ฐ ChallengeService, FamilyService, UserService)์ ์ค๋ณตํ์ฌ ์กด์ฌํ์๊ณ , ๊ฐ๋จํ ๋ก์ง์ด ๋ฐ๋์ด๋ ์ผ์ผ์ด ๋ฐ๊ฟ์ค์ผ ํ๋ ๋ฑ ์ฌ์ฌ์ฉ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ์ด ๋จ์ด์ก๋ค.
์ด๋ก ์ธํด ์ํคํ ์ฒ๋ฅผ ์๋์ ๊ฐ์ด ๋ฐ๊พธ๊ฒ ๋์๋ค.
Repository(DAO)๋ฅผ Service ๋ ์ด์ด์ ์ผ๋์ผ๋ก ๋งคํ๋๊ฒ ๋ณ๊ฒฝํ๊ณ , Controller ๋ ์ด์ด์ ์์กด์ฑ์ ๋ํ ๊ฒ ๋ง๋ค์๋ค.
์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, Controller ๊ณ์ธต์์๋ @Transactional ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ ํํด
๊ธฐ๋ฅ์ ๊ฒฝ์ฐ, ๊ฐ์กฑ ๊ตฌ์ฑ์ ์ญ์
์ดํ ์ ์ ์ญ์
๊ฐ ์ผ๋ จ์ ๊ณผ์ ์ผ๋ก ๊ทธ ์์์ฑ์ด ๋ณด์ฅ๋์ด์ผ ํ๋ค. ํ์ง๋ง Service ๋ ์ด์ด์์์ ํธ๋์ญ์
์ฒ๋ฆฌ๋ง์ผ๋ก๋ ์ ์ ์ญ์
์์ DB ๋ณ๊ฒฝ์ ์คํจํด๋ ๊ฐ์กฑ ๊ตฌ์ฑ์ ์ญ์
๋ก ์ด๋ฏธ ๋ฐ๋ ๋ฐ์ดํฐ๋ ๋กค๋ฐฑ๋์ง ์๋๋ค. ์ฆ, ACID๊ฐ ๋ฐ์ด์ด ๋๋ค.
๊ณ ๋ฏผ ๋์ Service ๋ ์ด์ด๋ฅผ ํ๋ ๋ ์ถ๊ฐํ๊ธฐ๋ก ํ๋ค.
์์ ๊ฐ์ด ๋ ์ด์ด๋ฅผ ํ๋ ๋ ์ถ๊ฐํ๊ณ , ์ด๋ฆ์ Mapper๋ผ๊ณ ์ง์๋ค.
์ด ๊ตฌ์กฐ์ ํ ์ฅ์ ์ ์ผ๋จ ๊ฐ์ ๋ก์ง์ ์ฝ๋๊ฐ ์ฌ๋ฌ๊ตฐ๋ฐ ์ค๋ณต๋์ง ์๋๋ค๋ ์ ์ธ๋ฐ, ํนํ ์์กดํ๋ ๋ ์ด์ด์ ๋ชจ๋์ ํธ์ถํ ๋ค ๋ฐํ ๋ฐ์ ๊ฒฐ๊ณผ์ ๋์ํ๋ ๋ก์ง์ด ๋ค์ํ ๋ ํธ๋ฆฌํ๋ค. ์ด์ ์๋ Service ๋ ์ด์ด์์ ํน์ ๋ก์ง์ ๊ณ์ํด์ ๋ฐ๋ณตํด์ผ ํ๋ ๋ฐ๋ฉด, ์ด ๊ตฌ์กฐ์์๋ ๋ฐ๋ณต๋๋ ๋ก์ง์ Service ๋ ์ด์ด์ ์์ฑํด๋ ๋ค Mapper์ ๋ค์ํ ๋ชจ๋์์ ํธ์ถํ๋ ๋ฑ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํด์ก๊ธฐ ๋๋ฌธ์ด๋ค.
๋, Service ๋ ์ด์ด์์ ๋ฐ์ดํฐ ๊ด๋ จ ๊ฒ์ฆ์ ํ๊ณ Mapper์์๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ๋ฑ ๊ทธ ๊ธฐ๋ฅ์ ๋ช ํํ๊ฒ ๋๋ ์ ์์๋ค. Mapper ๋ ์ด์ด์์ Controller๋ก ๊ฐ์ ๋ฐํํ ๋๋ DTO๋ก ๊ฐ์ธ, Entity ์์ฒด๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ํ์๋ค.
ํ๋ก์ ํธ์ ๊ฐ์กฑ ๋๊ฐ๊ธฐ
์ ์ ์ ํํด
๊ธฐ๋ฅ ์ญ์ ์์ ๊ฐ์ด ๋ฆฌํฉํ ๋ง ๋์๋ค. ํ์ฌ๊น์ง ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๋์จ ๋ฌธ์ ๋ค์ ๋ชจ๋ ๋ณด์ํด์ค ์ํคํ
์ฒ์ด์ง๋ง, ์ฌ์ ํ ๋ค๋ฅธ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ง ์์๊น ๊ณ ๋ฏผ์ด ๋๋ค.
์ํคํ
์ฒ๋ ๋ฌด์กฐ๊ฑด ์ด๊ฒ ๋ง๋ค๋ผ๊ณ ํ ์ ์๋๊ฒ ์์ด์ ๋ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค.
DDD๋ฅผ ๊ณต๋ถ ์ค์ธ๋ฐ, ๋ค์ ํ๋ก์ ํธ์๋ DDD๋ฅผ ์ ์ฉํด๋ณด๋ ค๊ณ ํ๋ค!