๋งํดํ์ธ๋ฌ์ Patterns of Enterprise Application Architecture์ ๋์ค๋ Business Logic์ ๊ตฌ์ฑํ๋ ์ฃผ์ํ ํจํด 2๊ฐ์ง์ ๋ํ ์ค๋ช ์ ํตํด ์ด๋ค ๋ฐฉ์์ ์ทจํ ์ง ๊ฒฐ์ ํ ์ ์๋๋ก ํ๋ค.
๊ฐ์ฒด์งํฅ์ ์ข์ํ๋๋ผ๋ ๊ฐ๋ฐํ ๋น์ฆ๋์ค ๋ก์ง์ด ๋๋ฌด ๋จ์ํ ๊ฒฝ์ฐ ๊ฐ์ฒด์งํฅ ์ ๊ทผ์ ๊ณผํ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ **์ ์ฐจ์ ์ธ ์ฝ๋(procedural code)**๋ฅผ ์์ฑํ๋ค.
๋งํดํ์ธ๋ฌ๋ ์ด๋ฅผ Transaction Script Pattern์ด๋ผ๊ณ ๋ถ๋ ๋ค.
์ด ๋ฐฉ๋ฒ์์๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ผ, presentation tier์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด transaction script(OrderService์ createOrder, reviseOrder, cancelOrder ๋ฑ)๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
์ด ์ ๊ทผ๋ฒ์ ์ค์ํ ํน์ฑ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์๋ฅผ ๊ตฌํํ๋ ํด๋์ค(OrderService)๊ฐ ์ํ๋ฅผ ์ ์ฅํ๋ ํด๋์ค(Order)์ ๋ถ๋ฆฌ๋๋ค๋ ๊ฒ์ด๋ค.
์คํฌ๋ฆฝํธ๋ ๋ณดํต Service ํด๋์ค(OrderService)์ ์์นํ๋ค. Service๋ ํ๋์ ์์ฒญ๊ณผ ํด๋น ์์ฒญ์ ๋ํ ์์คํ ํ์์ ๋ํด์ ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ๋๋ค. ์ด ๋ฉ์๋๊ฐ ํด๋น ์์ฒญ์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ค. ๋ฐ์ดํฐ ๊ฐ์ฒด(Order)๋ ํ์๊ฐ ์๊ฑฐ๋ ๊ฑฐ์ ๊ฐ์ง ์๋๋ค.
์ด ์ ๊ทผ๋ฒ์ ๊ฐ๋จํ ๋น์ฆ๋์ค ๋ก์ง์๋ ์ ๋์ํ๋ค. ๋จ์ ์ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๊ธฐ์๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ ๊ฒ์ด๋ค.
Transaction Script Pattern์ด ๋จ์ํ์ฌ ๋งค์ฐ ๋งค๋ ฅ์ ์ด์ง๋ง ๋น์ฆ๋์ค ๋ก์ง์ด ๋ณต์กํด์ง๋ฉด ์ ์ง๋ณด์๊ฐ ์ ๋ชฝ์ด ๋๋ค.
์ค๋ ๊ธฐ๊ฐ ์๋น์ค๋ฅผ ์ด์ํด ๋ณธ ๊ฐ๋ฐ์๋ผ๋ฉด ๋ณ๊ฒฝ ์๊ตฌ๋ ๋๋ถ๋ถ ๊ธฐ๋ฅ ์์ฒด๊ฐ ์๋๋ผ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ธฐ์ธํ๋ค๋ ์ ์ ๊ณต๊ฐํ ๊ฒ์ด๋ค. Transaction Script Pattern์์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค๊ฐ ํ์๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด ํ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค์ ์ํฅ์ ๋ฏธ์น๋ค. ์ฌ์ง์ด ํ์๋ฅผ ๊ฐ์ง ์ฝ๋๊ฐ ์๋น์ค ํด๋์ค ์ธ์ ์ฌ๋ฌ๊ณณ์ ์กด์ฌํ๋ค๋ฉด ๋ฌธ์ ๋ ๋ ์ฌ๊ฐํด์ง๋ค. ๋ฐ๋ผ์ ์ด์๊ณผ ์ ์ง๋ณด์๋ฅผ ์๊ฐํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์บก์ํํ๊ณ ๊ธฐ๋ฅ๋ง ์ธ๋ถ์ ์ ๊ณตํ๋ ๋ฐฉ์์ด์ฌ์ผ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์๊ฒจ๋ ์ธ๋ถ์ ์ํฅ์ ์ต์ํํ ์ ์๋ค.
Monolithic Application์ด ์ง์์ ์ผ๋ก ์ปค์ง๋ ์ต์ฑ์ด ์๋ ๊ฒ๊ณผ ๊ฐ์ด Transaction Script๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฐ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๊ทน๋๋ก ๋จ์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ ์ฐจ์ ์ฝ๋๋ฅผ ์์ฑํ๋ Transaction Script์ ์ ํน์ ์ด๊ฒจ๋ด๊ณ Domain Model Pattern์ ์ ์ฉํ์ฌ ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ๊ฐ๋ฐํด์ผ ํ๋ค.
๊ฐ์ฒด์งํฅ์ค๊ณ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ฒด๋ชจ๋ธ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ์ฒด๋ชจ๋ธ์ ์ ์ ์์ ํด๋์ค๋ค์ ๋คํธ์ํฌ๋ก ๊ตฌ์ฑ๋๋ค. ์ด๋ฐ ์ค๊ณ ๋ฐฉ์์์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์๋ ์ํ๋ง ๊ฐ๋ ํด๋์ค๋ค์ด ์กด์ฌํ ์๋ ์์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ ํ์์ ์ํ๋ฅผ ๋ชจ๋ ๊ฐ๋๋ค.
Transaction Script์ ๋์ผํ๊ฒ OrderService๋ ๊ฐ ์์ฒญ๊ณผ ํด๋น ์์ฒญ์ ๋ํ ์์คํ ํ์์ ๋ํด ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ๋๋ค. Domain Model Pattern์์ Service ๋ฉ์๋๋ ๋๊ฐ ๋จ์ํ๋ค. Service ๋ฉ์๋๊ฐ ํญ์ ๋๋ฉ์ธ ๊ฐ์ฒด์๊ฒ ์์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ฉ์ธ ๊ฐ์ฒด๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋๋ถ๋ถ์ ๊ฐ๋๋ค.
์๋ฅผ ๋ค๋ฉด Service ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๋๋ฉ์ธ ๊ฐ์ฒด๋ค์ ๋ก๋ฉํ๊ณ ๋๋ฉ์ธ ๊ฐ์ฒด๋ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
์ด ์์ ๊ฒฝ์ฐ Order ํด๋์ค๋ ์ํ์ ํ์๋ฅผ ๊ฐ๋๋ค. ์ฌ์ง์ด ์ํ๋ private์ด์ฌ์ ๋ฉ์๋๋ฅผ ํตํด์๋ง ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด์งํฅ์ค๊ณ ๋ฐฉ์์ ์ฅ์
- ์ค๊ณ๊ฐ ์ดํด, ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๋ค.
- ๋ชจ๋ ์ผ์ ํ๋ ํ๋์ ํฐ ํด๋์ค ๋์ ์ ์ ๊ฐฏ์์ ์ฑ ์์ ๊ฐ๋ ๋ค์์ ์์ ํด๋์ค๋ค๋ก ์ด๋ค์ง๋ค.
- ํ
์คํธํ๊ธฐ ์ฝ๋ค.
- ๊ฐ ํด๋์ค๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ ๊ฐ๋ฅํ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ๋์ด์ผ ํ๋ค.
- ํ์ฅํ๊ธฐ ์ฝ๋ค.
- strategy pattern, template pattern ๋ฑ๊ณผ ๊ฐ์ด ์ค์ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์ปดํฌ๋ํธ๋ฅผ ํ์ฅํ ์ ์๋ ์ ์๋ ค์ง ๋์์ธ ํจํด์ ์ฌ์ฉํ ์ ์๋ค.

