MVC 패턴을 공부하면서 모델(Model)이 비즈니스 로직을 담당한다는 것을 알게 되었습니다. 그런데 '비즈니스 로직'이 정확히 무엇인지 궁금해져서 알아보았고, 그 과정에서 비슷한 용어인 도메인 로직도 함께 찾아보게 되었습니다.
두 용어는 매우 유사하여 종종 혼용되지만, 엄밀히는 다른 관점을 가집니다. 이 둘의 차이를 이해하면 더 견고하고 유지보수가 쉬운 모델을 설계할 수 있습니다.
## 1. 비즈니스 로직 (Business Logic) - '프로세스' 중심
비즈니스 로직은 애플리케이션이 특정 목표를 달성하기 위해 따라야 하는 전체적인 작업 순서나 규칙을 의미합니다. 즉, '무엇을, 어떤 순서로 처리해야 하는가'에 대한 **워크플로우(Workflow) 또는 프로세스(Process)**에 가깝습니다.
예시: 온라인 쇼핑몰의 "주문 처리" 비즈니스 로직 🛒
- 사용자의 로그인 상태를 확인한다.
- 상품의 재고가 있는지 확인한다.
- 사용된 쿠폰의 유효성을 검증하고 할인액을 계산한다.
- 최종 결제 금액을 확정한다.
- 외부 결제 시스템과의 연동을 요청한다.
- 결제가 완료되면 상품의 재고를 감소시킨다.
- 주문 내역을 데이터베이스에 기록하고 사용자에게 확인 이메일을 발송한다.
이처럼 여러 도메인 객체(사용자, 상품, 쿠폰 등)를 조율하여 하나의 비즈니스 목표를 완성하는 절차 전체가 비즈니스 로직입니다.
## 2. 도메인 로직 (Domain Logic) - '객체' 중심
도메인 로직은 특정 도메인(비즈니스 영역)의 핵심 개념(객체)에 내재된 규칙과 행동을 의미합니다. 이는 다른 프로세스와 무관하게, 해당 객체 자체가 가져야 할 고유의 논리입니다.
예시: 쇼핑몰의 각 도메인 객체가 가진 고유 로직
- 주문(Order) 객체의 도메인 로직:
- "주문의 총액은 각 주문 항목(OrderItem)의 가격과 수량을 곱한 값의 합계이다."
- "배송이 시작되면 주문을 취소할 수 없다."
- 상품(Product) 객체의 도메인 로직:
- "상품의 재고는 0 미만이 될 수 없다."
- 장바구니(Cart) 객체의 도메인 로직:
- "장바구니에 담을 수 있는 상품의 최대 개수는 10개이다."
이처럼 도메인 로직은 특정 객체의 상태를 변경하거나 유효성을 검사하는 등, 해당 객체의 책임과 관련된 규칙을 말합니다.
## 3. 그래서, 둘의 차이점은?
두 개념을 요리에 비유하면 쉽게 이해할 수 있습니다. 🍳
도메인 로직은 **'재료의 본질적인 특성'**입니다.<br> (예: "계란은 삶거나 튀길 수 있다", "소금은 짜다", "밀가루와 물을 섞으면 반죽이 된다")
비즈니스 로직은 이 재료들을 가지고 요리를 완성하는 **'레시피'**입니다.<br> (예: "계란을 7분간 삶은 뒤, 반죽을 얇게 펴서 면을 만들고, 끓는 소금물에 면을 익혀 계란과 함께 낸다")
- 범위: 비즈니스 로직이 더 넓은 개념이며, 도메인 로직을 포함하는 경우가 많습니다.
- 관점: 도메인 로직은 개별 객체의 상태와 규칙에 집중하는 **'객체 중심'**의 관점이고, 비즈니스 로직은 여러 객체를 조율하여 하나의 서비스를 완성하는 **'프로세스 중심'**의 관점입니다.
"주문을 한다"는 비즈니스 로직을 수행하기 위해, 컨트롤러는 Order 객체의 도메인 로직(총액 계산)과 Product 객체의 도메인 로직(재고 감소)을 호출하여 전체 프로세스를 완성하는 것입니다.
이 두 로직을 잘 분리하면 객체의 재사용성이 높아지고, 시스템의 복잡도를 관리하기 용이해집니다.
'개발 공부 > 기타 공부' 카테고리의 다른 글
| [Git/GitHub] 커밋 컨벤션과 Issue로 프로젝트 관리 200% 끌어올리기 (0) | 2026.03.25 |
|---|---|
| 리눅스 명령어 (1) | 2025.10.27 |
| Git & Github 공부 - Branch, Branch 합치기 (0) | 2025.09.15 |
| Git & Github 공부 - Git 기본 (1) | 2025.09.15 |
| 최단 경로 탐색 알고리즘 : 다익스트라, 벨만-포드, 플로이드-워셜 (0) | 2025.09.07 |