코드를 '쓰는' 게 아니라 '말하는' 언어가 있다고요?
우리가 평소 쓰는 파이썬이나 자바스크립트는 '어떻게 할지'를 컴퓨터한테 일일이 알려주는 방식이에요. for 루프 돌리고, if로 분기하고, 함수 호출하고. 이런 걸 명령형(imperative) 프로그래밍이라고 부르거든요. 그런데 Prolog는 완전히 다른 세계에 살고 있어요. '뭐가 참인지' 사실만 적어두면 컴퓨터가 알아서 답을 찾아주는 언어예요. 이걸 논리형(logic) 프로그래밍이라고 해요.
최근에 한 블로그에서 이 Prolog를 포켓몬으로 설명한 글이 올라왔는데, 이게 진짜 신선해요. 그동안 Prolog 입문서들은 가족 관계('철수의 아버지는 영수다' 같은) 예시를 너무 많이 써서 지루했거든요. 포켓몬이라는 익숙한 데이터로 풀어내니까 갑자기 머리에 쏙쏙 들어와요.
사실과 규칙, 그리고 질문
Prolog의 핵심은 딱 세 가지예요. 사실(fact), 규칙(rule), 질문(query). 예를 들어 '피카츄는 전기 타입이다'라고 적어두는 게 사실이에요. 코드로 쓰면 type(pikachu, electric). 이런 식이죠. 이런 사실을 잔뜩 쌓아두면 그게 일종의 데이터베이스가 돼요.
그다음 규칙은 '어떤 조건이 맞으면 이것도 참이다'라는 식으로 쓰는 거예요. '두 포켓몬이 같은 타입이면 같은 진영이다' 같은 거죠. Prolog 문법으로는 same_team(X, Y) :- type(X, T), type(Y, T). 이렇게 써요. 여기서 :-는 '만약'이라는 뜻이고, 쉼표는 '그리고'예요. X의 타입이 T이고, Y의 타입도 T라면 둘은 같은 진영이라는 의미예요.
진짜 마법은 질문 단계에서 일어나요. ?- type(X, electric). 이라고 물어보면 Prolog 엔진이 알아서 데이터베이스를 뒤져서 '전기 타입인 X는 누구인가요?'에 대한 답을 다 찾아줘요. 피카츄, 라이츄, 전기 쥐 다 나오는 거죠. 우리가 SQL의 WHERE type='electric' 쓰는 것과 비슷한데, Prolog는 이런 게 언어 자체의 본질이에요.
백트래킹이라는 신기한 동작
Prolog가 정말 똑똑한 부분은 백트래킹(backtracking)이라는 메커니즘이에요. 이게 뭐냐면, 답을 찾다가 막히면 다시 돌아가서 다른 가능성을 시도해보는 거예요. 마치 미로에서 길을 찾을 때 한쪽 끝까지 가보고 막히면 갈림길로 돌아와서 다른 길을 가보는 것처럼요.
예를 들어 '강한 포켓몬'을 정의하는 규칙이 여러 개 있다고 쳐요. '체력이 100 이상이면 강하다', '진화 단계가 최종이면 강하다' 같은 식으로요. Prolog한테 '강한 포켓몬 찾아줘'라고 하면, 첫 번째 규칙으로 다 찾아본 다음, 안 맞는 애들은 두 번째 규칙으로도 검증해봐요. 이걸 우리가 직접 짜려면 중첩 반복문에 조건문에 머리 아픈 코드가 되겠지만, Prolog에서는 그냥 규칙 두 줄로 끝이에요.
그럼 Prolog는 어디에 쓰나요?
현실에서 Prolog를 메인 언어로 쓰는 회사는 많지 않아요. 솔직히 말하면 거의 없어요. 그런데 이 언어가 만든 사고방식은 곳곳에 살아있어요. SQL의 선언형 쿼리, GraphQL의 데이터 요청 방식, 심지어 React의 선언형 UI까지, 다 '뭘 원하는지만 말하고 어떻게는 시스템에 맡긴다'는 Prolog의 정신이에요.
IBM 왓슨이 제퍼디 퀴즈쇼에서 우승했을 때도 내부에 Prolog 기반 추론 엔진이 있었고, 항공사 좌석 배정이나 일정 관리 같은 제약 충족 문제(constraint satisfaction problem)를 푸는 곳에서도 여전히 쓰여요. 최근에는 Datalog라는 Prolog의 사촌 격 언어가 정적 분석 도구나 보안 분석에서 다시 각광받고 있어요.
한국 개발자가 한 번쯤 만져볼 가치
실무에서 Prolog를 쓸 일은 거의 없을 거예요. 그래도 주말에 두세 시간 투자해서 기본만 익혀두면 코드를 보는 눈이 한 단계 넓어져요. 특히 SQL을 더 잘 짜고 싶거나, AI 추론 시스템, 룰 엔진을 다뤄야 한다면 Prolog식 사고가 큰 도움이 돼요. SWI-Prolog가 무료로 깔리니까 포켓몬 데이터 몇 개 넣고 놀아보세요.
결국 프로그래밍 언어를 배우는 건 새로운 사고방식을 얻는 거잖아요. Prolog는 '명령'이 아니라 '선언'으로 세상을 표현하는 법을 가르쳐줘요. 여러분이 마지막으로 명령형이 아닌 패러다임을 진지하게 배워본 게 언제인가요? 혹시 Prolog나 Haskell 같은 언어를 실무에 살짝이라도 끼워 넣어본 경험이 있다면 공유해 주세요.
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공