수학책인데 왜 개발자들이 열심히 읽을까
'Category Theory Illustrated'라는 온라인 교재의 Orders(순서) 챕터가 다시 회자되고 있어요. 카테고리 이론이라고 하면 보통 수학 전공자들이나 보는 어려운 분야라고 생각하기 쉬운데요, 이 교재는 이름 그대로 그림으로 설명해서 개발자도 쉽게 따라갈 수 있게 만들어 놓은 게 특징이에요. 특히 이번 Orders 챕터는 '순서'라는 아주 직관적인 개념에서 출발해서 점점 깊은 수학적 구조까지 이어지는데, 읽다 보면 우리가 평소에 짜는 코드 속에 이미 이런 수학이 숨어 있었다는 걸 깨닫게 돼요.
'순서'가 뭐길래 그렇게 중요할까
순서 이론(Order Theory)이라는 게 이름 그대로 원소들 사이의 순서를 다루는 수학이에요. 숫자 1, 2, 3이 있으면 당연히 크기 순서가 있죠. 그런데 예를 들어 파일 시스템의 폴더 구조를 생각해 보세요. /home과 /home/user는 포함 관계가 있지만, /home/user와 /var/log는 서로 비교할 수 없어요. 이렇게 모든 원소끼리 비교되는 건 아닌 순서를 부분 순서(partial order)라고 하는데요, 이 교재에서는 이 개념을 해시 다이어그램(Hasse diagram)이라는 그림으로 풀어줘요.
여기서 한 단계 더 나가면 격자(lattice) 라는 구조가 나와요. 쉽게 말하면 어떤 두 원소를 골라도 '둘 다 아래에 두는 가장 작은 원소'(join)와 '둘 다 위에 두는 가장 큰 원소'(meet)가 존재하는 구조예요. 이게 뭐 대단해 보이지 않을 수 있는데, 사실 Git의 머지 베이스 찾기, 타입 시스템에서의 서브타이핑, 권한 시스템의 롤 계층 같은 데서 전부 격자 구조가 쓰이고 있어요.
우리가 매일 쓰는 코드 속의 순서 구조
교재를 읽다 보면 아하 싶은 순간이 많은데요, 대표적인 예가 SQL의 ORDER BY나 React의 reconciliation 알고리즘이에요. 두 리스트를 비교해서 어떤 요소가 추가되고 삭제되었는지 계산할 때, 사실은 순서 구조 위에서 어떤 연산을 하고 있는 거거든요. Rust의 trait 시스템에서 PartialOrd와 Ord를 구분하는 이유도 바로 이 부분 순서와 전체 순서(total order)의 차이 때문이에요.
특히 분산 시스템 쪽 개발자라면 CRDT(Conflict-free Replicated Data Type) 를 한 번쯤 들어봤을 텐데요, 이게 동작하는 수학적 기반이 바로 반격자(semilattice)라는 순서 구조예요. 여러 노드에서 각자 변경한 데이터를 합칠 때, 어느 순서로 합쳐도 결과가 같아지려면 join 연산이 교환법칙과 결합법칙을 만족해야 하는데, 이게 정확히 순서 이론에서 말하는 성질이거든요.
비슷한 자료들과 비교해 보면
카테고리 이론 입문서로는 Bartosz Milewski의 'Category Theory for Programmers'가 유명하고, Eugenia Cheng의 'The Joy of Abstraction'도 많이 추천받는 책이에요. 그런데 이 자료들이 대체로 Haskell 경험이 있거나 수학에 어느 정도 익숙한 독자를 가정하는 반면에, 이 Illustrated 시리즈는 완전한 초심자를 대상으로 그림을 적극 활용해서 접근 장벽을 많이 낮춰 놨어요. 특히 Orders 챕터는 카테고리라는 말을 거의 쓰지 않고도 핵심 직관을 전달해 줘서, 나중에 카테고리 이론 본편으로 넘어갈 때 훨씬 수월해요.
한국 개발자에게 주는 시사점
솔직히 말하면 카테고리 이론을 몰라도 웹 서비스 만드는 데는 지장 없어요. 그런데 한 단계 위로 올라가고 싶을 때, 예를 들어 함수형 프로그래밍을 제대로 쓰고 싶거나, 타입 시스템을 설계하거나, 분산 시스템의 일관성 모델을 논의해야 할 때는 이 배경 지식이 엄청난 무기가 돼요. 최근 국내에서도 Scala, Rust, Haskell을 실무에 쓰는 팀이 늘고 있고, Kotlin의 arrow 같은 라이브러리도 자주 언급되는데 이런 도구들의 철학을 이해하려면 순서 이론 정도는 손에 익혀 두면 확실히 도움이 돼요. 주말에 커피 한 잔 마시면서 그림 위주로 훑어봐도 감이 오니까 부담 없이 시작해 볼 만해요.
마무리
수학은 코드를 짧게 만들어 주지는 않지만, 같은 문제를 바라보는 새로운 시야를 선물해 줘요. 여러분은 실무에서 '이거 수학적으로 정리하면 깔끔하겠는데' 싶었던 경험이 있나요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공