해석해보자면 도메인 로직이란 데이터가 어떻게 생성, 저장, 변경될 수 있는지를 결정하는 실제 현실의 비즈니스 규칙을 인코딩하는 프로그램의 일부이다. 인데..
사실 아무것도 모르는 상태에서 이렇게 정의만 읽어보면 비즈니스 로직이니까 당연히 비즈니스 규칙을 인코딩하는 거겠지 하는 생각이 들 것이다. (적어도 나는 그랬다..ㅎㅎ)
이해하기 쉽게 풀어서 말해보자면
소프트웨어 공학에서 도메인은 소프트웨어가 풀고자하는 현실 세상의 문제를 의미한다.
다시 말해, 소프트웨어를 개발하는 대상 영역이라고 이해하면 쉬울 것 같다.
은행 관련 서비스라면, 돈과 관련된 금융 및 은행 업무가 도메인이 된다. 배달 관련 서비스라면 말 그대로 배달이 도메인이 되는 것이다.
반대로 사용자의 데이터를 어떻게 효율적으로 저장할 것인지, 어떻게 더 빠르게 데이터를 가져올 것인지 같은 기술적인 부분은 도메인과는 분리되어 다뤄진다.
그렇다면 Domain logic
과 다른 로직들은 어떻게 구별해서 작성해야하는 것일까.
코드가 무엇을 하고 있는지 판단하면 된다.
즉, 현재 코드가 비즈니스에 중요한 의사결정을 내리는 코드라면 그 코드는 Domain Logic으로 들어가야 한다. (그렇기 때문에 domain logic은 business logic이라고도 부른다.)
반대로 말해 application service logic에는 비즈니스에 중요한 결정을 내리는 코드는 작성하면 안 되며, 이러한 중요 결정들은 모두 도메인 로직에서 처리하도록 위임하는 것이 올바르다. 중요 결정들은 모두 도메인 로직에게 위임하고 특정 어플리케이션 내에서 비즈니스 규칙을 구현하는 코드를 application service logic에 작성하면 된다.
도메인 로직과 다른 유형의 로직들을 구별하는 것은 점점 더 중요해지고 있는데, 도메인 로직을 명시적으로 구분하고 차별화하면 관심사를 명확하게 분리할 수 있기 때문이다.
소프트웨어 설계의 근본 원칙, 관심사의 분리
관심사의 명확한 분리를 통해 우리는 UI 문제 같은 다른 세부 사항에 신경 쓰지 않고 중요 로직에만 집중할 수 있게 된다.
참고
비즈니스 로직, 도메인 로직이 대체 뭐야?
What is domain logic?
Business Logic vs. Application Logic: The Key Differences You Need to Know
Domain Guide
What is Business Logic in Software Development?
안녕하세요.
문제영역에 있는 문제를 해결하기 위해 중요결정을 내리는 코드는 도메인로직으로 위치시켜야한다는 부분에 공감이 되는데요,
비즈니스 규칙을 구현하는 코드는 문제영역에 있는 문제를 해결하기 위한 코드라고도 볼수있지않을까요?
비즈니스규칙을 구현하는 코드를 어플리케이션에 작성하라고 하셨는데 이것또한 도메인로직은 아닐까? 라는 생각이 들었어요.
도메인 로직과 비즈니스규칙을 구현한 코드는 어떤 차이가 있다고 생각하는지 궁금합니다!