
무슨 일이냐면요
데이터를 다룰 때 우리는 보통 SQL을 씁니다. SELECT ... FROM ... WHERE ... 이렇게 문자열로 쿼리를 적어서 데이터베이스에 던지죠. 그런데 이 방식, 생각해보면 좀 불편한 구석이 있어요. 쿼리가 결국 "문자열"이다 보니까 코드를 짜는 동안 컴파일러가 도와주질 못하거든요. 컬럼 이름을 오타 내도 실행하기 전까진 모르고, 쿼리 일부를 떼어내서 다른 데 재사용하기도 까다롭습니다.
Prela라는 프로젝트는 여기에 다른 답을 내놓습니다. "순수 대수 관계 조합자(Purely Algebraic Relation Combinators)"라는 이름이 좀 무섭게 들리는데, 풀어보면 의외로 단순해요. 관계(테이블 같은 데이터 집합)를 다루는 연산을, 레고 블록처럼 끼워 맞출 수 있는 작은 함수들로 제공하겠다는 겁니다.
핵심 내용: '관계 대수'를 코드로
이게 뭐냐면, 사실 SQL의 밑바탕에는 관계 대수(relational algebra)라는 수학 이론이 깔려 있어요. 데이터 집합을 가지고 할 수 있는 기본 동작들이 정해져 있는데, 예를 들면 이런 것들이에요.
- 선택(select): 조건에 맞는 행만 골라내기 (SQL의
WHERE) - 투영(project): 원하는 컬럼만 뽑아내기 (SQL의
SELECT 컬럼) - 조인(join): 두 테이블을 연결하기
- 합집합/교집합: 두 결과를 합치거나 겹치는 부분만 남기기
select(...) 결과를 project(...)에 넘기고, 그걸 또 join(...)에 넘기는 식이죠. 마치 파이프라인처럼요.여기서 "순수 대수"라는 말이 중요한데요. 이 조합자들이 수학적인 법칙(대수 법칙)을 만족한다는 뜻이에요. 예를 들어 "먼저 거른 다음 컬럼을 뽑든, 컬럼을 뽑은 다음 거르든 결과가 같다" 같은 규칙이 보장된다는 거죠. 이게 왜 좋냐면, 이런 법칙이 있으면 쿼리를 자동으로 더 빠른 형태로 바꿔치기(최적화) 할 수 있거든요. 실제로 데이터베이스 엔진이 내부에서 하는 일이 바로 이거예요. Prela는 그 최적화의 토대가 되는 대수 구조를 사용자가 직접 코드 레벨에서 다룰 수 있게 열어준 셈입니다.
업계 맥락에서 보면
사실 이런 "문자열 SQL 대신 코드로 쿼리를 조립하자"는 흐름은 꽤 오래된 갈래예요. 대표적인 게 LINQ(C#), 파이썬의 SQLAlchemy나 Polars, 스칼라의 Slick 같은 것들이죠. 이들을 흔히 임베디드 쿼리 DSL이라고 부르는데, 호스트 언어 안에서 쿼리를 표현하게 해주는 도구들이에요.
Prela가 이들과 결이 다른 지점은 "순수 대수"를 전면에 내세운다는 점입니다. 많은 ORM이나 쿼리 빌더는 편의성에 초점을 맞추다 보니 내부 동작이 마법처럼 가려져 있어요. 반면 Prela는 조합자 하나하나가 명확한 수학적 의미를 갖도록 설계해서, 동작을 예측하고 추론하기 쉽게 만드는 데 무게를 둡니다. 학술적으로는 데이터로그(Datalog)나 관계형 질의 최적화 연구와 맞닿아 있는 접근이에요.
한국 개발자에게 주는 시사점
당장 실무 SQL을 Prela로 갈아엎으라는 얘기는 아니에요. 다만 이런 프로젝트를 들여다보는 건 "우리가 매일 쓰는 SQL이 사실 어떤 원리 위에 서 있는가"를 이해하는 데 큰 도움이 됩니다. 관계 대수를 알고 나면 쿼리 플랜을 읽거나, 느린 쿼리를 왜 옵티마이저가 그렇게 바꿨는지 이해할 때 훨씬 수월해지거든요.
또 함수형 프로그래밍을 좋아하는 분이라면, "작고 합성 가능한 함수로 복잡한 걸 만든다"는 조합자 철학 자체가 평소 코드 설계에도 영감을 줄 수 있어요. 데이터 파이프라인을 짤 때 거대한 한 덩어리 함수보다 작은 단계의 조합으로 쪼개는 습관 말이죠.
마무리
한 줄로 정리하면, Prela는 SQL 문자열 대신 수학 법칙을 지키는 작은 함수들로 쿼리를 조립하자는 실험입니다. 여러분은 쿼리를 짤 때 익숙한 SQL 문자열이 편한가요, 아니면 코드로 타입 안전하게 조립하는 방식이 끌리나요? 실무에서 쿼리 빌더를 써본 경험이 있다면 어땠는지 댓글로 풀어주세요.
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공