API๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ด 3๊ฐ์ ํด๋์ค๊ฐ ํ์
- Request ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ DTO
- API ์์ฒญ์ ๋ฐ์ Controller
- ํธ๋์ญ์ , ๋๋ฉ์ธ ๊ธฐ๋ฅ ๊ฐ์ ์์๋ฅผ ๋ณด์ฅํ๋ Service
โ
์ฌ๊ธฐ์ ๋ง์ ์คํด โ Service์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ๊ฒ
But, ์ ํ ๊ทธ๋ ์ง ์์
โ
Service๋ ํธ๋์ญ์
, ๋๋ฉ์ธ ๊ฐ ์์ ๋ณด์ฅ์ ์ญํ ๋ง ํจ
- Web Layer
- ํํ ์ฌ์ฉํ๋ ์ปจํธ๋กค๋ฌ(@Controller)์ JSP/Freemarker ๋ฑ์ ๋ทฐ ํ ํ๋ฆฟ ์์ญ
- ์ด์ธ์๋ ํํฐ(@Filter), ์ธํฐ์ ํฐ, ์ปจํธ๋กค๋ฌ ์ด๋๋ฐ์ด์ค(@ControllerAdvice)๋ฑ ์ธ๋ถ ์์ฒญ๊ณผ ์๋ต์ ๋ํ ์ ๋ฐ์ ์ธ ์์ญ
- Service Layer
- @Service์ ์ฌ์ฉ๋๋ ์๋น์ค ์์ญ
- ์ผ๋ฐ์ ์ผ๋ก Controller์ Dao ์ค๊ฐ ์์ญ์์ ์ฌ์ฉ๋จ
- @Transactionaldl ์ฌ์ฉ๋์ด์ผ ํ๋ ์์ญ์ด๊ธฐ๋ ํจ
- Repository Layer
- Database์ ๊ฐ์ด ๋ฐ์ดํฐ ์ ์ฅ์์ ์ ๊ทผํ๋ ์์ญ
- DAO(Data Access Object) ์์ญ
- Dtos
- Dto(Data Transfer Object)๋ ๊ณ์ธต ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ๊ฐ์ฒด๋ฅผ ์ด์ผ๊ธฐํ๋ฉด Dtos๋ ์ด๋ค์ ์์ญ
- ์๋ฅผ ๋ค์ด, ๋ทฐ ํ ํ๋ฆฟ ์์ง์์ ์ฌ์ฉ๋ ๊ฐ์ฒด๋ Repository Layer์์ ๊ฒฐ๊ณผ๋ก ๋๊ฒจ์ค ๊ฐ์ฒด ๋ฑ์ด ์ด๋ค์ ์ด์ผ๊ธฐํจ
- Domain Model
- ๋๋ฉ์ธ์ด๋ผ ๋ถ๋ฆฌ๋ ๊ฐ๋ฐ ๋์์ ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ๊ด์ ์์ ์ดํดํ ์ ์๊ณ ๊ณต์ ํ ์ ์๋๋ก ๋จ์ํ์ํจ ๊ฒ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ผ๊ณ ํจ
- ์๋ฅผ ๋ค์ด, ํ์ ์ฑ์ด๋ผ๊ณ ํ๋ฉด ๋ฐฐ์ฐจ, ํ์น, ์๊ธ๋ฑ์ด ๋ชจ๋ ๋๋ฉ์ธ์ด ๋ ์ ์์
- @Entity๊ฐ ์ฌ์ฉ๋ ์์ญ ์ญ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋จ
- ๋ค๋ง, ๋ฌด์กฐ๊ฑด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ๊ด๊ณ๊ฐ ์์ด์ผ๋ง ํ๋ ๊ฒ์ ์๋
- VO์ฒ๋ผ ๊ฐ ๊ฐ์ฒด๋ค๋ ์ด ์์ญ์ ํด๋น
Web(Controller), Service, Repository, Dto, Domain ์ด 5๊ฐ์ง ๋ ์ด์ด์์ ๋น์ง๋์ค ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํด์ผ ํ ๊ณณ์ ???
โ ๋ฐ๋ก Domain
๊ธฐ์กด์ ์๋น์ค๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ํธ๋์ญ์
์คํฌ๋ฆฝํธ๋ผ๊ณ ํจ
์) ์ฃผ๋ฌธ ์ทจ์ ๋ก์ง
@Transactional
public Order cancelOrder(int orderId){
1) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ์ฃผ๋ฌธ์ ๋ณด(Orders), ๊ฒฐ์ ์ ๋ณด(Billing), ๋ฐฐ์ก์ ๋ณด(Delivery) ์กฐํ
2) ๋ฐฐ์ก ์ทจ์๋ฅผ ํด์ผ ํ๋์ง ํ์ธ
3) if(๋ฐฐ์ก ์ค์ด๋ผ๋ฉด){
๋ฐฐ์ก ์ทจ์๋ก ๋ณ๊ฒฝ
}
4) ๊ฐ ํ
์ด๋ธ์ ์ทจ์ ์ํ Update
}
๋ชจ๋ ๋ก์ง์ด ์๋น์ค ํด๋์ค ๋ด๋ถ์์ ์ฒ๋ฆฌ๋จ. ๊ทธ๋ฌ๋ค ๋ณด๋ ์๋น์ค ๊ณ์ธต์ด ๋ฌด์๋ฏธํ๋ฉฐ, ๊ฐ์ฒด๋ ๋จ์ํ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ ์ญํ ๋ง ํ๊ฒ ๋จ
๋ฐ๋ฉด ๋๋ฉ์ธ ๋ชจ๋ธ์์ ์ฒ๋ฆฌํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋
@Transactional
public Order cancelOrder(int orderId){
//1)
Orders order = ordersRepository.findById(orderId);
Billing billing = billingRepository.findByOrderId(orderId);
Delivery delivery = deliveryRepository.findByOrderId(orderId);
//2-3)
delivery.cancel();
//4)
order.cancel();
billing.cancel();
return order;
}
order, billing, delivery๊ฐ ๊ฐ์ ๋ณธ์ธ์ ์ทจ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉฐ, ์๋น์ค ๋ฉ์๋๋ ํธ๋์ญ์ ๊ณผ ๋๋งค์ธ ๊ฐ์ ์์๋ง ๋ณด์ฅ
์คํ๋ง์์ Bean์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์๋ค
- @Autowired
- setter
- ์์ฑ์
์ด ์ค ๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ์์ด ์์ฑ์๋ก ์ฃผ์
๋ฐ๋ ๋ฐฉ์(@Autowired๋ ๊ถ์ฅํ์ง ์์)
์ฆ, ์์ฑ์๋ก Bean ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ก ํ๋ฉด @Autowired์ ๋์ผํ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค๋ ๊ฒ
๊ทธ๋ฌ๋ฉด ์์์ ์์ฑ์๋ ์ด๋ ???????
โ ๋ฐ๋ก @RequiredArgsConstructor์์ ํด๊ฒฐ ๐ final์ด ์ ์ธ๋ ๋ชจ๋ ํ๋๋ฅผ ์ธ์๊ฐ์ผ๋ก ํ๋ ์์ฑ์๋ฅผ ๋์ ์์ฑ
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2022.08.31 |
---|---|
์คํ๋ง์ด๋ ? (0) | 2022.08.31 |
[ Spring Boot ] ๋ฐ์ดํฐ ๋ฒ ์ด์ค (0) | 2022.08.30 |
[ Spring Boot ] ํ ์คํธ ์ฝ๋ (0) | 2022.08.30 |
Junit5 vs. Junit4 (0) | 2022.08.06 |