처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.05.18 76

Prolog의 어두운 면: 논리 프로그래밍 언어가 우리에게 남긴 교훈

Hacker News 원문 보기

무슨 이야기인가요?

혹시 Prolog라는 언어 들어보셨어요? 컴퓨터공학과 수업에서 잠깐 다루고 지나가거나, AI 역사 책에서 "1980년대 일본의 5세대 컴퓨터 프로젝트에 쓰였던 그 언어" 정도로 기억하는 분들이 많을 거예요. 명령형 언어(C, Java, Python처럼 "이것 하고 저것 해"라고 시키는 언어)와 완전히 다른 선언형 논리 프로그래밍 언어인데요. "답이 만족해야 할 조건"을 적어두면, 언어 자체가 그 조건을 만족하는 답을 찾아주는 방식으로 동작해요.

오스트리아의 Markus Triska라는 Prolog 전문가가 운영하는 사이트 metalevel.at에 "Prolog Coding Horror"라는 글이 올라왔어요. 제목이 좀 자극적이지만, 사실 내용은 잘못 쓴 Prolog 코드의 흔한 패턴들을 보여주면서, 왜 그게 문제이고 어떻게 고쳐야 하는지를 설명하는 교육 자료예요. Prolog를 안 쓰는 사람에게도 흥미로운 이유는, 이런 "코딩 호러"들이 사실 모든 언어에서 비슷한 형태로 반복된다는 점 때문이에요.

어떤 "호러"들이 있을까요?

글에서 다루는 대표적인 안티패턴을 풀어 설명해볼게요. 첫 번째는 불필요한 if-then-else의 남용이에요. Prolog의 강력함은 패턴 매칭에서 나오거든요. 예를 들어 리스트가 비었는지 아닌지를 검사할 때, 명령형 언어에 익숙한 사람은 if List == [] then ... else ... 같은 식으로 쓰려고 해요. 하지만 Prolog에서는 그냥 두 개의 절(clause)을 만들어서 foo([]) :- ...foo([H|T]) :- ... 처럼 패턴으로 분기하는 게 훨씬 자연스럽고, 추후에 코드를 분석하거나 역방향으로 실행할 때도 잘 동작해요.

두 번째는 "!"(cut)의 무분별한 사용이에요. cut은 백트래킹(역추적, 다른 가능성 탐색)을 막는 연산자인데, 성능을 위해 가끔 필요하지만 남용하면 코드가 "선언적"이라는 Prolog의 본질을 잃어버려요. 함수형 언어에 비유하자면, Haskell에서 unsafePerformIO를 남발하는 것과 비슷한 느낌이에요. 코드가 "무엇"을 의미하는지가 아니라 "어떤 순서로 실행되는지"에 의존하게 되거든요.

세 번째는 assert/retract를 일반 변수처럼 쓰는 것이에요. 이건 글로벌 상태를 마구 변경하는 거라서, 함수 호출의 결과가 호출 순서에 따라 달라지는 끔찍한 상황이 벌어져요. 마치 자바스크립트에서 모든 변수를 window 객체에 박아두고 쓰는 것과 같아요.

네 번째 호러는 정수와 산술 처리의 오용이에요. Prolog에서 X = 1 + 2X3이 들어가는 게 아니라 1+2라는 표현식 자체가 들어가요. 산술 평가를 하려면 X is 1 + 2처럼 is를 써야 하죠. 이걸 헷갈리면 "왜 결과가 이상하지?" 하면서 몇 시간을 날려요. 더 나아가서, 글에서는 임의의 큰 정수에 대해서도 잘 동작하는 CLP(FD) (Constraint Logic Programming over Finite Domains)라는 라이브러리를 쓰라고 권장해요. 이게 진짜 Prolog의 매력 포인트거든요.

왜 이런 글이 의미 있을까요?

Prolog는 사실 주류 언어는 아니에요. 그런데 최근 들어 다시 주목받는 흐름이 있어요. AI 분야에서 신경망과 기호 추론(symbolic reasoning)을 결합하는 "뉴로-심볼릭" 접근이 다시 떠오르고 있고, Prolog 같은 논리 프로그래밍이 그 한 축을 담당할 수 있다는 기대감이 커요. LLM이 자연어로 추론을 흉내내긴 하지만, 정확한 논리적 도출이 필요한 영역에서는 여전히 약점이 있거든요. 그래서 LLM이 Prolog 코드를 생성하고, Prolog 엔진이 실제 추론을 수행하는 하이브리드 시스템 연구가 늘고 있어요.

비슷한 맥락에서 Datalog(Prolog의 제한된 버전)는 데이터베이스 쿼리, 정적 분석(Soufflé 같은 도구), 정책 엔진(OPA의 Rego도 영향을 받음)에 널리 쓰이고 있어요. Apple은 보안 도구에서 Datalog를 활용하고, Meta는 코드 분석에 Glean이라는 Datalog 기반 시스템을 써요. 즉 Prolog 자체는 변두리에 있지만, 그 후예들은 우리가 모르는 사이 인프라 깊숙이 들어와 있다는 거죠.

한국 개발자에게 주는 시사점

첫 번째 교훈은 "언어의 패러다임을 거스르지 말자" 는 거예요. Prolog를 명령형처럼 쓰면 흉측한 코드가 나오듯, 함수형 언어를 객체지향처럼 쓰거나, React를 jQuery처럼 쓰면 똑같은 코드 호러가 발생해요. 새 언어를 배울 때는 그 언어의 "결"을 먼저 느끼는 게 중요해요.

두 번째는 선언형 사고가 점점 더 중요해진다는 점이에요. SQL, GraphQL, Terraform, Kubernetes 매니페스트, React JSX, CSS까지 우리가 매일 쓰는 도구들이 다 선언형이거든요. "무엇"을 적으면 "어떻게"는 도구가 알아서 해결해주는 패러다임이죠. Prolog의 호러를 이해하면 이런 도구들을 더 잘 다룰 수 있어요. 예를 들어 SQL에서 의도하지 않은 서브쿼리 폭발을 일으키는 패턴이나, React에서 useEffect를 명령형처럼 쓰는 안티패턴이 다 비슷한 뿌리예요.

세 번째는 호기심 차원이에요. SWI-Prolog는 무료고, 웹 기반 인터프리터도 많아요. 주말에 한두 시간 투자해서 "가족 관계 추론" 같은 클래식 예제 한 번 돌려보면, 우리가 평소에 쓰는 if/for 같은 것에 갇혀있던 사고가 확장되는 느낌을 받을 수 있어요.

마무리

한 줄 요약하면, Prolog의 안티패턴을 보면 그 언어가 추구하는 본질이 더 또렷하게 보인다는 이야기예요. 그리고 그 본질은 우리가 지금 쓰는 많은 선언형 도구들의 뿌리이기도 하고요.

여러분은 어떻게 생각하세요? 주류가 아닌 패러다임의 언어를 한 번쯤 깊이 배워본 경험이 있으신가요? 그 경험이 주류 언어로 코딩하는 방식에 어떤 영향을 주었나요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.