LOLWUT: a piece of art inside a database command

Salvatore Sanfilippo

LOLWUT: 데이터베이스 명령어 속 예술 작품

지난 며칠은 꽤 격렬했습니다. Redis 복제 과정에서 쓰이는 용어를 다른 말로 교체할지 말지를 둘러싼 논쟁에서 제기된 주장 중 하나는 이런 것이었습니다. 기술적인 성과가 전혀 없는 일을 하는 게 과연 가치가 있느냐는 것이었습니다.

가능한 곳에서 특정 단어를 없애기 위해 Redis 소스 코드를 수정하면서, 내가 하고 있는 일에 대해 어떤 생각을 갖고 있든 나는 측정 가능한 기술적 효과가 없는 코드를 쓰는 걸 즐기는 사람이라는 생각이 들었습니다. 단어를 교체하는 일은 그저 귀찮을 뿐입니다. 물론 그 안에서도 몇 가지 해볼 만한 기술적 과제는 있었지만요. 하지만 저는 ‘핵 가치(hack value)’라 부를 만한 품질을 지닌 다른 종류의 코드가 있다고 믿습니다. 그 코드는 어떤 기술적 문제도 해결하지 못할지 몰라도 쓸 가치가 있습니다. 때로는 코드를 쓰는 과정 자체가 보상이 되기 때문이고, 때로는 별 쓸모없는 문제를 해결하는 데 아주 고도로 발달한 기술적 아이디어가 동원되기 때문입니다. 때로는 순수하게 예술적인 이유로 코드가 쓰이기도 합니다.

어떤 면에서 지난 며칠간 트위터에서 벌어진, 대부분 제대로 알지도 못한 채 혼란스럽고 격앙된 논의는 지금 우리가 60년대 최초의 해커들과는 매우 멀어졌다는 생각을 하게 만들었습니다. 나이가 들수록 벽도 없고 미리 만들어진 답도 없으며 오직 탐험만이 한계가 되는 해킹의 관점에서 기술에 대해 이야기하기가 점점 더 어려워진다는 걸 느낍니다. 무슨 말을 하든 ‘모범 사례’가 있고, 어떤 아이디어든 금기가 있습니다. 저는 이런 새로운 분위기에 대해 LOLWUT이라고 말하고 싶습니다. 거기서는 제가 대변된다고 느끼지 못하고, 적어도 제가 생각하는 해킹의 모습도 아니기 때문입니다. 그래서 기술적으로는 쓸모없는 시간을 들여 60년대의 무언가를 탐험해 보기로 했습니다.

제 관심은 곧장 제가 가장 좋아하는 컴퓨터 아트 작품 중 하나로 향했습니다. 게오르크 네스(Georg Nees)의 ‘쇼터(Schotter)’입니다(https://en.wikipedia.org/wiki/Georg_Nees). 네스는 플로터와 ALGOL 프로그램의 도움을 받아 카오스(무작위성)와 반복 패턴을 이용해 예술을 생성하는 프로그램을 쓰는 일을 탐구했습니다. ‘쇼터’는 작품의 단순함과 관찰자가 그 안에서 발견할 수 있는 깊은 의미 때문에 주목할 만합니다. 완전히 차분하고 질서 정연한 표면 아래, 그 깊은 곳에 무질서가 숨어 있습니다. 혹은 거꾸로 뒤집으면 폭풍 속의 바다처럼 보입니다. 표면이 아무리 격렬해 보여도 깊은 바다는 고요함을 유지합니다.

예술 작품 하나를 데이터베이스 명령어로 만들 수 있을까요? Redis는 대부분 커맨드 라인 인터페이스로 사용되기 때문에 이는 만만치 않은 도전이었습니다. 요즘 터미널이 과거보다 확실히 훨씬 멋져지긴 했지만, 그럼에도 제대로 된 그래픽을 표시하기는 여전히 어렵습니다. 반면 실시간 연산이라는 큰 장점이 있습니다. 예술 작품을 동적으로 만들어 생성될 때마다 달라지게 할 수 있습니다.

계속하기 전에 최종 결과를 먼저 보여 드리겠습니다:

해상도는 매우 낮지만 원작의 아이디어는 그대로 살아 있습니다. 이를 가능하게 하기 위해 저는 최근 텍스트 콘솔에서 흥미로운 것들을 보여 주려는 여러 프로그램들이 사용한 트릭을 활용했습니다. 점자(Braille) 유니코드 문자 집합을 이용해 콘솔의 개별 문자보다 더 촘촘한 픽셀 매트릭스를 만드는 방식입니다. 구체적으로 문자 하나당 2x8 픽셀 격자를 넣을 수 있습니다.

실험의 두 번째 부분은 이 예술 작품을 파라메트릭하게 만드는 것이었습니다:

사각형의 개수와 출력 해상도를 바꿔 원작의 다양한 버전을 생성할 수 있습니다. 마지막으로 소스 코드는 문학적 프로그래밍(literate programming)의 예시가 되고자 했습니다. 불투명한 생성기보다는 모든 것이 무엇을 하고 왜 하는지를 설명하는 튜토리얼에 가까운 형태로 작성되었습니다. 코드는 여기에서 확인할 수 있습니다:

https://github.com/antirez/redis/blob/unstable/src/lolwut.c

LOLWUT은 Redis 5부터 전통이 될 것입니다. Redis의 새로운 메이저 버전이 나올 때마다 이 명령어가 하는 일은 완전히 바뀌며, 몇 가지 규칙만 고정됩니다:

  1. 기술적으로 유용한 일을 해서는 안 됩니다.
  2. 하는 일은 빨라야 하며, 그래서 프로덕션 인스턴스에서 LOLWUT을 호출해도 안전해야 합니다.
  3. 출력은 어떤 식으로든 재미있어야 합니다.

Redis 5용 첫 번째 버전은 제가 직접 작성했습니다. 다음 버전들에 대해서는 관심을 보이는 분이 있으면 Redis에 기여한 다른 분에게 다음 LOLWUT 버전을 작성해 달라고 부탁할 생각입니다. 그렇지 않다면 제가 다시 직접 쓰게 되겠지만(그러지 않기를 바랍니다). LOLWUT은 우리가 하는 일, 즉 프로그래밍이 애초에 단지 유용한 무언가를 만들기 위해 시작된 것이 아니라는 사실을 우리 스스로에게 상기시켜 주어야 합니다. 처음에는 무엇보다 가능성을 탐험하는 일이었습니다. LOLWUT이 Redis 커뮤니티에도 컴퓨터는 인간에 관한 것이며, 기술적 함의만을 생각하며 무균적인 방식으로 사고할 수는 없다는 점을 일깨워 주기를 바랍니다. 시스템을 사용하는 사람들이 있고, 시스템을 만드는 사람들이 있으며, 그 밖의 사람들도 있습니다.

원문은 Salvatore Sanfilippo님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.