개발을 하면서 비즈니스 로직이라는 말을 많이 사용하는데, 정작 정확한 정의는 알지 못하고 사용하는 것 같다는 생각을 했다 🤔
비즈니스 로직의 정확한 정의는 무엇일까? 시간을 들여 알아보고, 정리해두려고 한다.
소프트웨어 공학에서 사용하는 비즈니스는 소프트웨어가 해결해야하는 현실 세상의 문제를 의미하는 단어다.
더 쉽게 얘기하면 그 앱의 정체성, 그 앱이 최종적으로 구현하고자 하는 바라고 이해하면 될 것 같다.
예를 들어 커머스 앱의 전체적인 비즈니스는 상품 판매 및 고객의 상품 구매이고, 메신저 앱에서는 효율적인 실시간 커뮤니케이션이 될 수 있다.
또한 비즈니스는 특정 기능에서 해결해야 하는 작은 문제를 가리킬 수도 있다.
예를 들어 로그인 기능에서의 비즈니스란 사용자 인증 및 권한을 부여하는 일이고, 결제 기능에서의 비즈니스는 사용자로부터 안전하고 정확하게 결제를 처리하는 일이다.
즉, 비즈니스란 개발자가 해결해야 할 문제를 의미한다.
따라서, 비즈니스는 앱의 전체적인 목표부터 구체적인 기능 단위의 목표까지 다양한 범위에서 정의될 수 있다.
로직이란 문제를 해결하거나 목표를 달성하기 위해 설계된 논리적 규칙, 계산 방법, 절차 등을 코드로 구현한 것을 의미한다.
즉 입력 데이터를 기반으로 원하는 결과를 얻기 위해 실행되는 처리 과정을 말한다.
로직의 구성 요소에는 조건이나 규칙, 절차, 계산 및 처리 과정이 있다.
이러한 로직을 통해 주어진 조건에 행동을 선택하도록 의사결정을 하고, 반복적인 작업을 자동화해서 효율적으로 처리하고, 입력값을 원하는 출력값으로 변환하는 데이터를 처리하는 작업을 할 수 있다.
비즈니스 로직이란 소프트웨어의 비즈니스를 해결하기 위한 규칙과 처리 과정을 의미한다.
다시 말해, 앱이 구현하고자 하는 목표나 문제를 해결하기 위해 정의된 로직이다.
예를 들어 커머스 앱에서의 비즈니스 로직은 상품 선택, 장바구니 처리, 결제, 주문 관리와 같은 프로세스를 포함할 수 있다.
메신저 앱에서는 메시지 전송, 수신 확인, 알림 관리, 사용자 상태 업데이트와 같은 작업이 비즈니스 로직에 해당한다.
특정 기능으로 얘기하면, 로그인 기능에서는 사용자 인증 절차, 비밀번호 검증, 권한 부여 등이 비즈니스 로직으로 정의된다.
그렇다면, 앱을 실행하는 코드는 전부 다 비즈니스 로직인건가?
단순히 화면을 그리거나 사용자의 입력에 반응해 UI를 변경하는 코드는 비즈니스 로직에 포함되지 않는다. 이러한 작업은 비즈니스 로직과는 별개로, 사용자 경험을 개선하기 위한 프레젠테이션 로직으로 분류된다. 또한, 화면 전환이나 각 화면 간 데이터 전달, 앱 생명주기 관련 로직은 애플리케이션 로직으로 분류된다.
프레젠테이션 로직은 사용자 인터페이스(UI)와 관련된 로직으로, 뷰를 그리거나 사용자로부터 이벤트를 받아 화면을 업데이트하는 역할을 한다.
애플리케이션 로직은 화면 전환, 데이터 전달, 앱 생명주기 관리 등 비즈니스 로직과 프레젠테이션 로직 간의 흐름이나 상태를 관리한다.
그렇다면, 이러한 로직들을 어떻게 분리해서 코드를 작성할 수 있을까?
개발자는 앱을 실행하는 코드를 각각의 역할과 성격에 맞게 분리해서 가독성 좋고 유지보수성 높은 코드를 작성하기 위해 MVC패턴, MVVM 패턴, 클린아키텍처 등의 아키텍처를 도입한다.
📌 아키텍처 vc 디자인패턴
- 아키텍처는 MVC, MVVM, 클린 아키텍처 등 시스템 전체의 설계를 위한 가이드라인을 의미한다.
- 디자인 패턴은 싱글턴 패턴, 옵저버 패턴 등 구체적인 문제를 해결하기 위한 설계 방법을 의미한다.
클린 아키텍처를 간단히 알아보면 아래와 같이 레이어를 분리한다.
비즈니스 로직 (Domain Layer)
애플리케이션의 핵심 기능을 담당하며, 비즈니스 규칙과 데이터를 처리한다.
애플리케이션 로직 (Use Case Layer)
비즈니스 로직을 실행하는 과정과 흐름을 제어하며, 상위 레벨에서 구체적인 작업을 처리한다.
프레젠테이션 로직 (Presentation Layer)
사용자 인터페이스(UI)와 관련된 로직으로, 뷰를 그리거나 사용자 입력을 받아 화면을 업데이트하는 역할을 한다.
외부 인터페이스 (Infrastructure Layer)
데이터베이스, 외부 API, 파일 시스템 등 외부 시스템과의 상호작용을 담당한다.
이러한 아키텍처는 로직을 분리하고, 각각의 책임을 명확히 하는 데 중점을 둔다.
하지만 상황에 따라 하나의 로직이 여러 책임을 포함하거나 프로젝트 내부의 로직을 명확히 구분하기 어려운 경우가 있다. 따라서 개발자가 주관을 갖고 각 로직의 경계를 명확히 구분하고, 필요에 따라 유연하게 조정하는 것이 중요하다! 이를 위해 계속해서 아키텍처를 학습하고, 지속적으로 아키텍처를 고려하며 개발을 해야한다.