도메인(Domain)

henry·2025년 2월 25일

✅ 1. 도메인(Domain)이란?

"도메인(Domain)"이란 특정한 업무 영역을 의미합니다.

📌 쉽게 말하면, 우리가 해결하려는 '문제의 범위'를 나타내는 개념입니다.


🔹 예제: 도메인의 종류

도메인(업무 영역)설명
이커머스(쇼핑몰)상품 등록, 장바구니, 결제, 배송 등
은행 시스템계좌 개설, 송금, 대출, 이자 계산 등
병원 시스템환자 예약, 진료 기록 관리, 처방전 발행
SNS 플랫폼게시물 작성, 좋아요, 댓글, 친구 추가

✅ 2. 도메인 규칙(Domain Rules)이란?

도메인 규칙(Domain Rules)은 해당 도메인에서 반드시 지켜야 하는 비즈니스 규칙을 의미합니다.

🔹 예제: 도메인 규칙

도메인(업무 영역)도메인 규칙(업무 규칙)
이커머스(쇼핑몰)✅ 주문 완료 후에는 취소 불가
은행 시스템✅ 송금은 계좌 잔액보다 클 수 없음
병원 시스템✅ 같은 시간에 같은 의사는 중복 예약 불가
SNS 플랫폼✅ 사용자가 본인 게시글만 삭제 가능

👉 이러한 도메인 규칙을 비즈니스 로직으로 구현해야 합니다.



✅ 3. 도메인 규칙을 비즈니스 로직으로 구현

위에서 정한 도메인 규칙을 실제 코드(비즈니스 로직)로 구현하면 다음과 같습니다.

🚀 예제 1: "사용자는 본인 상품만 수정/삭제 가능"

class ProductService {
   async updateProduct(productId: number, userId: number, productData: Partial<Product>) {
      const product = await ProductRepository.findById(productId);
      if (!product) {
         throw new Error('상품이 존재하지 않습니다.');
      }

      // 🚀 도메인 규칙: 본인 상품만 수정 가능
      if (product.seller_id !== userId) {
         throw new Error('본인이 등록한 상품만 수정할 수 있습니다.');
      }

      return await ProductRepository.updateProduct(productId, productData);
   }
}

✔️ "본인이 등록한 상품만 수정 가능"이라는 도메인 규칙을 적용하여, 다른 사람이 상품을 수정하는 것을 방지.


🚀 예제 2: "상품 가격은 0원 이상이어야 함"

class ProductService {
   async createProduct(productData: Product) {
      if (productData.product_price < 0) {
         throw new Error('상품 가격은 0원 이상이어야 합니다.');
      }
      return await ProductRepository.createProduct(productData);
   }
}

✔️ 상품 가격이 음수인 경우 예외를 발생시키도록 구현.


🚀 예제 3: "거래 상태 변경 규칙 (거래 완료 후 되돌릴 수 없음)"

class ProductService {
   async updateTradeStatus(productId: number, status: string) {
      const product = await ProductRepository.findById(productId);
      if (!product) {
         throw new Error('상품이 존재하지 않습니다.');
      }

      // 🚀 도메인 규칙: 거래가 완료된 후 다시 예약 상태로 변경 불가능
      if (product.trade_status === 'completed' && status !== 'completed') {
         throw new Error('거래 완료 상태는 변경할 수 없습니다.');
      }

      return await ProductRepository.updateTradeStatus(productId, status);
   }
}

✔️ 거래가 "완료(completed)"된 경우, 다시 "예약 중(reserved)" 상태로 변경하지 못하도록 도메인 규칙 적용.



✅ 4. 도메인과 도메인 규칙을 왜 정해야 할까?

1️⃣ 데이터 무결성 유지

📌 "중고거래"라는 도메인의 특성상, 사용자가 데이터를 임의로 조작하면 안 됨.

  • 예: 판매자가 아닌 사용자가 상품 가격을 조작하면 문제가 발생할 수 있음.
  • 도메인 규칙을 적용하여 데이터의 신뢰성을 보장해야 함.

2️⃣ 올바른 사용자 경험 보장

📌 사용자가 혼란스럽지 않도록, 플랫폼의 규칙을 명확히 해야 함.

  • 예: 이미 "거래 완료"된 상품이 다시 "예약 중"이 되면 사용자가 헷갈림.
  • "거래 완료 후에는 상태 변경 불가"라는 도메인 규칙이 필요함.

3️⃣ 보안 및 악용 방지

📌 악의적인 사용자(사기꾼)가 시스템을 악용하지 못하도록 제한해야 함.

  • 예: "신고 횟수가 많으면 거래 불가" 규칙이 없으면, 사기꾼이 계속 활동할 수 있음.
  • 도메인 규칙을 통해 사기 및 악용 행위를 방지.


✅ 5. 정리

중고거래 플랫폼에서 도메인과 도메인 규칙

개념설명예제
도메인(Domain)중고거래 플랫폼이 다루는 비즈니스 영역"상품 등록", "거래 상태 변경", "채팅 기능"
도메인 규칙(Domain Rules)반드시 지켜야 하는 업무 규칙"본인 상품만 수정 가능", "상품 가격은 0원 이상이어야 함"

💡 중고거래 플랫폼의 도메인은 "사용자 간 중고 거래"
💡 올바르게 운영하기 위해 도메인 규칙이 필수!

0개의 댓글