비즈니스 로직이란? 개발자가 꼭 알아야 할 핵심 개념 정리

2025. 2. 20. 16:45개발/소프트웨어 디자인 패턴

728x90
반응형

프로젝트 작성 시 Clean Architecture를 기반으로 작성을 하고 있다.

이 때, 비즈니스 로직은 Domain 계층에 있는 UseCase가 담당한다.

그렇다면 여기서 말하는 비즈니스 로직은 무엇일까?

0. 비즈니스 로직이란?

비즈니스 로직(Business Logic)은 소프트웨어가 비즈니스 목표를 달성하기 위해 수행하는 핵심적인 규칙과 연산을 담당하는 부분이다.

즉, 사용자의 입력을 받아 데이터 처리 후 결과를 반환하는 과정에서 "어떤 데이터를 어떻게 처리할지" 결정하는 로직이다.

1. 비즈니스 로직의 역할

비즈니스 로직은 단순한 데이터 저장/조회가 아니라, 도메인 규칙을 적용하고 데이터를 가공하는 역할을 한다.

예시 1: 온라인 쇼핑몰 주문 시스템

  • 사용자가 장바구니에 상품 추가
  • 주문 요청 시 결제 금액 검증 (총 금액 > 0 확인)
  • 주문이 완료되면 재고 수량 감소
  • 주문 내역을 고객 및 관리자에게 알림

데이터 저장이 아닌, 비즈니스 규칙을 적용하는 과정이 중요하다!

2. 비즈니스 로직의 구현 위치

1) 전통적인 3계층 구조

Presentation Layer (UI 계층)
 → Business Layer (비즈니스 로직 계층)
  → Data Layer (데이터 계층)
  • UI 계층: 사용자 입력을 받고 화면을 표시
  • 비즈니스 계층: 데이터를 검증하고 도메인 규칙을 적용
  • 데이터 계층: DB 또는 API에서 데이터를 가져오거나 저장

2) 현대적인 Clean Architecture

Presentation (UI, ViewModel)
  ↓
Domain (UseCase, Service)  <--💡 비즈니스 로직 위치
  ↓
Data (Repository, API, DB)
  • 비즈니스 로직은 Domain 계층 (UseCase, Service)에서 처리
  • Presentation/UI 계층에서는 비즈니스 로직을 포함하지 않고, 호출만 함

3. 비즈니스 로직 예제

예제 1: 로그인 비즈니스 로직

class LoginUseCase @Inject constructor(
    private val loginRepository: LoginRepository
) {
    suspend operator fun invoke(email: String, password: String): Result<User> {
        if (!email.contains("@")) {
            return Result.failure(Exception("이메일 형식이 올바르지 않습니다."))
        }

        val user = loginRepository.login(email, password)
        return if (user != null) {
            Result.success(user)
        } else {
            Result.failure(Exception("로그인 실패"))
        }
    }
}

비즈니스 로직이 하는 일

  • 이메일 형식 검증
  • 로그인 요청 후 성공 여부 판단

예제 2: 할인 정책 적용 비즈니스 로직

class DiscountCalculator {
    fun applyDiscount(price: Double, userType: UserType): Double {
        return when (userType) {
            UserType.VIP -> price * 0.8  // VIP 고객은 20% 할인
            UserType.REGULAR -> price * 0.9  // 일반 고객은 10% 할인
            else -> price
        }
    }
}

비즈니스 로직이 하는 일

  • VIP 고객에게 20% 할인 적용
  • 일반 고객에게 10% 할인 적용

4. 비즈니스 로직을 올바르게 관리하는 방법

  1. UI, 데이터 계층과 분리하기
    • 잘못된 예시 (UI에서 직접 비즈니스 로직 처리)
    • fun onClickPurchase(price: Double, userType: UserType) { val finalPrice = if (userType == UserType.VIP) price * 0.8 else price showPrice(finalPrice) }
    • 올바른 예시 (UseCase에서 비즈니스 로직 처리)
    • class PurchaseUseCase { fun calculateFinalPrice(price: Double, userType: UserType): Double { return if (userType == UserType.VIP) price * 0.8 else price } }
    UI에서 비즈니스 로직을 수행하면 유지보수가 어렵다!
  2. UseCase로 분리하여 유지보수성 향상
  3. 도메인 규칙이 변경될 가능성이 높다면 테스트 가능하도록 구현

5. 정리

  • 비즈니스 로직은 데이터 처리 및 도메인 규칙을 적용하는 핵심 로직
  • UI, 데이터 저장 로직과 분리하여 유지보수성을 높인다
  • UseCase 또는 Service 계층에서 관리하여 코드 가독성을 높인다
  • 비즈니스 로직이 많아지면 별도의 도메인 계층을 만들어 관리한다

결론적으로, 비즈니스 로직은 앱의 "뇌" 역할을 하며, 핵심적인 기능을 담당한다!

728x90
반응형