์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ๋ฐฑ์ค9093
- stream
- ํ๋ฐฉ์ฟผ๋ฆฌ
- java
- ์คํ์์ด
- ์ฟ ํกDB
- ์ฟ ํกERD
- ๋ฐ์ดํฐํ์
- ์ฐ์ฐ์
- ์คํ
- StringBuffer
- ๋ฐฑ์ค11053 #ํ์ด์ฌ #python
- ๋ฌธ์์ด
- ์๋ฐ
- ๋ฐฑ์ค1874
- ๋ฐฐ์ด
- ๋
- ๋ฐฑ์ค9012
- ์
- ์คํธ๋ฆผ
- ์ฐ
- StringBuilder
- Today
- Total
๋ชฉ๋ก๊ฐ๋ฐ ์์ /DDD ์์ํ๊ธฐ (6)
Tech Log ๐ ๏ธ
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/swAZT/btszLZSIt2J/A4kKZJKYEyhs61PpU4Y5uK/img.jpg)
์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ํธ๋์ญ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ๋ํด ์ฌ์ฉํ ์ ์๋ ๋ํ์ ์ธ ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฐฉ์ 1. ์ ์ ์ ๊ธ 2. ๋น์ ์ ์ ๊ธ ์ ์ ์ ๊ธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ฌ์ฉ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํค๋ฉ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์์ ํ์ง ๋ชปํ๋ค. ex) agg1์ด ์์ ํ๋ ๋์ agg2๋ ์ ๊ธ์ด ํด์ ๋ ๋๊น์ง ๋ธ๋กํน๋๋ค. ์ ์ ์ ๊ธ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ํด์ํ ์ ์๋ค. ํ์ง๋ง ๊ต์ฐฉ ์ํ์ ๋น ์ง ์ ์๋ค. ๊ต์ฐฉ ์ํ๋? ์ค๋ ๋๊ฐ ๊ฐ์ ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์ ์ ํ๋ค๊ฐ ์๋ก์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ ๊ต์ฐฉ ์ํ์ ๋ฐ์ง๋ฉด ์์คํ ์ ๋ง๋น๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ง์ ์๋ก ๋ฐ์ํ๊ธฐ ์ฝ๋ค. ์ต๋ ๋๊ธฐ ์๊ฐ์ ์ค์ ํด์ค์ผ๋ก์จ ๊ต์ฐฉ ์ํ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๋น์ ์ ์ ๊ธ ๋ณ๊ฒฝํ ๋ฐ์ดํฐ๋ฅผ ์ค์ DBMS์ ๋ฐ์ํ๋ ์์ ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธ -> ๋ฒ์ ๊ฐ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/kDFhW/btszj9C5h5x/bQc0CVO1NjruomrtKaebo1/img.jpg)
๋๋ฉ์ธ ์๋น์ค ์ฌ๋ฌ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๊ฐ ํ์ํ๊ณ ์ฑ ์์ด ์ ๋งคํ ๋ ๋๋ฉ์ธ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ค. ๋๋ฉ์ธ ์๋น๋ ๋ค์ ์ํฉ์ ์ด์ฉ๋๋ค. 1. ๊ณ์ฐ๋ก์ง 2. ์ธ๋ถ ์์คํ ์ฐ๋์ด ํ์ํ ๋ก์ง ๋๋ฉ์ธ ์๋น์ค๋ ์ํ ์์ด ๋ก์ง๋ง ๊ตฌํํ๋ค. ๋๋ฉ์ธ ์๋น์ค๋ฅผ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ์ฒด์ ์ฃผ์ ํ๋ฉด ์๋๋ค! ์ธ๋ถ ์์คํ ์ฐ๋๊ณผ ๋๋ฉ์ธ ์๋น์ค public interface API { ... } ๋๋ฉ์ธ ๋ก์ง ๊ด์ ์์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํด์ผํ๋ค. ์์ฉ ์๋น์ค๋ ์ด ๋๋ฉ์ธ ์๋น์ค๋ฅผ ์ด์ฉํด์ ๊ธฐ๋ฅ์ ์ํํ๋ค. ๋๋ฉ์ธ ์๋น์ค์ ๋ก์ง์ด ๊ณ ์ ๋์ด ์์ง ์์ผ๋ฉด , ๋๋ฉ์ธ ์๋น์ค ์์ฒด๋ฅผ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ ์ ์๋ค. ๋๋ฉ์ธ ์๋น์ค์ ๊ตฌํ์ด ํน์ ๊ธฐ์ ์ ์์กดํ๊ฑฐ๋ ์ธ๋ถ API๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ถ์ํํด์ผํ๋ค.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/AFqvl/btszjDLdg2B/DysjKiYBaKvdBy48vYMC9K/img.jpg)
ํํ ์์ญ๊ณผ ์์ฉ ์์ญ ์์ฉ ์์ญ๊ณผ ํํ ์์ญ์ ์ฌ์ฉ์์ ๋๋ฉ์ธ์ ์ฐ๊ฒฐํด์ฃผ๋ ๋งค๊ฐ์ฒด ์ญํ ์ด๋ค. ํํ ์์ญ์ ์ฌ์ฉ์์ ์์ฒญ์ ํด์ํ๊ณ ๊ทธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์ฉ ์๋น์ค๋ฅผ ์คํํ๋ค. ์์ฉ ์์ญ์ ์ค์ ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ ์์ญ์ ์๋ก ์๊ตฌํ๋ ํ๋ผ๋ฏธํฐ์ ํ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์์ฒญ์ ๋ณํํด์ผํ๋ค. ์ฌ์ฉ์๊ฐ ์ํธ์์ฉ์ ํํ ์์ญ์ด ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์์ฉ ์๋น์ค๋ ํํ ์์ญ์ ์์กดํ์ง ์์์ผํ๋ค. ์์ฉ ์๋น์ค์ ์ญํ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฆฌํฌ์งํฐ๋ฆฌ์์ ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ค. public Result func(Req req){ // ๋ฆฌํฌ์งํฐ๋ฆฌ์์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ๊ตฌํจ Agg agg = AggRepository.finById(req.getId()); // ์ ๊ทธ๊ฑฐํธ์ ๋๋ฉ์ธ ๊ธฐ๋ฅ ์คํ ad..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/UE0Ti/btsyVat6brb/8HV3qse9TeOSfed2ToyLo0/img.jpg)
์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ์ฒด ๋ชจ๋ธ์ด ๋ณต์กํด์ง๋ฉด ๊ฐ๋ณ ๊ตฌ์ฑ์์ ์์ฃผ๋ก ๋ชจ๋ธ์ ์ดํดํ๊ฒ ๋๊ณ ์ ๋ฐ์ ์ธ ๊ตฌ์กฐ๋ ํฐ ์์ค์์ ๋๋ฉ์ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ค์์ง๋ค. -> ์์ ์์ค์์ ๋ชจ๋ธ์ ์กฐ๋งํด์ผํ๋๋ฐ , ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ ๊ทธ๋ฆฌ๋ฆฌ๊ฑฐํธ๋ ๋ณต์กํ ๋๋ฉ์ธ์ ๋จ์ํ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ค๋ค. ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ ๊ฐ์ฒด๋ ์ ์ฌํ๊ฑฐ๋ ๋์ผํ ๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ์ง๋ฉฐ ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ์ปคํธ์ ์ํ ๊ฐ์ฒด๋ ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ์ปคํธ์ ์ํ์ง ์๋๋ค. ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ฃผ์ฒด๊ฐ ํ์ํ๋ฐ, ์ด ์ฑ ์์ ์ง๋ ๊ฒ์ด ๋ฃจํธ ์ํฐํฐ์ด๋ค. ex) Order -> (OrderLine) , (Orderer) , (Address) ํต์ฌ ์ญํ ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ผ๊ด์ฑ์ด ๊นจ์ง์ง ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ๋ฃจํธ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๊ฐ ์ ๊ณตํด์ผํ ๋๋ฉ์ธ์ ๊ตฌํํ๋ค. ์ ๊ทธ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/DdWDL/btsyIJwVvS0/jiTbNNBn5ElqYaU9kwi5o0/img.jpg)
๋ค ๊ฐ์ ์์ญ ํํ ์์ญ HTTP ์์ฒญ์ ํ์๋ก ํ๋ ํ์์ผ๋ก ๋ณํํด์ ์์ฉ ์์ญ์ ์ ๋ฌํ๊ณ ๋ค์ ์๋ต์ HTTP ์๋ต์ผ๋ก ๋ณํํ์ฌ ์ ์ก ex) mvc ํ๋ ์์ํฌ ์์ฉ ์์ญ(์๋น์ค ๊ณ์ธต) ๋๋ฉ์ธ ์์ญ์ ๋ชจ๋ธ์ ์ฌ์ฉํด์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. ๋ก์ง์ ์ง์ ์ํํ๊ธฐ ๋ณด๋จ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ก์ง ์ํ์ ์ํ ๋๋ฉ์ธ ์์ญ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ตฌํํ๊ณ ํต์ฌ ๋ก์ง์ ๊ตฌํ public cancelOrder(String orderId) { Order order = findOrderById(orderId); // ๋๋ฉ์ธ ๋ชจ๋ธ์ ์์ ... } ์ธํ๋ผ ์คํธ๋ญ์ณ ์์ญ ๋ ผ๋ฆฌ์ ๊ฐ๋ ๋ณด๋ค๋ ๊ตฌํ ๊ธฐ์ ์ ๋ค๋ฃฌ๋ค. ex) DB ,SMTP , ์นดํ์นด ๊ณ์ธต ๊ตฌ์กฐ ์ํคํ ์ฒ ์ํคํ ์ฒ๋ ๋ณดํต ํํ -> ์์ฉ -> ๋๋ฉ์ธ -> ์ธํ๋ผ์ค..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cpIbjY/btsys9wWoto/ltSYK3VSJqaBGi5rugtWU1/img.jpg)
์๊ตฌ ์ฌํญ ์๊ตฌ์ฌํญ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ์ง ๋ชปํ๋ฉด ์๋ฑํ ๊ธฐ๋ฅ์ ๋ง๋ค๊ฒ ๋๋ค. (Garbage in , Garbage out) -> ์ฝ๋ฉ์ ์์ ์๊ตฌ์ฌํญ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค ! ๋๋ฉ์ธ ๋ชจ๋ธ ํน์ ๋๋ฉ์ธ์ ๊ฐ๋ ์ ์ผ๋ก ํํํ ๊ฒ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ด๊ณ์๋ค์ด ๋์ผํ ๋ชจ์ต์ผ๋ก ์ดํดํ ์ ์์ผ๋ฉฐ, ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ๋ก ๋ชจ๋ธ๋ง ํ ์ ์๋ค. ex) ๊ฐ์ฒด , ์ํ ๋ค์ด์ด๊ทธ๋จ, ๊ทธ๋ํ ๋๋ฉ์ธ ๋ชจ๋ธ ํจํด ๋๋ฉ์ธ ๊ณ์ธต์ ๋๋ฉ์ธ์ ํต์ฌ ๊ท์น์ ๊ตฌํํ๋ค. ์๋์ ์ฝ๋๋ ์ฃผ๋ฌธ ์ํ์ ๋ฐ๋ผ ๋ฐฐ์ก์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ ๋ํ ์ฝ๋๋ฅผ ๋๋ฉ์ธ ๋ชจ๋ธ ํจํด์ผ๋ก ๊ตฌํ public class Order { private OrderState state; private ShippingInfo inf..