수학이 코드 설계에 영향을 준다고?
데이터 분석을 해본 분이라면 pandas나 polars 같은 DataFrame 라이브러리를 한 번쯤 써봤을 거예요. 그런데 이 DataFrame이라는 구조를 수학적으로 바라보면 어떤 통찰을 얻을 수 있을까요? 최근 공개된 한 글에서 카테고리 이론(Category Theory)이라는 수학 분야의 개념을 빌려와 DataFrame의 설계를 분석하는 흥미로운 시도가 있었어요.
카테고리 이론이 뭐냐면, 쉽게 말해서 "것들 사이의 관계"를 연구하는 수학이에요. 구체적인 숫자나 수식보다는 "A에서 B로 가는 변환이 있고, B에서 C로 가는 변환이 있으면, A에서 C로 직접 가는 변환도 있어야 한다" 같은 구조적 패턴을 다루거든요. 프로그래밍에서 함수 합성(compose)이랑 똑같은 이야기예요.
핵심 개념: Functor와 DataFrame의 만남
이 글의 핵심 아이디어는 DataFrame의 map 연산이 카테고리 이론에서 말하는 Functor(펑터)와 정확히 대응된다는 거예요. Functor가 뭐냐면, 어떤 구조를 유지하면서 내부 값만 변환하는 도구라고 보면 돼요. 예를 들어 리스트의 map을 생각해보세요. [1, 2, 3]에 "각각 2를 곱하기"를 적용하면 [2, 4, 6]이 되잖아요. 리스트라는 구조는 그대로인데 안에 든 값만 바뀌죠. DataFrame의 컬럼에 함수를 적용하는 것도 마찬가지예요. 테이블이라는 구조는 유지하면서 각 셀의 값만 변환하는 거니까요.
여기서 더 나아가서, DataFrame의 filter 연산은 카테고리 이론의 자연 변환(Natural Transformation)으로 볼 수 있다는 분석도 나와요. 자연 변환이란 두 Functor 사이의 "일관된 변환"을 의미하는데, 필터링이 DataFrame의 구조적 성질을 깨뜨리지 않으면서 행을 선택하는 과정이 이 정의와 맞아떨어진다는 거예요.
groupby 같은 집계 연산은 Monad(모나드)의 관점에서 설명돼요. 모나드라는 단어가 어렵게 느껴질 수 있는데, 핵심은 "납작하게 만들기(flatten)"예요. groupby를 하면 원래 하나의 테이블이 그룹별로 여러 개의 작은 테이블로 나뉘잖아요. 이걸 다시 하나의 테이블로 합치는 과정(aggregate)이 모나드의 join 연산과 같다는 이야기예요.
이게 왜 실용적인가
"수학 이론이 좋다는 건 알겠는데, 그래서 코드에 뭐가 달라지는데?"라는 질문이 나올 수 있어요. 핵심적인 실용적 가치는 API 설계의 일관성에 있어요.
카테고리 이론의 법칙들, 예를 들어 Functor의 항등법칙(identity law)이나 합성법칙(composition law)을 만족하는 API는 사용자가 예측 가능한 방식으로 동작해요. pandas에서 가끔 겪는 "이 연산 결과가 왜 이렇지?" 하는 혼란의 상당수가, 사실 이런 수학적 법칙을 위반하는 API 설계에서 온다는 거죠. 반면 polars가 pandas보다 직관적으로 느껴지는 이유 중 하나도, polars의 Expression 시스템이 이런 합성 법칙을 더 잘 지키기 때문이라는 분석이 가능해요.
또한 이런 관점은 최적화에도 도움이 돼요. Functor 법칙에 의하면 df.map(f).map(g)는 df.map(f∘g)와 같은 결과를 내야 하거든요. 이걸 쿼리 옵티마이저가 활용하면 두 번 순회할 걸 한 번으로 줄일 수 있어요. 실제로 polars의 lazy evaluation이 이런 최적화를 내부적으로 수행하고 있고요.
업계 맥락: 타입 시스템과 함수형 프로그래밍의 영향력
이 글이 나온 배경에는 함수형 프로그래밍의 아이디어가 데이터 엔지니어링으로 확산되는 더 큰 흐름이 있어요. Haskell의 타입클래스에서 시작된 Functor, Monad 같은 개념이 Scala의 Spark를 거쳐, 이제는 Python 생태계에서도 자연스럽게 논의되고 있는 거죠.
polars가 Rust로 작성되면서 타입 안전성을 강조하는 것도 같은 맥락이고, 최근 등장한 Narwhals 같은 DataFrame 호환 레이어가 "어떤 백엔드든 같은 의미론으로 동작해야 한다"고 주장하는 것도 결국 카테고리 이론이 말하는 구조 보존의 원칙과 통하는 이야기예요.
한국 개발자에게 주는 시사점
솔직히 당장 카테고리 이론을 깊이 공부할 필요는 없어요. 하지만 이 글에서 가져갈 수 있는 실용적인 교훈은 분명해요. DataFrame 라이브러리를 쓸 때 map, filter, groupby 같은 연산이 그냥 편의 기능이 아니라 수학적으로 잘 정의된 구조라는 걸 인식하면, 왜 어떤 체이닝은 잘 되고 어떤 건 예상과 다른 결과를 내는지 이해하는 데 도움이 돼요. 특히 pandas에서 polars로 마이그레이션을 고려하고 있다면, 이런 이론적 배경이 두 라이브러리의 설계 철학 차이를 이해하는 좋은 렌즈가 될 수 있어요.
마무리
카테고리 이론은 "코드 뒤에 숨은 구조"를 보는 눈을 길러줘요. 여러분이 매일 쓰는 map과 filter 뒤에 이런 수학적 기반이 있다는 걸 알고 나면, API 설계를 보는 시각이 조금은 달라질 거예요.
혹시 함수형 프로그래밍 개념이 실무 데이터 분석에서 실제로 도움이 됐던 경험이 있으신가요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공