일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- restapi
- mssql
- Vue
- crud
- 자바
- 스프링
- 컴포넌트
- reactjs
- springboot
- 보안취약점
- 리액트
- GIT
- Spring
- 개발공부
- DATABASE
- 데이터베이스
- JS
- 개발
- javascript
- sql
- 스프링부트
- component
- jdk
- java
- 쿼리
- EXTJS
- 자바스크립트
- React
- Intellij
- table
- Today
- Total
준준의 기록일지
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] Spring 비즈니스 로직의 영역 설명 본문
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
책 내용을 옮겨적으면서 학습 겸 내용 저장 용도로 작성합니다.
* 기존에 비즈니스 로직에 대해 오해하고 있는 부분
- Service에서 비즈니스 로직을 처리해야 한다고 오해하지만, Service는 트랜잭션, 도메인 간의 순서 보장 역할만 해야 한다.
그럼 비즈니스 로직은 누가 처리하나?
Web Layer
흔히 사용하는 컨트롤러와 JSP/Freemarker 등의 뷰 템플릿 영역
이외에도 필터, 인터셉터, 컨트롤러 어드바이스(@Controller/@Advice) 등 외부 요청과 응답에 대한 전반적인 영역
Service Layer
@Service에서 사용되는 영역
일반적으로 controller와 Dao의 중간 영역에서 사용된다.
@Transactional이 사용되어야 하는 영역이기도 하다.
Repository LAyer
Database와 같이 데이터 저장소에 접근하는 영역
기존 개발자는 Dao(Data Access Object)영역으로 이해하면 쉽다.
Dtos
Dto(Data Transfer Object)는 계층 간에 데이터 교환을 위한 객체를 이야기하며 Dtos는 이들의 영역을 얘기한다.
예를 들어 뷰 템플릿 엔진에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등이 이들을 이야기한다.
Domain Model
도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화시킨 것을 도메인 모델이라고 한다.
이를테면 택시 앱이라고 하면 배차, 탑승, 요금 등이 모두 도메인이 될 수 있다.
@Entity를 사용한 사람은 @Entity가 사용된 영역 역시 도메인 모델이라고 이해하면 된다.
다만, 무조건 데이터베이스의 테이블과 관계가 있어야 하는 것은 아니다.
VO처럼 값 객체들도 이 영역에 해당되기 때문.
* Web Controller, Service, Repository, Dto, Domain 5가지 레이어에서 비지니스 처리를 담당해야하는 곳은? Domain!
기존에 서비스로 처리하던 방식을 트랜잭션 스크립트라고 한다. 주문 취소 로직을 작성한다면 다음과 같다.
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
|
@Transactional
public Order cancelOrder(int orderId){
//1)
OrdersDto order = ordersDao.selectOrders(orderId);
BillingDto billing = billingDao.selectBilling(orderId);
DeliveryDto delivery = deliveryDao.selectDelivery(orderId);
//2)
String deliveryStatus = delivery.getStatus();
//3)
if("IN_PROGRESS".equals(deliveryStatus)){
delivery.setStatus("CANCEL");
deliveryDao.update(delivery);
}
//4)
order.setStatus("CANCEL");
ordersDao.update(order);
billing.setStatus("CANCEL");
deliveryDao.update(billing);
return order;
}
|
cs |
모든 로직이 서비스 클래스 내부에서 처리된다. 그러다 보니 서비스 계층이 무의미해진다.
'스프링' 카테고리의 다른 글
[DTO] 왜 Entity와 나눠야하는가에 대한 고민 (0) | 2021.09.06 |
---|---|
[JPA] JPA, Hibernate, Spring Data JPA (0) | 2021.08.31 |
[lombok] 기능정리 펌 (0) | 2021.08.25 |
[Spring] 스프링 Filter, DoFilter (0) | 2021.08.02 |
[Spring] Context Listener 란?? (0) | 2021.02.17 |