요약
수학에서는 연산자의 특징에 따라, 연산 순서가 중요하거나 중요하지 않은 경우가 존재한다.
이는 교환 법칙, 결합 법칙으로 표현되며, 다음과 같이 설명할 수 있다.
- 교환 법칙: 피연산자의 순서와 관계 없이 동일한 결과를 보증
- e.g.
A + B = B + A - 개발 최적화 이론에 적용 (조건문의 Short-circuit Evaluation 등)
- 아키텍쳐 설계에서 CDC나 이벤트 스트리밍에 활용하기도 함
- e.g.
- 결합 법칙: 그룹화 하여 처리하되, 그룹간의 연산 순서와 상관 없이 동일한 결과를 보증
- e.g.
A + (B + C) = (A + B) + C - 그래픽스의 행렬 연산 최적화 (Matrix Chain Multiplication)
- 아키텍쳐 설계에서 병렬/배치과 같은 분산 처리시스템에 활용
- e.g.
단순히 수학적 수식으로만 보고 판단하는 것이 아닌, 실제 개발에 어떤 식으로 응용되는지도 자세히 분석하는 것을 목표로 학습하고 있다.
배경
학창시절부터, 수학에 대해 깊게 생각해보거나 몰입해본 경험은 크게 없었던 거 같다.
다만 개발자로 일하고, 여러가지 상황들을 마주하다보니 수학의 필요성에 대해 크게 체감했다.
기초적인 수학 지식부터 차분히 배워가면서, 이를 블로그에 하나씩 정리해 나가고자 한다.
내용
연산자의 우선 순위와 함께 자주 나오는 개념인 교환 법칙과 결합 법칙이다.
연산자의 우선순위는 *, /, +, -와 같이 어떤 연산자를 우선적으로 계산한 것인지 나타낸 것이라면,
교환 법칙과 결합 법칙은 연산 순서가 최종 결과에 영향을 주는 지 정리한 내용이다.
교환 법칙
정의
- 연산을 수행할 때, 피연산자의 순서를 바꾸어도 그 결과는 동일
- e.g.
A + B = B + A - e.g.
A * B = B * A - 적용되는 연산
- 더하기
- 곱하기
- 벡터 내적 연산
- 부울 대수 AND, OR
- 행렬 덧셈
- 집합 (합집합, 교집합)
수학적 정의는 위와 동일하다.
다만 이를 개발에서는 어떻게 적용하는 지가 꽤나 흥미롭다.
예를 들어 은행 시스템을 개발한다고 가정해보자
여기서 입금 트랜잭션의 경우, 어떤 순서로 들어오더라도 최종적으로 같은 결과를 도출하기에 교환 법칙이 성립한다고 말할 수 있다.
그렇다면 입금 트랜잭션은 교환 법칙이 성립하기에, 전송 단에서 TCP와 같은 순서 보증 또는 애플리케이션 내부의 트랜잭션 순서 보증과 같은 오버헤드를 줄일 수 있을 것이다.
이와 반대로 교환 법칙이 성립되지 않는 출금과 같은 로직의 경우 순서가 중요하기에, 이러한 순서를 보장해야하는 오버헤드가 반드시 시스템 설계상 필요할 것이다.
이런 설계는 순서 보증이 필요한 출금 트랜잭션만 선택적으로 보증하고, 교환 법칙이 성립하는 입금 트랜잭션에서는 보증하지 않으므로 전반적인 시스템 성능 및 처리량 향상이 기여할 수 있을 것이다.
분산 데이터베이스 환경에서도, 이러한 교환 법칙은 빛을 발한다.
분산된 노드가 각각 입금에 대해서 처리하고, 나중에 최종적으로 하나의 결과로 병합함으로 일관성을 유지할 수 있기 때문이다.
바로 DB에 요청을 보내 반영 하는 것이 아닌, 메모리 상 저장해두고 있다가 추후에 비동기적으로 작업함으로 빠른 처리 작업과 IO 작업을 최소화할 수 있을 것이다.
결합 법칙
- 연산을 수행할 때, 그룹을 묶는 순서와 관계 없이 결과는 동일
- e.g.
(A + B) + C = A + (B + C) - e.g.
(A * B) * C = A * (B * C) - 적용되는 연산
- 더하기
- 곱하기
- 부울 대수 AND, OR
- 행렬 곱셈
개발에서는 다음과 같이 적용한다.
전체 데이터를 여러가지의 스트림(그룹)으로 나누어서 처리함으로, 병렬처리를 효율적으로 적용하기 위한 판단 기준으로 삼을 수 있다.
Database 샤딩의 경우, 데이터를 각각의 노드 별로 나누어서 처리함으로 전체 시스템의 처리량을 늘릴 수 있고 최종적으로 종합된 결과는 동일이 보장된다.
행렬 연산이 주가 되는, 3D 그래픽스와 게임에서는 행렬 곱셈 시 결합 법칙이 적용됨을 이용하여 연산 최적화 (Matrix Chain Multiplication)를 진행한다.
교환 법칙 + 결합 법칙
이 두가지 법칙을 모두 달성한 경우, 시스템에서는 효율적으로 확장이 가능할 것이다.
- 교환 법칙으로 인한 데이터 순서 보증 X
- 서버의 수평적 확장을 통한 처리량 증가








