포카칩으로 알아보는 비즈니스 로직
친구가 내게 물었다. "프론트엔드에서는 데이터를 요청하고 받고 조작하는 게 비즈니스 로직이라고 생각하는 건가?"
이 질문은 비즈니스 로직에 대한 흔한 오해를 잘 보여준다고 생각이 들었다.
그 래서 친구에게 어떻게 비즈니스 로직을 설명 해줄까 고민했다.
그러다 문득 어제 너무 맛있게 먹은 햇감자 포카칩이 생각나서 포스팅을 작성한다.
비즈니스 로직이란
비즈니스 로직(Business logic)은 컴퓨터 프로그램에서 실세계의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분을 일컫는다. 이 용어는 특히 데이터베이스, 표시장치 등 프로그램의 다른 부분과 대조되는 개념으로 쓰인다. - Wikipedia
즉, 비즈니스 규칙 또는 가치를 실현하기 위한 로직이라고 할 수 있다.
포카칩으로 알아보는 비즈니스 로직
포카칩에는 재미있는 사실이 하나 있다.
포카칩을 생산 시기에 따라 국산 햇감자와 생감자 두 종으로 패키지를 구분해 출시하고 있다는 것이다.
그리고 사람들은 두 제품의 맛을 비교하기도 한다.
두 제품의 차이를 가르는 건 원재료인 감자의 원산지이다.
오리온에 따르면 국내에서 감자가 나는 매년 6월부터 11월까지는 국내산 감자로 제품을 생산해 국산 햇감자라는 문구와 함께 출시하는 반면, 국내에서 감자가 나지 않는 12월~5월은 미국과 호주에서 수급한 감자를 사용해 제품을 만들며, 이 제품의 패키지에는 생감자가 표기된다고 한다. - SBS News
위 사실로부터 포카칩 제조사인 오리온에는 다음과 같은 비즈니스 규칙을 가지고 있다는 것을 알 수 있다.
if (사용된_감자 === "햇감자") {
포장지에_표시할_텍스트 = "햇감자";
} else {
포장지에_표시할_텍스트 = "생감자";
}
이 간단한 조건문이 바로 비즈니스 로직의 한 예이다. 단순히 데이터를 표시하는 것이 아니라, 비즈니스 규칙에 따라 어떤 텍스트를 표시할지 결정하고 있기 때문이다.
- 단순한 데이터 처리가 아닌 오리온의 패키징 정책을 구현하고 있으므로 비즈니스 로직이라고 할 수 있다.
왜 비즈니스 로직과 UI 로직이 분리 되어야 한다고 할까?
대충 비즈니스 로직이 무엇인지는 알게 됐다. 그런데 대부분의 개발자들은 왜 비즈니스 로직과 UI 로직이 분리 되어야 한다고 주장 할까?
나는 그것을 SOLID 원칙의 관점에서 이야기 해볼 수 있을 것 같다.
단일 책임 원칙
- 비즈니스 로직과 UI 로직을 분리함으로써 각 모듈이 단 하나의 책임만을 가지게 된다.
- 비즈니스 로직은 비즈니스 규칙을 처리하는 책임만, UI 로직은 사용자 인터페이스를 표현하는 책임만 갖게 된다.
개방 폐쇄 원칙
- 비즈니스 로직을 UI와 분리함으로써, 비즈니스 로직의 변경 없이도 새로운 UI를 추가하거나 기존 UI를 수정할 수 있다.
- 반대로 UI 변경 없이 비즈니스 로직을 확장하거나 수정할 수 있다.
의존관계 역전 원칙
- 고수준 모듈(비즈니스 로직)이 저수준 모듈(UI 로직)에 의존하지 않고, 둘 다 추상화(인터페이스 또는 Prop)에 의존하게 만들 수 있다.
실제 적용 예시
// 비즈니스 로직
function 포카칩_패키징_결정(사용된_감자: 감자): string {
if (사용된_감자 === "햇감자") {
return "100% 국산 햇감자";
} else {
return "100% 생감자";
}
}
// UI 로직
interface 포카칩_Props {
패키지_텍스트: string;
}
function 포카칩_어니언({ 패키지_텍스트 }: 포카칩_Props) {
return (
<포카칩.포장지 색상="초록">
...
<span>{패키지_텍스트}</span>
...
</포카칩.포장지>
);
}
// 사용
const month = new Date().getMonth() + 1;
const 사용된_감자 = 월별_감자_가져오기(month);
const 패키지_텍스트 = 포카칩_패키징_결정(사용된_감자);
return <포카칩_어니언 패키지_텍스트={패키지_텍스트} />;
이렇게 분리함으로써, 비즈니스 로직의 변경(예: 새로운 종류의 감자 추가)이 UI에 직접적인 영향을 주지 않으며, UI의 변경(예: 패키지 디자인 수정)도 비즈니스 로직에 영향을 주지 않는다.
결론
비즈니스 로직은 단순한 데 이터 처리나 표시를 넘어서는 개념이다.
비즈니스 로직은 기업의 정책, 규칙, 그리고 의사결정 과정을 코드로 구현한 것이다.
그리고 프론트엔드에서의 비즈니스 로직도 이와 다르지 않다.
단순히 API를 호출하고 데이터를 받아오는 것만으로는 비즈니스 로직이라고 할 수 없는 것이 그 이유이기도 하다.
그러나 그 데이터를 어떻게 해석하고, 어떤 조건에 따라 사용자에게 어떻게 보여줄지를 결정하는 과정에서 비즈니스 로직이 발생한다.