트렌드브리프
리스프, 지금 배우면 실무에 도움이 될까

리스프, 지금 배우면 실무에 도움이 될까

게시 · 최종 업데이트 · 약 6분 분량

AI 요약

리스프는 코드와 데이터를 같은 구조로 다루는 오래된 언어 계열로, 매크로와 대화형 개발로 프로그래밍 시야를 넓혀 준다는 평가를 받는다. 주력 언어가 아니어도 학습 가치가 크며 스킴이나 클로저 방언으로 시작하는 방법이 흔히 권장된다.

목차
  1. 리스프는 어떤 언어인가
  2. 왜 굳이 리스프를 배우나
  3. 실무에 정말 도움이 되나
  4. 리스프, 어디서부터 시작하나
  5. 현실적인 기대치는

리스프(LISP)는 코드와 데이터를 같은 형태로 다루는 유서 깊은 언어 계열이다. 이 구조 덕분에 언어 문법 자체를 확장하는 매크로, 프로그램을 켜 둔 채 고쳐 나가는 대화형 개발 같은 기능이 자연스럽게 나온다고 평가된다. 당장 회사 주력 언어로 삼지 않더라도 프로그래밍을 보는 눈을 바꿔 준다는 이유로 학습 가치를 높게 치는 개발자가 많다. 처음이라면 스킴이나 클로저처럼 접근하기 쉬운 방언부터 시작하는 편이 무난하다.

리스프는 어떤 언어인가

리스프(Lisp)라는 이름은 리스트 처리(LISt Processing)의 줄임말이다. 영문 위키백과 Lisp 문서에 따르면 존 매카시가 1958년 MIT에서 개발을 시작했고, 지금도 널리 쓰이는 고수준 언어 가운데 포트란 다음으로 오래된 언어다. 하나의 언어라기보다 공통된 사상을 공유하는 방언들의 모음에 가깝다.

가장 눈에 띄는 특징으로는 소괄호로 감싼 S-표현식이라는 단순한 표기법이 꼽힌다. 같은 문서에 따르면 매카시가 처음 구상한 표기는 M-표현식이었지만, 프로그래머들이 S-표현식 쪽을 빠르게 택하면서 지금의 모습으로 굳었다.

괄호가 많다는 이유로 낯설게 느끼는 사람이 적지 않다. 그런데 이 단순한 표기가 곧 리스프의 핵심 무기라는 설명이 많다. 코드가 그대로 리스트라는 데이터이고, 데이터가 다시 코드가 될 수 있기 때문이다. 코드와 데이터의 형태가 같은 이 성질을 흔히 동형성이라고 부른다. 위키백과는 프로그램 코드의 구조를 표준 데이터 구조로 그대로 표현한 최초의 언어로 리스프를 꼽는다.

말로 하면 어렵지만 코드로 보면 단순하다. 함수 정의도, 호출도, 데이터도 전부 같은 괄호 리스트다.

(defun square (x) (* x x))   ; 함수 정의 — 이것도 리스트다
(square 7)           ; => 49
(mapcar #'square '(1 2 3 4))  ; => (1 4 9 16)

;; 따옴표 하나만 붙이면 코드가 그대로 데이터가 된다
'(defun square (x) (* x x))

역사가 긴 만큼 남긴 것도 많다. 같은 문서는 트리 자료구조, 가비지 컬렉션 같은 자동 메모리 관리, 동적 타이핑, 조건문, 고차 함수, 재귀, REPL을 리스프가 개척한 기능으로 정리한다. 오늘날 어떤 언어를 쓰든 매일 마주치는 것들이다.

실무에서 마주칠 법한 대표적인 방언은 다음과 같이 거론된다.

왜 굳이 리스프를 배우나

한마디로 언어를 다루는 방식 자체를 새로 배우기 때문이다. 대부분의 언어는 문법이 고정돼 있어 주어진 틀 안에서만 코드를 짠다. 반면 리스프 계열은 매크로로 문법을 직접 늘릴 수 있다는 점이 자주 강조된다.

실무 감각으로 풀면 이렇다. 반복되는 패턴이 보이면 보통 함수로 묶는다. 그런데 함수로는 잡히지 않는, 문법 수준의 반복이 있다. 리스프에서는 그런 부분까지 매크로로 걷어낼 수 있다고 소개된다. 라이브러리가 마치 언어의 일부처럼 녹아드는 경험을 준다는 이야기가 많다.

;; n번 반복하는 제어 구문을 매크로로 직접 만든다
(defmacro repeat (n &body body)
 `(dotimes (i ,n) ,@body))

(repeat 3 (print "hello"))

매크로의 힘을 사업으로 증명한 사례가 비아웹(Viaweb)이다. 폴 그레이엄은 2001년 에세이 Beating the Averages에서 온라인 쇼핑몰 빌더 비아웹을 커먼 리스프로 만든 덕분에 경쟁사보다 기능을 빨리 내놓을 수 있었다고 밝혔다. 비아웹은 1998년 야후에 4,960만 달러 상당의 주식으로 인수돼 야후 스토어가 됐다.

또 하나는 대화형 개발이다. REPL이라 부르는 환경에서 프로그램을 실행해 둔 채 함수 하나를 고치고 곧바로 결과를 확인하는 흐름이 강조된다. 빌드하고 재시작하는 대기 시간이 줄어 실험이 빨라진다는 점을 장점으로 꼽는 개발자가 많다.

실무에 정말 도움이 되나

주력 언어로 채택하지 않더라도 도움이 된다는 의견이 많다. 리스프에서 익힌 사고방식이 다른 언어를 쓸 때 그대로 힘을 발휘하기 때문이다.

예를 들어 파이썬이나 자바스크립트의 고차 함수, 자바의 스트림, 러스트의 매크로 같은 기능은 리스프 계열에서 다듬어진 아이디어와 뿌리가 닿아 있다는 설명이 자주 나온다. 리스프를 한 번 거치면 이런 기능이 왜 그런 모양으로 생겼는지 감이 잡힌다.

설정 파일이나 규칙 엔진처럼 작은 도메인 특화 언어를 직접 설계할 일이 생겼을 때도 참고가 된다. 데이터로 규칙을 표현하고 그 데이터를 코드처럼 해석하는 방식은 리스프가 오래 다듬어 온 패턴이다.

리스프 자체로 큰 시스템을 세운 사례도 있다. ITA 소프트웨어는 항공권 검색 엔진 QPX를 커먼 리스프로 구축했고, 영문 위키백과 ITA Software 문서에 따르면 카약·오르비츠 같은 여행 검색 서비스가 이 엔진을 썼다. 구글은 2010년 7월 이 회사를 현금 7억 달러에 인수한다고 발표했다.

리스프, 어디서부터 시작하나

작은 방언 하나를 골라 직접 코드를 짜 보는 편을 권한다. 스킴은 문법이 작아 핵심 개념만 빠르게 익히기 좋다는 평가가 많고, 클로저는 이미 JVM이나 자바에 익숙한 개발자가 실무에 가깝게 접근하기 좋다는 소개가 흔하다.

자료는 common-lisp.netclojure.org처럼 방언별 공식 사이트에 모여 있다.

설치부터 REPL 실행까지는 명령 몇 줄이면 된다. 맥 기준으로 커먼 리스프 구현체 SBCL은 홈브루 공식 포뮬러로 설치하고, 클로저는 clojure.org 공식 설치 가이드가 안내하는 명령을 그대로 쓰면 된다.

brew install sbcl          # 커먼 리스프 구현체 SBCL
brew install clojure/tools/clojure  # 클로저 (공식 설치 가이드 기준)
sbcl  # 커먼 리스프 REPL 시작
clj  # 클로저 REPL 시작

시작 단계에서는 다음 순서가 무난하다는 조언이 많다.

괄호에 압도되지 않는 것이 관건이다. 에디터의 괄호 짝 맞춤 기능과 자동 들여쓰기를 켜 두면 부담이 크게 줄어든다는 이야기가 많다.

현실적인 기대치는

장점만 있는 것은 아니다. 리스프 계열은 주류 언어에 비해 채용 시장이나 라이브러리 생태계가 좁은 편이라는 지적이 있다. 그래서 당장의 취업이나 특정 제품 개발을 목표로 한다면 우선순위가 밀릴 수 있다.

숫자로 보면 양면이 같이 보인다. 스택 오버플로 2024년 개발자 설문에 따르면 클로저 사용자는 얼랭 사용자와 함께 연 소득 상위권으로, 평균 9만 5,000달러(USD)를 넘겼고 평균 경력은 약 12년이었다. 쓰는 사람은 적어도 그 안의 몸값은 낮지 않다는 뜻이다.

그렇지만 학습 도구로서의 값어치는 별개라는 평가가 많다. 며칠 투자해 기본기를 익히는 것만으로도 코드를 구조로 바라보는 습관이 생기고, 그 습관은 어떤 언어를 쓰든 남는다. 리스프로 가는 길은 특정 언어로 갈아타는 여정이라기보다 프로그래밍을 보는 시야를 한 단계 넓히는 과정에 가깝다.

더 많은 글 보기 RSS 구독