모바일ゲーム『몬스터 스트라이크』 서버 엔지니어인 마츠바라 노부타다가 함수형 언어 Haskell의 매력과 난이도, 실제 활용 사례, 최신 동향까지 폭넓게 소개합니다. 타입 시스템, 지연 평가, 언어 간 코드 생성 등 Haskell 특유의 세계를 깊이 있게 탐구합니다.
믹시에는 탐구심이 넘치는 엔지니어가 많이 있습니다.
그 탐구심은 업무에서 다루는 기술에 그치지 않고, 취미로 쓰는 프로그램이나 개인적으로 연구하는 언어 등, 스스로가 궁금해한 기술에 대한 추구로까지 이어집니다.
그래서 사내 엔지니어들에게 ‘좋아하는 기술’을 마음껏 말해 달라는 시리즈를 시작했습니다.
룰은 이렇습니다.
・업무에서 쓰는 기술이든, 쓰이지 않는 기술이든 OK
・어디까지나 개인적인 견해로
・그 기술의 어떤 점이 재미있는지
・사랑을 담아 실컷 이야기해 줄 것
제1회는 ‘몬스터 스트라이크’(이하 몬스트)의 서버 엔지니어 마츠바라에게, 함수형 프로그래밍 언어 ‘Haskell’이 도대체 무엇이 재미있는지, 어떤 언어인지, 마음껏 이야기해 달라고 부탁했습니다.
마츠바라 노부타다(まつばら のぶただ)
2018년에 신입으로 입사. ‘몬스터 스트라이크’의 서버사이드 개발을 담당하며, 업무에서는 주로 Ruby와 Go로 프로그래밍을 한다. 프로그래밍 언어를 좋아해, 취미로는 Haskell과 Elm을 자주 사용한다.

**━━**오늘은 좋아하는 기술에 대해 마음껏 이야기해 주세요! 무엇에 대해 이야기해 주실 건가요?
‘Haskell’이라는 프로그래밍 언어에 대해 이야기하고 싶습니다.

**━━**어떤 프로그래밍 언어인가요?
Haskell은 1980년대 후반에 연구 목적로 만들어진 프로그래밍 언어입니다. 그래서 컴퓨터 과학 분야의 프로그래밍 언어 연구에서 자주 사용됩니다.
**━━**어려워 보이네요… 솔직히, 어떤 점이 ‘아찔하게’ 매력적인가요?
새로운 언어를 처음 접하면 몇 가지 새로운 발견이나 사고방식을 배울 수 있지만, 일단 일通 파악하고 나면 큰 업데이트가 없는 한 점차 신선함이 줄어듭니다. 그런데 Haskell은 쓰면 쓸수록, 몇 단계고 깊이가 있어요!
**━━**흥미롭네요. ‘Haskell’은 어떤 장면에서 쓰이는 언어인가요?
프로그래밍 언어에는 실제 실행하지 않고 프로그램을 검증할 수 있는 ‘정적 타입 검사’가 있습니다. 타입 검사는 언어마다 보장할 수 있는 범위, 즉 강도가 다른데, Haskell은 꽤 강력한 편이죠.
그래서 이미 릴리스되어 동작 중인 시스템의 프로그램을 정리하거나 크게 변경할 때 Haskell이 유효합니다. 프로그램을 한 군데 고치면 어디까지 영향이 미치는지 실제로 돌려 보기 전엔 모른다면 곤란하잖아요. Haskell은 우선 타입 검사로 확인해 보고, 에러가 난 곳만 대응하면 되니 수월합니다.

**━━**믹시 사내에서는 Haskell을 쓰고 있나요?
프로그래밍 언어 중에서도 Haskell의 난이도는 톱 클래스…. Haskell을 쓸 수 있는 엔지니어도 적고, 현재로서는 믹시에서는 사용하지 않고 있습니다. 왜 어렵냐 하면, 일반적인 언어는 위에서 아래로 ‘무엇을 해주었으면 하는지’를 프로그램으로 써 내려가는 스타일인데, Haskell은 기본적으로 마치 수식처럼 심플한 함수를 쓰고 그것들을 합성해 나가는 스타일이거든요. 사고방식을 바꿔야 해서, Go나 Ruby, Java 등 이른바 메이저 언어로 프로그래밍해 온 엔지니어일수록 더 낯설게 느낄 수 있다고 봅니다.
**━━**엔지니어 경험보다 함수를 이해하는 사람이 학습이 빠르다는 말이군요.
그렇습니다. 수학 백그라운드가 있는 분은 습득이 빠른 인상이에요. 게다가 Haskell의 독특한 기능으로 ‘지연 평가’가 있습니다. 예를 들어 ‘X = 1 + 2’라는 수식을 쓰면 일반적인 언어는 즉시 계산하지만, Haskell은 필요한 타이밍이 올 때까지 계산하지 않습니다. 경우에 따라 성능 개선으로 이어지지만, 실행에 걸리는 시간이 들쭉날쭉해져서, 성능 측정에서 다른 언어의 경험을 살리기 어려워 어렵다고 하는 분도 있습니다.
**━━**확실히 개성이 강하네요.
그리고 다채로운 기능이 많은 것도 Haskell의 특징입니다. 일반적인 언어는 다른 언어에는 없는 오리지널 기능이 대략 12개 있고, 다른 언어 경험이 있는 사람이라면 그것만 마스터하면 되는데, Haskell의 오리지널 기능은 12개가 아니라… 정말 많고, 게다가 다른 언어와 비슷한 요소도 거의 없습니다. Haskell을 학습하려 들면, 어떤 엔지니어라도 0부터 프로그래밍 언어를 배우는 것에 가까운 상태가 될지도 몰라요.

**━━**프로그래밍 경험이 많을수록 더 낯설다는 Haskell. 마츠바라 씨가 쓰게 된 계기는 무엇이었나요?
대학 학부생 때 강의에서 쓴 게 처음입니다. 저는 컴퓨터 과학이 전공으로, 타입 시스템을 확장함으로써 버그 발생을 방지할 수 있는지 증명하는 연구를 했습니다. 그와 별개로 취미로 여러 프로그래밍 언어를 만졌고, 특히 Haskell이 재미있다고 느꼈던 기억이 있어요. 어느 날, 프로그래밍을 살릴 수 있는 아르바이트를 찾다가, 중고 고급 시계를 다루는 가게에서 Haskell 프로그래머를 모집하는 것을 발견했죠.
**━━**시계 가게에서 Haskell이라니, 잘 상상이 안 되는데요….
그 가게 엔지니어가 Haskell을 무척 좋아하는 분이어서, 경매로 도매한 시계 정보 관리나 가게 블로그 운영에 Haskell을 쓰고 있더라고요(웃음). 저는 제각각이던 시계 정보를 관리하는 데이터 포맷을 구문 분석해, 시계의 상태나 스테이터스별로 나눠 보기 쉽게 만드는 작업을 맡았습니다. 업무에서 Haskell을 쓴 건 그때가 처음이자 현재로선 마지막이네요. 믹시에 온 뒤에는 학생 대상 워크숍 ‘git challenge’의 시스템을 Haskell로 갈아엎어 사용한 정도입니다. Haskell에 너무 익숙해져서 다른 언어로 쓰는 것보다 빠르거든요.
**━━**정말요!

네(웃음). git challenge의 관리 화면에는 학생들의 답안 상황을 확인할 수 있는 스코어보드가 있습니다. 프런트엔드에는 Elm이라는 프로그래밍 언어를 쓰고, 백엔드 Haskell과 데이터를 주고받는 부분은 Haskell 코드에서 Elm 코드를 자동 생성해 만들었습니다.
**━━**즉, Elm을 거의 쓰지 않고 스코어보드를 수정했다는 건가요?
하나도 안 썼다고 하면 과장이고요(웃음). Haskell은 Haskell 자신을 요소별로 분해해 구문 트리로 만들 수 있어서, 다른 언어로 자동 변환할 수 있는 라이브러리가 풍부합니다.
**━━**Haskell에는 다양한 기능이 있다고 하셨는데, 지금 특히 신경 쓰이는 기능이 있나요?
사실, 바로 오늘도 Haskell의 새로운 버전이 릴리스됐습니다! 그 버전에 추가된 기능이 벌써부터 궁금해요. 프로그래밍은 돌리다 보면 메모리를 쓰게 되니, 예전에는 사용하지 않는 데이터를 수동으로 버려야 했습니다. Java 무렵부터는 사용하지 않는 데이터를 자동으로 삭제하는 ‘가비지 컬렉터’라는 프로그램이 돌기 시작했는데, 이게 동작하면 메인 처리에 시간이 더 걸린다는 게 알려졌죠. 그래서 Rust라는 언어는 타입 시스템을 이용해 똑똑하게 메모리를 관리하는 방식을 도입했고, 최근 몇 년간 화제가 됐습니다. 새로운 Haskell 버전에도 가비지 컬렉션을 완전히 대체하는 것은 아니지만, 비슷한 리소스 관리 메커니즘이 도입됐어요. 빨리 써보고 싶습니다! 원래는 Rust로 구현돼 있던 프로그램이었는데, Haskell은 이번처럼 다른 언어의 접근법도 연구해 받아들이는 점이 재미있어요.
**━━**Haskell의 ‘깊이’가 조금은 느껴지는 것 같아요!
반대로, Haskell의 개념이나 사상이 다른 언어에 받아들여지는 경우도 있어요. 예를 들어 Scala라는 Haskell과 Java를 더한 듯한 언어가 있는데, Haskell을 만져 본 사람에게는 쓰기 쉽다고들 합니다. Haskell은 어렵지만, 한 번 써 보면 다른 프로그래밍에서도 살아나는 장면이 있지 않을까요.
**━━**마츠바라 씨 자신도 Haskell 지식이 도움이 된 적이 있나요?
지식이 직접 도움이 됐다기보다, ‘몬스터 스트라이크’에서 쓰는 빌드 도구 Bazel을 좀 더 길들이고 싶어서, Haskell로 만든 취미 프로그램을 Bazel로 빌드하고 있습니다. 일반적으로 빌드 도구는 언어마다 고유한 것이 존재하지만, Bazel은 언어에 구애받지 않고 쓸 수 있는 도구예요. 편리하지만 드물어서, 낯설게 느껴지는 도구라고들 하죠(苦笑).
**━━**잘하는 Haskell을 발판으로 도구를 길들이고 있는 거군요. 앞으로 도전해 보고 싶은 것은 무엇인가요?
Haskell로 만든 웹 애플리케이션의 효율화를 해 보고 싶습니다. 본업에서 얻은 지식을 취미인 Haskell에도 환원해 나가고 싶어요!
▼마츠바라가 말하는 ‘Haskell’을 더 알고 싶다면 여기로!